關於前滾(roll forward)和回滾(roll back)

tolywang發表於2009-03-31

1:roll forward  :   將已經寫入redo log file 中但是沒有寫入datafile中的提交與未提交的資料寫入資料檔案 。 屬於例項恢復,一般在資料庫開啟的時候進行(前滾時資料庫還沒有open )。   


2:rollback :          在資料庫開啟之後,oracle會查詢redo log file中記錄的commit maker ,根據undo block中的內容將它回滾到一致的狀態。

 

在一個事務發生的時候, Oracle會先將對應的redo 寫到log buffer, 再生成相應的undo, 將undo 的redo寫到redo log buffer,再對當前的資料塊做變更,redo log buffer在一定的條件下寫到redo log file,在使用者commit的時候, 系統會將當前log buffer中的所有的redo entry都寫到redo log file中, 不管是不是當前事務產生的redo, 同時會將當前commit的commit marker也寫到redo log file中.
對應與上面的情況, commit已經發出, 可能正在寫redo log, 當時commit marker還沒寫,這樣在做instance recovery的時候會將這些redo log先forward到buffer cache中, datablock 與undo block都forward到buffer cache中, 再檢查沒有commit的事務, 將這些事務rollback, 我們上面的第一個問題, 因為對應的commit marker沒有寫到redo log file中, 這樣對應的事務就是沒有commit的事務, 系統會根據undo block中的內容將其回滾到一個一致的狀態.

 

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

相關文章