Oracle資料庫Redo故障的恢復

tolywang發表於2008-07-16
        由於inactive日誌檔案組表示已經完成了檢查點(dirty資料已經被寫入資料檔案)。資料庫本身不會發生資料庫丟失,如果在這個時候相應的redo丟失/損壞,可以透過clear重建日誌檔案組恢復。丟失active或current日誌檔案組的恢復分兩種:一個是正常關閉資料庫(如shutdown immediate),另一個是異常關閉資料庫(如shutdown abort)

  一.丟失inactive日誌檔案組的恢復:

  由於inactive日誌檔案組表示已經完成了檢查點(dirty資料已經被寫入資料檔案)。資料庫本身不會發生資料庫丟失,如果在這個時候相應的redo丟失/損壞,可以透過clear重建日誌檔案組恢復。

  透過命令:

  alter clear logfile group n

  如果資料庫模式是archived的,則需要強制清除

  alter database clear unarchived logfile group n

  二.丟失active或current日誌檔案組的恢復:

  丟失情況分兩種:

  一個是正常關閉資料庫(如shutdown immediate)

  另一個是異常關閉資料庫(如shutdown abort)

  1.在損失當前日誌時,資料庫是正常關閉狀態。

  由於shutdown immediate會執行全面的checkpoint,所以當前日誌在例項恢復時可以不需要redo

  在 8i中我們完全可以透過alter database clear logfile group n來進行恢復.

  但是在Oracle 9i中,則可能無法對current的redo日誌進行clear,需要透過recover database until cancel恢復後(必須要做的)

  用resetlogs選項開啟。

  比如:

  alter database clear logfile group n

  recover database until cancel;

  alter database open resetlogs;

  2.在損失當前日誌時,資料庫是異常關閉的:

  這種情況下,由於沒有在執行全面檢查點時,資料庫就已經關閉了,那麼Oracle在進行例項恢復的時候必須要求當前的日誌,否則Oracle資料庫將無法open.

  這樣的情況下,我們通常需要從備份中恢復資料檔案,透過應用歸檔日誌進行向前推演。直到最後一個完好的日誌檔案,然後可以透過resetlogs啟動資料庫完成恢復。那麼丟失的資料則是被損壞的日誌檔案中的資料。

  注意:_allow_resetlogs_corruption是Oracle中的一個隱含引數,如果系統實在不能resetlogs方式開啟的後只能出此下策,在pfile進行相應設定開啟資料庫。該函式的含義是,允許在破壞一致性的情況下強制重置日誌,開啟資料庫。_allow_resetlogs_corruption將使用所有資料檔案最舊的SCN開啟資料庫,所以通常來講需要保證SYSTEM表空間擁有最舊的SCN。在強制開啟資料庫之後,可能因為各種原因會有ora-600

 

 

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

相關文章