oracle事務內部原理

eric0435發表於2012-10-09
事務內部原理:概述
一個事務是當插槽分配在事務表的回滾段頭上開始的,這是一個事務物理表現.事務識別符號指示了這
個位置.事務識別符號有以下的結構:
txid=usn.slot.wrap(回滾段編號.事務插槽ID.SCN wrap

在一個事務插入,更新或刪除一個表資料時,一個事務插槽會分配在包含這些行資料的資料塊中.
這個事務插槽被用來標記這些行被鎖定直到事務被提交或回滾.事務插槽包含事務識別符號.

當改變應用到資料塊時,重做資訊也會生成並儲存在回滾段中.事務表插槽包含一個指標指示事務
識別符號

事務內部原理:讀一致性
為了支援在第一個事務還沒有提交時要能讓不同會話能讀取相同資料塊

當讀取資料塊(可能資料塊在快取中)會話,首先會找到開啟的事務插槽.檢查事務狀態(透過讀取
回滾段頭)並找出它仍處於活動狀態.這意味著會話必須透過活動事務來對資料塊第一次被改變
之前的映象建立一個檢視(快照).這就叫作資料塊的一致性讀取副本,這個副本是透過先複製資料塊
的副本然後透過從回滾段中應用重做記錄來回滾上次發生的改變.
如果一致性讀取要求訪問資料塊,回滾段頭和重做記錄.如果它們任何一個有錯誤都會影響一致性讀取.


事務內部原理:鎖
為了支援在第一個事務還沒有提交時要能讓另外的會話改變(更新或刪除)被第一個事務所修改的行

新的會話當讀取資料塊(資料塊可能在快取中)將會找到開啟的事務插槽.它將檢查事務狀態(透過讀取
回滾段頭)找到它仍處於活動狀態.它會告訴會話程式在這種情況下不能繼續而要等待其它事務完成(
提交或回滾)

如果必須要讀取回滾段頭來構建事務插槽的狀態.如果回滾段頭出現錯誤那麼會影響事務鎖

事務內部原理:提交

為了支援現在來提交第一個事務,這個事件會立即被標記為非活動的事務表插槽.
然而直到後來,資料塊在事務提交時本身可能沒有被更新.這意味著在提交後資料塊中的事務插槽可能
仍然處於開啟狀態.

然而當資料庫下次再次讀該資料塊時,會檢查事務表,以前提交的事務會被確認,事務插槽會關閉.
這被稱為延遲塊清洗.如果回滾段已經被刪除了,那麼在undo$中的scn記錄用來確認提交的事務

資料庫讀取回滾段頭來執行延遲塊清洗.如果回滾段出現故障那麼會影響延遲塊清洗.

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

相關文章