ZT Oracle中,一個Delete操作的流程

asword發表於2009-02-01

好像是從TOM書上摘取的

[@more@]

Oracle中,一個Delete操作的流程

刪除(DELETE)

1.Oracle讀Block到Buffer Cache(如果該Block在Buffer中不存在)
2.在redo log buffer中記錄delete操作的細節
3.在相應回滾段段頭的事務表中建立一個undo條目
4.把將要刪除的記錄建立前映象,存放到Undo Block中
5.在Buffer Cache中的相應資料塊上刪除記錄,並且標記相應的資料塊為Dirty


提交(COMMIT)
1.Oracle產生一個SCN
2.在回滾段事務表中標記該事務狀態為commited
3.LGWR Flush Log Buffer到日誌檔案
3.如果此時資料塊仍然在Buffer Cache中,那麼SCN將被記錄到Block Header上,這被稱為快速提交(fast commit)
4.如果dirty block已經被寫回到磁碟,那麼下一個訪問這個block的程式將會自回滾段中獲取該事務的狀態,確認該事務被提交。然後這個程式獲得提交SCN並寫回到Block Header上。這被稱為延遲塊清除(delayed block cleanout)。

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

相關文章