例項恢復的簡要解析

husthxd發表於2005-04-27

How oracle server determine about the changed blocks (dirty blocks) after a checkpoint event by

which the DBWR writes dirty buffers in data files and still user do not commit the transaction or rollback.


有點複雜,下面假定有這麼一個簡要的場景:

用一個update語句更新1000行,oracle會執行以下操作:

a.在SGA中生成更新過的datablocks

b.在SGA中生成回滾記錄

c.為SGA中的datablocks和回滾記錄均生成重做日誌資訊

在這個過程中,Oracle可能會把REDO資訊寫入到日誌檔案中。要記住:在checkpoint一個資料塊之前(也就是DBWR寫datablock前),

保護該block的日誌會先寫入到日誌檔案中。不可能存在資料塊已寫入磁碟但日誌還沒有寫入的情況。

假設在update的過程中資料庫伺服器當機,那麼可能會發生下列事件:

1.某些REDO資訊已經寫入到日誌檔案中,但資料塊和回滾塊沒有寫入到磁碟上。當系統重起後,會應用REDO日誌,

在SGA中重構回滾塊和資料塊。前滾完成後,Oracle會應用先前構造的回滾塊進行回滾,這樣看起來事務好像從來沒有發生過一樣。

2.某些日誌和某些資料塊以及回滾塊已經寫入到磁碟上。首先執行1的操作,接著前滾,應用日誌到還沒有進行檢查點的資料塊上,然後再回滾

3.沒有日誌寫入到磁碟上。當系統重起後,事務看起來就好像沒有發生過一樣,無需恢復

譯自

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

相關文章