oracle 關於例項恢復的一個討論

winston_DBA發表於2015-04-22
問題:在oracle中update一條記錄,長時間不提交,DBWn會不會將髒塊寫入資料檔案?LGWR會不會把redo log buffer中的記錄寫入online redo log? 如果二者都已寫入磁碟,使用者發出rollback命令,將會做哪些操作?如果此時資料庫例項crash,例項恢復時,將做哪些操作?

討論結論:
1.當使用者DML語句修改一條記錄,記錄所在髒塊是有可能被寫入資料檔案(提交時間越長,寫入資料檔案機率越大),因為DBWn的寫觸發條件為:每3秒自動喚醒一次;檢查點事件;一個伺服器程式在規定時間內沒有找到空閒塊;由上可知,DBWn是否寫入,和使用者是否提交沒有關係;
2.redo log buffer中的記錄,也是有可能寫入online redo log中,因為LGWR觸發條件為:每3秒自動喚醒一次;三分之一滿;大小達到1M;commit操作觸發;DBWn髒塊要寫入資料檔案中,但是保護該髒塊的redo還沒寫入磁碟,此時會觸發LGWR寫。由上可知,LGWR的寫在未commit的情況下,也可能會寫入redo檔案。
3.當二者都已寫盤,使用者發出rollback,則oracle會利用undo塊來進行恢復。(undo塊也有可能寫入磁碟,但是絕對不會被覆蓋!)
4.如果此時資料庫crash,則oracle會在例項恢復時,先應用redo,進行前滾。前滾完後會進行回滾,將未提交的事務(undo中有記錄)進行rollback。

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

相關文章