久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    Oracle學(xué)習(xí)筆記

     汲取者 2010-05-25

    原創(chuàng)  Oracle 學(xué)習(xí)筆記 收藏

    Resource:

    www.

    www.

    www.

     

    Oracle 服務(wù)器端組成:

    1.內(nèi)存中的instance (數(shù)據(jù)庫(kù)對(duì)應(yīng)的實(shí)例)

    2.磁盤上的database (數(shù)據(jù)文件,日志,參數(shù)文件…)

    對(duì)應(yīng)關(guān)系: 1:1(單實(shí)例) , N:1(集群RAC,每個(gè)主機(jī)一個(gè)數(shù)據(jù)庫(kù)實(shí)例,共享一個(gè)磁盤陣列)

     

    Listener

    運(yùn)行于服務(wù)器上,用于客戶機(jī)遠(yuǎn)程 連接數(shù)據(jù)庫(kù),支持多協(xié)議,TCP/IP對(duì)應(yīng)默認(rèn)端口為1521

     

    DML  CRUD(insert,select,update,delete)

    DDL  alter, create , drop…

    TCL (transaction control lang )  commit, rollback,savepoint

    DCL  (data control lang)      grant revoke

     

    網(wǎng)絡(luò)配置助手 net configuration assistant netca)設(shè)置本地Net服務(wù). 登陸遠(yuǎn)程服務(wù)器。

    也可以直接修改xxxx.ora文件,復(fù)制到指定目錄,通助手設(shè)置效果相同。

    C:\oracle\product\10.2.0\client_1\NETWORK\ADMIN

    sqlnet.ora

    tnsnames.ora 解析數(shù)據(jù) 庫(kù)名在oracle中使用類似DNS的方式,該文件作用類似于網(wǎng)絡(luò)中的host文件

     

    Cmd 連接數(shù)據(jù)庫(kù)sas

    sqlplus /nolog (不 登陸,只是打開sqlplus)

    conn oe/oe@sas

    或者

    sqlplus oe/oe@sas

     

    管理員登陸

    conn sys/pwd@sas as sysdba

     

    如果用戶在操作系統(tǒng)的權(quán)限很高, 可省略用戶名和密碼。 conn / as sysdba;

     

     

     

     

     

    查詢語(yǔ)句

    數(shù)據(jù)庫(kù)與關(guān)系代數(shù)的關(guān)系、

     

    字符串區(qū)分大小寫,如果不清楚大小寫,用upper/lower函數(shù)

    Select * from employees where upper(last_name) = ‘KING’;

    但是如果sqlwhere 語(yǔ)句后的等號(hào)左邊存在函數(shù),則oracle中對(duì)該字段的索引無(wú)效,走全行掃描,性能低。

    字符串使用單引號(hào)

     

    Oracle中的字典表(比如當(dāng)前用戶下的各個(gè)表對(duì)象組成的表),字典表中對(duì)象的 名字都是大寫。

    select table_name from user_tables; --user_tables就是個(gè)字典表

    select * from user_tables where table_name = 'CUSTOMERS'; --CUSTOMERS是大寫

     

    空值 NULL 不知道是什么

    一個(gè)運(yùn)算表達(dá)式中,只要存在一 個(gè)空值,結(jié)果一定是Null.

    由于空值的存在會(huì)導(dǎo)致運(yùn)算的麻 煩,設(shè)計(jì)時(shí)應(yīng)當(dāng)盡量避免空值產(chǎn)生。

    注意

    T and NULL = NULL,  F and NULL = F,

    因?yàn)?/span>NULLT還是F未知,T & T =T, F&T = F, 因此結(jié)果無(wú)法判斷,是null

    但是T&F = F&F = F, 因此 null & f =f

     

     

    列的別名

    在列的名稱后可以緊跟別名或者使用可選的關(guān)鍵字AS放在列名和別名之間

    如果別名包含空格或特殊字符或?qū)? 大小寫敏感,需要雙引號(hào)引用

     

    *表空間備份之前,要設(shè)置表空間進(jìn)入備份模式

    alert tablespace  tbs01 begin backup;

    一個(gè)一個(gè)做很麻煩,可以這樣

     

    Select  name from v$tablespace; 獲得所有表空間

    Select ‘alter’ || name || ‘ begin backup’ from v$tablespace;

    則得到生成的語(yǔ)句串

     

    要保存到文件,利用假脫機(jī)功能

    spool c:\script.sql

    set head off – 去掉 結(jié)果中的標(biāo)題,還有很多類似的設(shè)置

    select ‘alter’ || name || ‘ begin backup’ from v$tablespace;

    spool off

     

     

    count 的問題

    select count(department_id) from (select distinct department_id from employees)

    select count(*) from (select distinct department_id from employees)

    如果department_id有為空的,那么結(jié)果不同,原因是count(department_id)會(huì)不計(jì)算空值的行。

    可以理解為department_id列結(jié)果集中計(jì)算有多少個(gè)有值的行。

    count(*)把結(jié)果集中所有的行都算上,而不管行中的列有沒有值。

    其中前者可簡(jiǎn)化 select count(distinct department_id) from employees;

    單引號(hào) 字符串使用單引號(hào),當(dāng)數(shù)字與字符做比較時(shí),也可以給數(shù)字加上單引號(hào)來說明是作為字符來比較,不是必須的。

    一般多行函數(shù)都會(huì)先把空值去掉再做計(jì) 算。比如AVGSUM等。

     

    日期是格式敏感的

    默認(rèn)格式是 dd-mm-yy

    to_date(1987-01-12,yyyy-mm-dd) 可將習(xí)慣的時(shí)間格式轉(zhuǎn)換為日期

    Oracle 的時(shí)間抽取函數(shù) extract (year from hire_date)

     

     

    ORDER BY select 語(yǔ)句最后出現(xiàn)

    默認(rèn)ASC, 多 列排序 修飾符只修飾緊前一個(gè)。

     

    NLS : national - language - support

     

    修改會(huì)話設(shè)置

    alter  session set xxx = xxx;

    優(yōu)先級(jí) 會(huì)話 設(shè)置 > 環(huán)境變量 > 服務(wù)器默認(rèn)值

    數(shù)據(jù)類型轉(zhuǎn)換

    VCHAR VARCHAR2 一樣。VCHAR2 Oracle 自己定義的,方便日后升級(jí)。

    隱藏?cái)?shù)據(jù)類型轉(zhuǎn)換也會(huì)導(dǎo)致某字段 索引失效。

     

    set autotrace on 追 蹤執(zhí)行計(jì)劃, 查看語(yǔ)句執(zhí)行過程。

     

    to_char, to_number, to_date

     

    空值的問題,即導(dǎo)致上面COUNT問題的原因。很多函數(shù)會(huì)先去掉空值的行。

    可使用NVL來給空值指定一個(gè)值。

    NVL(arg1,arg2) 其中arg1,arg2的值類型必須相同(可以用函數(shù)轉(zhuǎn)換解決不同類型匹配)

    例如 NVL(to_char(manager_id), ‘NO MANAGER’);

     

     

    CASE DECODE 只能處理簡(jiǎn)單的邏輯分支,復(fù)雜情況可使用PL/SQL

     

    連接:

    等值連接即內(nèi)連接

    外連接

     

    外連接: 左連接,右連接( 根據(jù)表在逗號(hào)的左右判斷)

    完全外連接(等值++右的結(jié)果)

     

    語(yǔ)法:字段(+) 如果(+)在等號(hào)右邊,則是左外連接,否則反之。 注意(+) 與左右概念是相反位置的。

     

    分組

    所有在SELECT列表中出現(xiàn)的列,如果未使用組函

    數(shù),那么它必須 出現(xiàn)在GROUP BY子句中

     

    where having 區(qū)別

    Where 在分組之前、針對(duì)每行進(jìn)行篩選。

    Having 在分組后、對(duì)分組運(yùn)算結(jié)果進(jìn)行篩選

    因此:

      你無(wú)法通過WHERE子句限定組

      使用HAVING子句可以限定組

      不能在WHERE子句中使用組函數(shù)

    Select

    Select  department_id,job_id , count(*) from employees group by deparment_id, job_id;

    分組的擴(kuò)展關(guān)鍵字

    Rollup(上卷)  rollup(a,b,c)  分別按照a,b,c  a,b  a all 進(jìn)行 分組。若有n個(gè)字段,則分組n+1次。如下測(cè)試:

    Select  department_id,job_id , count(*) from employees

    group by rollup(deparment_id, job_id);

    department_id, job_id

    department_id

    all

     

    Cube  2^n 種分組情 況。 Cube(department_id, job_id)

    四種情況

    department_id, job_id

    department_id,

    job_id

    all

     

    如果沒有這兩個(gè)關(guān)鍵字,可以使用union all 將多個(gè)情況的結(jié)果構(gòu)造并集,但是麻煩。

     

    單行子查詢必須返回一行數(shù)據(jù) (空行和多行都不允許) > < = <> >= <=

    多行子查詢 ANY, IN ,ALL

     

    Create table t1 as select * from employees;

    Create table t1 as select * from employees where 1=0; 只復(fù)制結(jié)構(gòu)

    上述方式不會(huì)復(fù)制外鍵,索引, 主鍵等約束。

     

    刪除表內(nèi)容:

    delete from t1;    DML 不 自動(dòng)提交 除非正常關(guān)閉sqlplus.

    truncate table t1 (oracle 自帶);  DDL

    空間管理: delete 刪除數(shù)據(jù)后不釋放空間, truncate 釋 放空間。

    重做數(shù)據(jù): delete 生成,寫日志,生成undo data (可能慢)truncate 不生成

    Undo data 更新前的舊數(shù)據(jù),在撤銷表空間

    Redo data 更新后的新數(shù)據(jù)

    Oracle sqlplus中的事務(wù):

             以第一個(gè)DML SQL語(yǔ)句執(zhí)行開始

             以下面的事件為止

        — COMMIT或者ROLLBACK語(yǔ)句被執(zhí)行

        一個(gè)DDL或者DCL語(yǔ)句執(zhí)行(自動(dòng)提交)

        用戶退出SQL*Plus

    系統(tǒng)崩潰

     

    使用COMMITROLLBACK語(yǔ)句,你可以

             確保數(shù)據(jù)一致

             在做永久改變之前可以預(yù)覽數(shù)據(jù)改變

             組邏輯上的相關(guān)操作

     

    COMMIT之后的數(shù)據(jù)狀 態(tài)

             數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變被永久化不會(huì)丟失,即使系統(tǒng)崩潰。

             事務(wù)結(jié)構(gòu),舊事務(wù)狀態(tài)被清除,新事務(wù)開始。

             舊事務(wù)中的鎖定的行被釋放,這些行現(xiàn)在可以被其它用戶進(jìn)行操作。

     

    Rollback之后數(shù)據(jù)的狀 態(tài)

             數(shù)據(jù)的改變被撤回

             數(shù)據(jù)先前的狀態(tài)被還原

             受影響行上面的鎖被釋放

     

    在下列環(huán)境下自動(dòng)提交會(huì)發(fā)生

        — DDL語(yǔ)句被執(zhí)行

        — DCL語(yǔ)句被執(zhí)行

        SQL*Plus中的正常退出,沒有顯式執(zhí)行COMMIT或者ROLLBACK語(yǔ)句

             SQL*Plus非正常結(jié)束或者系統(tǒng)失敗,自動(dòng)回滾發(fā)生。

     

    DB 內(nèi)部調(diào)度要遵循可串行化規(guī)則,前后順序不能變。(參考老胡的PPT

    ORACLE事務(wù)的隔離級(jí)別(獨(dú)立方式) 讀已提交、連續(xù)讀(可串行化)

     

    沒 有提交的數(shù)據(jù),其他用戶是看不到的,即處在 讀已提交 隔離級(jí)別。

    可 能出現(xiàn) 不可 重復(fù)讀 現(xiàn) 象,即兩次讀取的數(shù)據(jù)可能不一樣(被更新了)

     

    Oracle 的語(yǔ)句一致性(多版本并發(fā)控制,不同于其他DB):

    1 語(yǔ)句級(jí)別一致性, 當(dāng)執(zhí)行一個(gè)語(yǔ)句,數(shù)據(jù)與按下回車的那一刻是一致的。

    2 事務(wù)一致性,得到的數(shù)據(jù)與事務(wù)開始的那一刻是一致的。

     

    默 認(rèn)在語(yǔ)句級(jí)別的一致性。

    事 務(wù)一致性在可串行化級(jí)別中實(shí)現(xiàn)。同一個(gè)查詢,在一個(gè)事務(wù)中得到的結(jié)果是一樣的,看不到別人的修改。

    OracleSQLSERVER/DB2 處理方式不同, 事務(wù)A開始后,Oracle允許B修改事務(wù)A的數(shù)據(jù),而SQLSERVER/DB2 會(huì)掛起B的操作直到A事務(wù)完成。如果B修改了A的數(shù)據(jù),A可能無(wú)法再修改那些數(shù)據(jù),因?yàn)闊o(wú)法保證可串行化。

     

    不 可重復(fù)讀與幻象讀

    不 可重復(fù)讀:對(duì)原有數(shù)據(jù)的修改被讀取

    幻 象讀:原有數(shù)據(jù)不變,添加了新的數(shù)據(jù)后被讀取

    Level                                            dirtiy read        nonreaptable read     phantom read

    Read uncommitted

    不 加鎖

     

    Read commited

    鎖 定當(dāng)前游標(biāo)所處理的記錄

     

    Repeatable read

    鎖 定當(dāng)前處理的數(shù)據(jù)

     

    Serlizable

    鎖 定事務(wù)

     

    鎖:        share      exlusive

    Share         y          y       

    Exlusive                  n

    Oracle redo data redo log,    undo data undo tablespace(公開可訪問),并發(fā)時(shí)其他人可能訪問舊數(shù)據(jù)。Oracle中共享鎖和排他鎖可共存,即當(dāng)事務(wù)A寫數(shù)據(jù)X并且未提交時(shí),

    事 務(wù)B可以訪問X的舊數(shù)據(jù)(共享讀),但是不能寫X(排他寫)。

    其 他db 新舊數(shù)據(jù)都在redo log, 并發(fā)時(shí)只能等待。

    Oracle不會(huì)預(yù)防死鎖,但是會(huì)檢測(cè),死鎖必然是業(yè)務(wù)邏輯造成的。

     

    鎖 的升級(jí):MSSQLServer,DB2 會(huì)將鎖保存到鎖鏈表中,可能會(huì)將整個(gè)表鎖住。

    Oracle不做鎖的升級(jí)。

     

    請(qǐng) 求鎖而得不到操作會(huì)被阻塞。

    查詢時(shí)加鎖(悲觀加鎖)  select xxx from yyy for update;

    Oracle DML鎖、DDL鎖、內(nèi)部鎖(栓) 三類鎖。

    栓 用于鎖定內(nèi)存結(jié)構(gòu),

    一 般鎖可能持續(xù)很長(zhǎng)時(shí)間,栓持續(xù)時(shí)間很短。

    鎖 一般是隊(duì)列方式獲得鎖

    栓 是搶先機(jī)制,無(wú)隊(duì)列

     

    字 典表

    用 戶下的User_table, user_view, user_xxxxx…

    管 理員的 Dba_table,…

    所 有有權(quán)限訪問的 Full_table,….

     

    約束

    表間外鍵約束,進(jìn)行如下操作該表 是否受約束影響

             Ins  upd  del

      n    y    y

      y    y    n

    約束不能修改 ,只 能刪除重建

    視圖

    虛表,只包含一個(gè)查詢公式,每次 訪問時(shí)都執(zhí)行公式一次。

    簡(jiǎn)單視圖可以通過視圖的DML操作改變基表,然而也不一定,例如

    T1

    x int not null, y int

     

    v1

    select y from t1;

     

    如果對(duì)v1進(jìn)行插入操作,由于x not null的存在,將無(wú)法進(jìn)行插入。

    可以使用替代觸發(fā)器(取消用戶的 操作,以其他操作來替代)來解決,當(dāng)插入操作進(jìn)行時(shí),自動(dòng)設(shè)置x的值。

     

    With check option 語(yǔ)句根據(jù)創(chuàng)建視圖時(shí)的where語(yǔ)句條件劃定的集合,對(duì)DML進(jìn)行限制,如果修改的數(shù)據(jù)不符合這個(gè)條件,則拒絕DML操作。

     

    TOP-n分析

    y最大的前三個(gè)。

    Select * from t1 where rownum <=3 order by y desc;

    上述寫法錯(cuò)誤,因?yàn)檎Z(yǔ)句先按照where篩選,只得到前三行數(shù)據(jù),因此結(jié)果錯(cuò)誤。

    利用

    Select * from (select * from t1 order by y desc) where rownum <=3;

    或者將子查詢用視圖臨時(shí)保存下 來。

     

    注意! 當(dāng)訪 問某行且條件不滿足時(shí),rownum不會(huì)增加,因?yàn)?/span>rownum是結(jié)果集的行號(hào)!因此不能使用between and 來查詢中間第xx yy范圍的數(shù)據(jù)。

    可以使用集合minus來查詢中間范圍段.

     

    序列的nextval,curval 都不可以更改,只能刪掉重建。

     

    查 看執(zhí)行計(jì)劃

    Set autotrace on

    當(dāng) 開始一個(gè)查詢,系統(tǒng)首先查詢字典表獲取一些信息(recursive calls 遞歸調(diào)用次數(shù))。

    當(dāng) 獲取這些信息后,會(huì)緩存到內(nèi)存,下次查詢?cè)摫頃r(shí),遞歸調(diào)用開銷就小了。

     

    十三章 優(yōu)化部分不作要求。

    基數(shù)(一個(gè)字段值中不重復(fù)值的 個(gè)數(shù))

    Btree 索引: 適用于高基數(shù)的字段, 等值查詢

    Bitmap索引 適用于大量重復(fù)值,低基數(shù)的字段上, 大量邏輯條件判斷。

     

    Hash索引. Oracle不允許。

     

    集合運(yùn)算

    Union(合并時(shí)會(huì)去掉重復(fù)值, 后臺(tái)會(huì)排序可能影響效率), union all(不去除重復(fù)值).

    Intersect 交集

    Minus 相減

     

     

    PL/SQL

    SQL的擴(kuò)展,用于程序設(shè)計(jì)語(yǔ)言。

    數(shù)據(jù)查詢,維護(hù)SQL語(yǔ)句包含在存儲(chǔ)過程中,作為代碼組成部分。

     

    游標(biāo)和活動(dòng)集 就是 指針 和數(shù)組的關(guān)系。

    包有聲明和實(shí)現(xiàn)兩部分。

    能處理的有: 存儲(chǔ) 過程 函數(shù) 觸發(fā)器 等。

     

    匿名塊 存儲(chǔ) 過程 函數(shù) 觸發(fā)器

    如果一個(gè)塊要被頻繁調(diào)用,應(yīng)當(dāng)寫 成存儲(chǔ)過程或者函數(shù)。

    TIMESTAMP Date 更精確

    用單引號(hào)界定字符串,字符串內(nèi)的 單引號(hào)用兩個(gè)單引號(hào)轉(zhuǎn)義。

    NULL是真是假無(wú)法判斷。

     

    組合數(shù)據(jù)類型:

    Tables 類似數(shù)組

    記錄record 類 似于結(jié)構(gòu)體。

     

    PLSQL只允許DML語(yǔ)句執(zhí)行,如果要執(zhí)行DDL,要使用Execute immediate 來動(dòng)態(tài)執(zhí)行語(yǔ)句。

    (類似于js eval ?)

     

    Varchar2(30) 是按照字節(jié)分配的

    Varchar2(30 char) 是按字符分配的(一個(gè)字符根據(jù)編碼不同占用字節(jié)數(shù)不同)

     

    可變數(shù)組 VARRAY

    聯(lián)合數(shù)組 xxtype IS TABLE OF VARCHAR(20) INDEX BY BINARY_INTEGER 下標(biāo)在正負(fù)范圍內(nèi)隨便寫,根據(jù)表格屬性來訪問下標(biāo)。

     

     

    ….睡著了

     

     

    PL/SQL 中的select 只能獲取一行數(shù)據(jù),沒有或者多行都是異常。

     

    系統(tǒng)優(yōu)先將變量名解析為列,因 此不要使用跟列名同名的變量名!

     

    繼續(xù)走神。。。

     

     

    條件空值語(yǔ)句

     

    在判斷真假時(shí),出現(xiàn)NULL,無(wú)法判斷真假,在while, if 等判斷中都是只在值為真的時(shí)候才執(zhí)行。

     

    PLSQLfor 循環(huán)無(wú)法實(shí)現(xiàn)非1-1)步長(zhǎng)的循環(huán)。

    循環(huán)中的循環(huán)變量是自動(dòng)增加 的,且其作用域是在循環(huán)塊內(nèi),當(dāng)與外部變量同名時(shí)覆蓋。

     

     

     

    游標(biāo)

    游標(biāo)分隱式和顯示。每條語(yǔ)句執(zhí)行 時(shí),都會(huì)產(chǎn)生游標(biāo)。

    隱式:在聲明DML PL/SQL SELECT 語(yǔ)句時(shí)自動(dòng)產(chǎn)生的游標(biāo)。

    顯示:在程序中定義。

     

    Declare –>open > fetch <> empty ? >close

     

    Declare

             Cursor cur_name IS

                       Select…;

    BEGIN

    Open cur_name;

    Fetch cur_name into var1, var2..;

    Fetch cur_name into record_var1;

     

    Close cur_name;

    END

     

    使用循環(huán)獲取多行數(shù)據(jù)。

    1普通循環(huán),自己做open fetch close 操作

    Open cur

    LOOP

             Fetch cur into xxxx…;

             Exit when cur%NOTFOUND;

             Do something…

    END LOOP;

    Close cur;

     

    2 用于游標(biāo)的循環(huán) for in , 省略了open fetch close 操作,使用方式簡(jiǎn)潔。

    游標(biāo)不能重復(fù)打開,要再次打 開,要先close

    記住For in 方式使用游標(biāo)會(huì)自動(dòng)打開游標(biāo)。

    Into 的列數(shù)要與cursor定義的一致。

    游標(biāo)使用完畢記得要關(guān)閉,以釋 放內(nèi)存。

    FETCH 之后游標(biāo)才移動(dòng)到該行,因?yàn)?/span>fetch之后還可以做NOTFOUND檢測(cè)。

    游標(biāo) 取值失敗后,不會(huì)將之前的變量值覆蓋,可能造成數(shù)據(jù)重復(fù)。

     

    參數(shù)游標(biāo) 確定指向哪個(gè)表,但是查詢參數(shù)可變

             Cursor xx(v1,v1..) IS …;

             Open xx(val1,val2..);

    參照游標(biāo) :不確定指向哪個(gè)表。

     

    更新游標(biāo)( for update & current of

    Cursor cur_name is

             Select … for update; // 將字段悲觀鎖定

    如果改成 select xx for update of xx; 則只鎖定某個(gè)字段。

    Begin

    ….

    Update xx where current of cursor_name;  更新游標(biāo)指向的 行。

     

    游標(biāo)與事務(wù)

      一般的游標(biāo) 不會(huì)產(chǎn)生鎖

      更新游標(biāo)

          打開游標(biāo)前沒有鎖

          使用for update nowait檢測(cè)鎖的沖突

          打開游標(biāo)后產(chǎn)生鎖(TMRSTXX

          關(guān)閉游標(biāo)后,鎖直到commitrollback結(jié)束事務(wù)才釋放

      使用更新 游標(biāo)過程中不要COMMITROLLBACK(不用for update時(shí)沒事)

     

     

    隱式游標(biāo) 可以使用%NOTFOUND屬性,但是 不能用%ISOPEN

     

     

     

    存儲(chǔ)過程,函數(shù),觸發(fā)器,包

    參數(shù)類型

    IN 當(dāng)作常量使用,不允許作為左值出現(xiàn), 傳參為引用類型。

    OUT/INOUT 左右都可以, 傳參時(shí)會(huì)將值復(fù)制。

    INOUT使用NOCOPY 可以不復(fù)制,直接傳引用,提高效率。

     

    存 儲(chǔ)過程可以重載。

     

    //走神中。。。

     

    觸發(fā)器 審計(jì)

    審 計(jì)只要有操作就觸發(fā),且無(wú)論操作成功還是失敗

    觸發(fā)器在insert,update,delete觸發(fā)。觸發(fā)器如果不提交,會(huì)被回滾。

    觸 發(fā)器可以觸發(fā)操作,而審計(jì)只會(huì)在日志中寫入記錄。

    For each row 加在 creat xx … on yy 后面,則是行級(jí)別的觸發(fā)器,不加是語(yǔ)句級(jí)別的。

     

    兩個(gè)記錄變量 冒號(hào)new/old

    :new  update/insert時(shí),是將要插入 或者更新的新數(shù)據(jù),如果是delete則是空。

    :old  如果是insert,則是空,如果是update則是更新前的數(shù)據(jù),如果是delete, 則是要?jiǎng)h除的數(shù)據(jù)。

    如果插入數(shù)據(jù)不合規(guī)范,可以對(duì):new進(jìn)行整理,然后執(zhí)行插入,則:new中的數(shù)據(jù)會(huì)插入行。

    比如將序列用觸發(fā)器寫入id值:

    before update/insert 創(chuàng)建觸發(fā)器,執(zhí)行

    Select seq.nextval into :new.id from dual;

     

    觸發(fā)器觸發(fā)順序:

    1 語(yǔ)句級(jí)別的before

    2 行級(jí)別before的觸發(fā)器,如果級(jí)別相同,先執(zhí)行后定義的。

    3 處理數(shù)據(jù)

    4 行級(jí)別的after, 同級(jí)執(zhí)行后定義的

    5 下一行。。。

    6 語(yǔ)句級(jí)別的after

     

    觸發(fā)器級(jí)別

    模式級(jí)別(用戶), 數(shù)據(jù)庫(kù)級(jí)別

     

    Oracle 體系結(jié)構(gòu)

    實(shí)例,數(shù)據(jù)庫(kù)

    ----SGA 系統(tǒng)全局區(qū)

    1.   shared pool 語(yǔ) 句的解析、執(zhí)行計(jì)劃的緩存池,適度大小

    2.   Db buffer cache 操作影響的數(shù)據(jù)塊,越大越好,命中率越高

    3.   Log buffer Log積累到一定量一次性寫入

    4.   Large pool [可 選] 備份/恢復(fù)的工作緩存區(qū),如果沒有大 池,則使用共享池

    5.   Java pool[可 選]  對(duì)java應(yīng) 用的支持,分配給它的緩存

    ----background process 后臺(tái)進(jìn)程

             Smon 系統(tǒng)監(jiān)視器(監(jiān)視服務(wù)器)

    Pmon 進(jìn)程監(jiān)視器(監(jiān)視客戶端)

    Dbw(database writer 數(shù)據(jù)庫(kù)寫進(jìn)程) 將內(nèi)存里的臟數(shù)據(jù)塊寫入磁盤,臟數(shù)據(jù)即在內(nèi)存中被修改的數(shù)據(jù)(與磁盤上不一致的)

    數(shù)據(jù) 庫(kù)的瓶頸就在內(nèi)存與磁盤的讀寫的(即IO),因此減少IO是數(shù)據(jù)庫(kù)設(shè)計(jì)的要點(diǎn)。

    寫數(shù) 據(jù)的條件:

    no free buffer

    dirty  xxx 臟數(shù)據(jù)塊累計(jì)到一定量時(shí)

    time out

    tbs offline 離線表空間

    LGWR 日志寫進(jìn)程

    1.   寫觸發(fā)條件:

    2.   Log buffer 1/3 滿時(shí)

    3.   生成 1M redo data 時(shí)

    4.   Per 3 seconds

    5.   Commit定義ACID,指數(shù)據(jù)庫(kù)事務(wù)正確執(zhí)行的四個(gè)基本要 素的縮寫.包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)Commit 時(shí) 寫入日志保證事務(wù)操作的持久性。

    6.   在數(shù)據(jù)庫(kù)進(jìn)程寫之前,要將日志寫磁盤。

    Chpt  當(dāng)檢測(cè)點(diǎn)出現(xiàn),就一定要將內(nèi)存中的臟數(shù)據(jù)寫入數(shù)據(jù)庫(kù)。每隔一定時(shí)間要出現(xiàn)檢查點(diǎn),當(dāng)出現(xiàn)問題時(shí),可 以回復(fù)到最后一個(gè)檢查點(diǎn)。 檢查點(diǎn)是性能和可恢復(fù)性之間的權(quán)衡。檢查點(diǎn)越頻繁,性能低,但是可恢復(fù)性強(qiáng)了。

    Arch 歸檔

    ----PGA 程序全局區(qū)

             每個(gè)服務(wù)器進(jìn)程都有一個(gè)PGA, 排序操作就是發(fā)生在PGA內(nèi)存中,由進(jìn)程自己使用。

    ----server process 數(shù)據(jù)庫(kù)進(jìn)程

     

     

    DATABASE 數(shù)據(jù)庫(kù):

    Control file控制文件: 包含很多重要的狀態(tài)信息,有多個(gè)相同的鏡像文件來保護(hù)這些信息,啟動(dòng)數(shù)據(jù)庫(kù)時(shí)要求幾個(gè)文件都在正常狀態(tài),寫入時(shí)向幾個(gè)文件都寫入。一般是兩三個(gè)文件,最好 分配在不同的磁盤上。

     

    Data file 數(shù)據(jù)文件:邏輯 上跟表空間對(duì)應(yīng)的,一個(gè)或多個(gè)數(shù)據(jù)文件構(gòu)成一個(gè)表空間。一般以dbf坐后綴。

    Log file

     

    Initial parameter file  spfileSID.ora

    Password file

     

    繼續(xù)走神。。。。。。。

    要明確的了解Oracle的體系結(jié)構(gòu)

    數(shù)據(jù)字典:字典表,動(dòng)態(tài)性能表

    區(qū)別:名字,存儲(chǔ),數(shù)據(jù)來源

    怎樣使用字典表

    DBA_xxx

    Oe_xxx

    用戶,方案對(duì)象,存儲(chǔ)結(jié)構(gòu)

    一般是只讀。當(dāng)我們執(zhí)行DDL時(shí),由數(shù)據(jù)庫(kù)自己去修改字典表。

     

    動(dòng)態(tài)性能表

    V$為前綴。 V$process , v$session, V$sga ….

    記錄數(shù)據(jù)庫(kù)當(dāng)前的活動(dòng)、狀態(tài)、標(biāo) 志等。由SYS用戶所有,不允許DML.

     

    系統(tǒng)關(guān)閉后,字典表會(huì)保留在磁 盤,動(dòng)態(tài)性能視圖不會(huì)保留。

    在優(yōu)化過程中,通過動(dòng)態(tài)視圖監(jiān)控 數(shù)據(jù)庫(kù)的話,那么要保證在監(jiān)控期間數(shù)據(jù)庫(kù)不間斷運(yùn)行,應(yīng)確定好采樣范圍是有代表性的。

     

     

     

     

    數(shù)據(jù)庫(kù)存儲(chǔ)

    Physical物理結(jié)構(gòu)

    1.   Data file, os block 組成。

     

    Logical 邏輯結(jié)構(gòu)

    Db block( oracle 的塊,是os block的整數(shù)倍, db_block_size 參 數(shù)決定, 例如16k, io 的最小單位)

    多個(gè)db block 構(gòu)成一個(gè)extend(擴(kuò)展,或者叫區(qū)).

    Extend 是空間分配的最小單位。
    多個(gè)extend 構(gòu)成一個(gè)段segment, 段對(duì)應(yīng)一個(gè)實(shí)際的對(duì)象,比如一個(gè)表,一個(gè)索引,但是視圖不是,視圖只是個(gè)定義,不會(huì)消耗磁盤空間。可能出現(xiàn)一張表是由多個(gè)段構(gòu)成的,比如分區(qū)表。

    段再構(gòu)成tablespace.

     

    Table, index 可能跨多 個(gè)db file進(jìn)行存儲(chǔ),修改table,index的內(nèi)容可能導(dǎo)致多個(gè)文件大小同時(shí)改變。

     

    物理文件和表空間對(duì)應(yīng)。

     

    系統(tǒng)表空間

    非系統(tǒng)表空間 見課 件

     

    空間管理方式:

    DMT dictionary 字典管理表空間, 表空間的區(qū)的分配是由字典管理的。

    LMT local 本地管理表空間, 區(qū)是由本地表空間來管理的。( 9+版本)

     

    建議在Oracle中,有自動(dòng)選項(xiàng)的,盡量勾選。

    不建議使用多個(gè)小文件來構(gòu)建一個(gè) 表空間,建議使用一個(gè)大文件來存儲(chǔ)。

     

     

    Oracle 自動(dòng)管理空間方式

    Dba_segments 段字典

    Dba_extends 區(qū)字典, 區(qū)的 大小是根據(jù)數(shù)據(jù)量調(diào)整的。

     

    Pctfree

    Pctused

    當(dāng)一個(gè)塊裝滿后,某條記錄數(shù)據(jù)增 多,會(huì)導(dǎo)致行遷移,系統(tǒng)在另一個(gè)塊中存儲(chǔ)該行,然后在原位置留一個(gè)指針指向那一行。之所以這么做,是因?yàn)楫?dāng)插入一個(gè)行時(shí),系統(tǒng)分配一個(gè)行標(biāo)識(shí)符,即物理地 址,而索引中是包含這個(gè)標(biāo)識(shí)符的,如果行遷移時(shí)修改行標(biāo)識(shí)符,則所有的索引都要改變,因此系統(tǒng)不修改行的位置,而是在那個(gè)位置添加指針。

     

    為了避免行遷移,一個(gè)塊不應(yīng)當(dāng)裝 的太滿,pctfree,pctused用于指定一個(gè)塊裝了多少的時(shí)候允許插入數(shù)據(jù)。

     

      本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評(píng)論

      發(fā)表

      請(qǐng)遵守用戶 評(píng)論公約

      類似文章 更多

      主站蜘蛛池模板: 中文字幕亚洲人妻系列| 国产精品中文第一字幕| 国产av无码专区亚洲av软件| 国产成人亚洲综合图区| 国产午夜成人无码免费看| 亚欧乱色熟女一区二区三区| 亚洲男女羞羞无遮挡久久丫| 精品无码久久久久国产| 最新国产精品亚洲| 日本成熟少妇激情视频免费看 | 亚洲男女羞羞无遮挡久久丫| 亚洲欧美日韩精品久久| 亚洲精品日本一区二区| 国产裸体XXXX视频在线播放| 二区中文字幕在线观看| 国内精品无码一区二区三区| 亚州中文字幕一区二区| 亚洲午夜性猛春交XXXX | 国产精品中文字幕视频| 国产成人久久精品流白浆| 国99久9在线 | 免费| 精品国产品香蕉在线| 久久人与动人物a级毛片 | 四虎成人精品无码| 国产成人精选视频在线观看不卡| 国产卡一卡二卡三无线乱码新区| 青青草国产线观看| 日韩国产精品无码一区二区三区| 亚洲欧美偷拍另类A∨| 亚洲人妻系列中文字幕| AV色欲无码人妻中文字幕| 韩国三级理论无码电影在线观看| 亚洲欧美牲交| 丁香色欲久久久久久综合网| 狠狠五月深爱婷婷网| 中文字幕少妇人妻精品| 欧美XXXX色视频在线观看| 伊人色综合久久天天小片| 性欧美VIDEOFREE高清大喷水 | 精品国产乱码久久久久APP下载| 亚洲AV旡码高清在线观看|