丟失非活動日誌組的恢復

jane_pop發表於2014-08-22
報錯資訊:
SQL> startup
ORACLE instance started.

Total System Global Area  849530880 bytes
Fixed Size                  1339824 bytes
Variable Size             520097360 bytes
Database Buffers          322961408 bytes
Redo Buffers                5132288 bytes
Database mounted.
ORA-03113: end-of-file on communication channel
Process ID: 15444
Session ID: 1 Serial number: 5

檢視警報日誌檔案:
Additional information: 3
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_lgwr_15340.trc:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/orcl/redo01.log'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory

由錯誤知道資料庫因丟失日誌檔案redo01.log無法開啟,下面開啟資料庫到mount,查詢丟失日誌檔案的狀態:
SQL> startup mount;
ORACLE instance started.

Total System Global Area  849530880 bytes
Fixed Size                  1339824 bytes
Variable Size             520097360 bytes
Database Buffers          322961408 bytes
Redo Buffers                5132288 bytes
Database mounted.
SQL> select group#,members,status from v$log;


    GROUP#    MEMBERS STATUS
---------- ---------- ----------------
         1          1 INACTIVE
         3          1 CURRENT
         2          1 INACTIVE

丟失的日誌檔案redo01.log是屬於非活動日誌組,由於非活動日誌組已經完成了檢查點,也就是記錄在該日誌組的事務提交造成的資料塊的改變都
已經從database buffer cache寫入到data file中了,資料庫不會發生資料丟失,此時只需要用clear重建日誌組就可恢復:
SQL> alter database clear logfile group 1;

Database altered.

開啟資料庫:
SQL> alter database open;

Database altered.

SQL> select group#,members,status from v$log;


    GROUP#    MEMBERS STATUS
---------- ---------- ----------------
         1          1 UNUSED
         2          1 INACTIVE
         3          1 CURRENT

可以看到此時的日誌組1已經變成了unused狀態。


另外,如果資料庫處於archivelog mode ,且丟失的日誌組未完成歸檔,那麼使用如下命令強制清除:
alter database clear unarchived logfile group 1;

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

相關文章