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

一、Oracle基本原理

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

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

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

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

思考題:
1)修改語句(update, insert, delete),哪類語句產(chǎn)生的undo最多?哪類語句產(chǎn)生的redo最多?
參考答案:一般來講,因為undo記錄的是反向操作。
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邏輯體系
書中通過類比生活實例,王財主的農(nóng)場(database),出租給不同養(yǎng)殖戶(tablespace),每個養(yǎng)殖戶又各自養(yǎng)殖牛、羊、豬(segment)等。王財主心中以8平米為最小核算單元(block),誰的養(yǎng)殖空間不