解決Oracle資料庫日誌檔案丟失恢復問題

THANK_DBA發表於2013-12-05
一.丟失inactive日誌檔案組的恢復:

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

  通過命令:

  alter database clear logfile group n

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

  alter database clear unarchived logfile group n

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

  丟失情況分兩種:

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

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

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

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

  在Oracle 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/29366942/viewspace-1062446/,如需轉載,請註明出處,否則將追究法律責任。

相關文章