構造一致性CR塊讀,ORACLE需要做的工作:

wei-xh發表於2012-07-26
構造一致性讀,ORACLE需要做的工作:
1)克隆這個塊到另一個buffer,克隆的塊跟之前的current塊在一個HASH CHAIN上。我們後面的四個步驟,就是發生在新克隆的塊上的。
2)如果這個塊上存在 延遲塊清除或者快速塊清除,那麼對它進行塊清除的動作。
3)對於塊上所有未提交的事務進行塊級別的回滾,注意這裡並不是回滾整個事務,而是隻針對事務裡修改了這個塊的操作進行回滾。
4)檢查ITL槽位裡,COMMIT SCN有沒有大於查詢時刻SCN(snapshot SCN)的條目,如果有的話,對這個條目涉及到的事務進行塊級別的回滾(類似步驟3)。
5)如果回滾後,ITL槽位裡依然有大於查詢時刻SCN的條目,重複步驟四。
有幾點需要說明:
1)構造一致性讀發生在克隆塊上,不產生日誌。但是在步驟2上,雖然科隆塊不產生日誌,但是current block由於也需要做塊清除,所以會產生日誌。
2)步驟四可能會發生多次。如果查詢耗時較長,在讀取到某個塊前,N個事務已經對它做了修改提交,那麼這個塊就要發生N次步驟4的操作。
3)構造出來的一致性讀的塊一般由於TCH數很小很容易被LUR演算法拋棄重用。
4)一致性讀取回滾的只是這個塊,假如一個事務修改了1000個塊,產生了1000個undo record,但是隻有1個undo recored是這個塊產生的,那麼oracle能夠根據ITL槽位裡記錄的UBA快速的識別到這個undo record,而其他的999條,不會讀取。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-736976/,如需轉載,請註明出處,否則將追究法律責任。

相關文章