1. 程式人生 > >oracle redo log日誌(當前或非當前日誌)損壞之後的db恢復

oracle redo log日誌(當前或非當前日誌)損壞之後的db恢復

出錯情況:
sql> alter database open;
alter database open
*
第 1 行出現錯誤:
ora-01113: 檔案 1 需要介質恢復
ora-01110: 資料檔案 1: 'f:/oracle/oradata/orcl/system01.dbf'

試圖恢復資料檔案出錯:
sql> recover datafile 'f:/oracle/oradata/orcl/system01.dbf';
ora-00283: 恢復會話因錯誤而取消
ora-00322: 日誌 3 (用於執行緒 1) 不是最新副本
ora-00312: 聯機日誌 3 執行緒 1: 'f:/oracle/oradata/orcl/redo03.log'

聯機日誌分為當前聯機日誌(current)和非當前聯機日誌(inactive),非當前聯機日誌(inactive)的損壞是比較簡單的,一般通過clear命令就可以解決問題。
在資料庫mount或open狀態下查詢v$log,顯示log狀態。
sql> select group#,
  2         status,
  3         first_change#
  4  from   v$log;

    group# status           first_change#
---------- ---------------- -------------
         1 unused                 1324963
         3 current                1363585
         2 unused                 1343246
        
此時可以發現redo日誌3是current狀態,具體恢復步驟如下:

使用clear命令清理這個檔案所在的redo log group。
sql> alter database clear unarchived logfile group 3;
資料庫已更改。

sql>recover datafile 'f:/oracle/oradata/orcl/system01.dbf';
完成介質恢復。
sql> alter database open;
alter database open
*
第 1 行出現錯誤:
ora-01113: 檔案 2 需要介質恢復
ora-01110: 資料檔案 2: 'f:/oracle/oradata/orcl/sysaux01.dbf'

然後根據提示一步步恢復資料檔案即可。