讀書筆記系列01-《收獲、不止Oracle》
最近計劃將看過的Oracle書籍依次系統(tǒng)的總結(jié)下讀書筆記。
這本書是我個人覺得寫的最有趣的Oracle書籍,也是我接觸Oracle后第一本完全精讀的Oracle中文書籍。全書主要講述了Oracle的基本原理(物理體系結(jié)構(gòu)、邏輯體系結(jié)構(gòu))、表設(shè)計、索引原理、多表連接等內(nèi)容。該書最大特點(diǎn)是利用詼諧的課堂氛圍以及將枯燥的技術(shù)與有趣多生活故事做類比,培養(yǎng)了讀者正確學(xué)習(xí)和應(yīng)用技術(shù)的意識,達(dá)成目標(biāo)的前提下,盡可能的少做事才能更高效。今后學(xué)習(xí)一門技術(shù),甚至是一個知識點(diǎn),都要思考為什么要學(xué)它,它是解決什么問題的。這些道理應(yīng)用廣泛,不止局限于學(xué)習(xí)Oracle技術(shù)。

一、Oracle基本原理

1.1 Oracle物理體系
書中通過類比生活實(shí)例,小余一家,爸爸開服裝店,媽媽在學(xué)校旁邊開餐飲店,引出Oracle物理體系,趣味性十足。

1區(qū):PGA、2區(qū):Instance(SGA+后臺進(jìn)程)、3區(qū):Database(各類文件)
Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

通過語句執(zhí)行過程體會Oracle體系結(jié)構(gòu):
查詢語句(select)執(zhí)行過程:在1區(qū)準(zhǔn)備,完成用戶連接信息的保存和權(quán)限保存,生成一個唯一的hash值,進(jìn)入2區(qū),首先是到共享池處理,此hash值沒有,則需要檢查語法語義權(quán)限解析生成執(zhí)行計劃,然后進(jìn)入數(shù)據(jù)緩沖區(qū)查詢,如果沒有,則數(shù)據(jù)緩沖區(qū)從數(shù)據(jù)文件中查到并帶回數(shù)據(jù)緩沖區(qū),最終呈現(xiàn)給用戶。
修改語句(update, insert, delete)執(zhí)行過程:查詢語句有的過程都有,在數(shù)據(jù)緩沖區(qū)找到要修改的塊,修改之前生成前鏡像(CR塊),修改后提交,LGWR進(jìn)程將log buffer條目寫入redo logfile,而至于DBWR進(jìn)程何時將修改數(shù)據(jù)寫入磁盤,是不確定的。

undo的作用:事物回滾、一致性讀(構(gòu)造CR塊)
redo的作用:對數(shù)據(jù)庫所有操作進(jìn)行記錄,日志寫優(yōu)先原則,數(shù)據(jù)庫快速提交,異常斷電也不會數(shù)據(jù)丟失。

思考題:
1)修改語句(update, insert, delete),哪類語句產(chǎn)生的undo最多?哪類語句產(chǎn)生的redo最多?
參考答案:一般來講,因?yàn)閡ndo記錄的是反向操作。
insert的反向操作是delete,undo只需要記錄delete行的rowid即可,所以insert產(chǎn)生的undo最少;
delete的反向操作是insert,undo需要記錄insert所有字段的值,所以delete產(chǎn)生的undo最多;
update介于二者之間。
注意:undo條目也是被redo記錄的。

2)ORA-01555原因和解決方案?
參考答案:原因是Oracle查詢要保證一致性讀,而當(dāng)查詢語句執(zhí)行時間較長,很可能后面要查詢塊的undo信息已經(jīng)被覆蓋,導(dǎo)致無法構(gòu)造一致性讀需要的cr塊。oracle會拋出ORA-01555錯誤。
解決方案:

a. 優(yōu)化該查詢SQL,縮短其執(zhí)行時間;

b. 增加undo_retention值,并且設(shè)置該undo表空間為guarantee(alter tablespace undotbs1 retention guarantee;)。

1.2 Oracle邏輯體系
書中通過類比生活實(shí)例,王財主的農(nóng)場(database),出租給不同養(yǎng)殖戶(tablespace),每個養(yǎng)殖戶又各自養(yǎng)殖牛、羊、豬(segment)等。王財主心中以8平米為最小核算單元(block),誰的養(yǎng)殖空間不夠向王財主申請空間(extent),不管空間多緊張,王財主特別有原則的留了3個農(nóng)場:系統(tǒng)農(nóng)場(系統(tǒng)表空間)、臨時農(nóng)場(臨時表空間)、回滾農(nóng)場(回滾表空間),給各個養(yǎng)殖戶提供方便。通過這一系列簡單易懂的小事情,引出Oracle邏輯體系,讓人形象的了解oracle 表空間、段、區(qū)、塊的概念。
可以建表插入數(shù)據(jù),然后通過dba_extents, dba_segments, dba_tablespaces體會邏輯結(jié)構(gòu)。

1.3 學(xué)習(xí)體系結(jié)構(gòu)的意義
這也是全書的點(diǎn)睛之筆,凡事學(xué)完都探討其意義。
如果只是單純講述體系結(jié)構(gòu),我之前學(xué)習(xí)的體系結(jié)構(gòu)筆記實(shí)際上內(nèi)容更加詳盡:

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

  • 1.3.1 本書強(qiáng)調(diào)的重點(diǎn):學(xué)習(xí)物理體系有什么意義?
    通過一系列問題,諸如數(shù)據(jù)庫內(nèi)存調(diào)整場景
    通過一則速度從單車到飛船的簡單優(yōu)化案例,進(jìn)一步體會了解物理體系結(jié)構(gòu)的意義。

--需要優(yōu)化的存儲過程:create or replace procedure proc1as begin
    for i in 1 .. 100000
    loop
        execute immediate 'insert into t values ('||i||')';        commit;    end loop;end;
/--執(zhí)行存儲過程drop table t purge;create table t(x int);alter system flush shared_pool;set timing on exec proc1;--查詢解析select sql_id, sql_text, parse_calls, executions from v$sql where sql_text like '%insert into t values%';

然后進(jìn)一步從綁定變量、靜態(tài)改寫、批量提交、集合寫法、直接路徑、并行設(shè)置一步步最終體驗(yàn)優(yōu)化到飛船速度。這里只將重要的優(yōu)化步驟總結(jié)下,具體可以參考原書內(nèi)容:

--優(yōu)化手段:使用綁定變量 + 批量提交create or replace procedure proc3as begin
    for i in 1 .. 100000
    loop
        execute immediate 'insert into t values (:n)' using i;    end loop;    commit;end;
/--優(yōu)化手段:集合寫法 + 直接路徑 + 并行設(shè)置 + nologgingcreate table t nologging parallel 16 as select rownum x from dual connect by level <= 1000000;

雖然是精心構(gòu)造的測試用例,但是實(shí)際優(yōu)化工作中實(shí)際上很多也是由上面的一個或多個技術(shù)手段來調(diào)整的。

  • 1.3.2 本書強(qiáng)調(diào)的重點(diǎn):學(xué)習(xí)邏輯體系有什么意義?
    學(xué)習(xí)了邏輯體系結(jié)構(gòu),可以清楚ORACLE的tablespace,segment,extent,block等概念。
    在對于已知要存放比較大的對象的表空間,提前合理規(guī)劃其大小,避免頻繁的自動擴(kuò)展影響性能;
    在對于頻繁更新的表,PCTFREE設(shè)置要考慮合理增大。對于更新極少甚至只讀的表,PCTFREE可以設(shè)置為0.
    確認(rèn)某表是否存在行遷移的方法:

@?/rdbms/admin/utlchain.sqlanalyze table t list chained rows into chained_rows;select count(*) from chained_rows where table_name = 'T';

查詢有記錄就證明存在行遷移。

二、Oracle表設(shè)計

三、Oracle索引原理

四、Oracle多表連接

AlfredZhao?版權(quán)所有「從Oracle起航,領(lǐng)略精彩的IT技術(shù)。」

http://www.cnblogs.com/jyzhao/p/6893476.html