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'
然後根據提示一步步恢復資料檔案即可。