轉自:http://database.51cto.com/art/201004/196771.htm

以下的文章主要介紹的是Oracle delete的執行過程,我們大家都知道Oracle delete與Commit的實際操作的相關流程的具體分析,以下就是對其實際的操作流程的介紹,望你在瀏覽之后會有所收獲。

(1)刪除(delete)流程

Oracle讀Block(數據塊)到Buffer Cache(緩沖區)(如果該Block在Buffer中不存在);

在Redo Log Buffer(重做日志緩沖區)中記錄Oracledelete操作的細節;

在相應回滾段段頭的事物表中創建一個Undo(回滾)條目;

把將要刪除的記錄創建前鏡像,存放到Undo Block(回滾塊)中;

在Buffer Cache中的相應數據塊上刪除記錄,并且標記相應的數據塊為Dirty(臟)。

(2)提交(Commit)流程

Oracle產生一個SCN;

在回滾段事物表中標記該事物狀態為Commited;

LGWR(日志讀寫進程)Flush Log Buffer到日志文件;

如果此時數據塊仍然在Buffer Cache中,那么SCN將被記錄到Block Header上,這被稱為快速提交;

如果Dirty Block已經被寫回到磁盤,那么下一個訪問這個Block的進程將會自回滾段中獲取該事物的狀態,確認該事物被提交。然后這個進程獲得提交SCN并寫回到Block Header上,這被稱為延遲塊清除。



what the hell is going on ??!!