联系:手机/微信(+86 17813235971) QQ(107644445)
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
遇到一个案例,数据库open报ORA-16038,ORA-00354等错误
查询该redo状态(使用Oracle数据库异常恢复检查脚本(Oracle Database Recovery Check)脚本收集),确认为inactive
由于inactive 状态的redo损坏,无法被arch进程归档导致数据库无法正常open,尝试强制clear联机日志
由于25号文件属于offline状态,导致联机日志无法正常被clear,报ORA-00393 ORA-00312等错误.通过试验重现该问题.
SQL> alter database datafile 5 offline; Database altered. --使用一些技巧让数据库无法归档 SQL> select group#,status,archived from v$log; GROUP# STATUS ARC ---------- ---------------- --- 1 INACTIVE NO 2 ACTIVE NO 3 CURRENT NO SQL> shutdown abort; ORACLE instance shut down. SQL> startup mount; ORACLE instance started. Total System Global Area 626327552 bytes Fixed Size 2255832 bytes Variable Size 234882088 bytes Database Buffers 385875968 bytes Redo Buffers 3313664 bytes Database mounted. SQL> alter database clear unarchived logfile group 1; alter database clear unarchived logfile group 1 * ERROR at line 1: ORA-00393: log 1 of thread 1 is needed for recovery of offline datafiles ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/orcl/redo01.log' ORA-01110: data file 5: '/u01/app/oracle/oradata/orcl/t_xifenfei01.dbf' SQL> !oerr ora 393 00393, 00000, "log %s of thread %s is needed for recovery of offline datafiles" // *Cause: Log cannot be cleared because the redo in it is needed to recover // offline datafiles. It has not been archived so there is no // other copy available. If the log is cleared the tablespaces // containing the files will have to be dropped. // *Action: Archive the log then repeat the clear command. If archiving is not // possible, and dropping the tablespaces is acceptible, then add the // clause UNRECOVERABLE DATAFILE at the end of the clear command. SQL> alter database clear unarchived logfile group 1 unrecoverable datafile; Database altered. SQL> select group#,status,archived from v$log; GROUP# STATUS ARC ---------- ---------------- --- 1 UNUSED YES 3 CURRENT NO 2 ACTIVE NO
客户的问题也是通过unrecoverable datafile 方式强制clear联机日志成功,数据库open成功