inactive或active日志文件损坏
查看当前日志状态:current-当前正在写入的日志组,active-还未归档的日志组,inactive-已归档的日志组
SQL> select a.group#, a.member, b.status from v$logfile a, v$log b where a.group#=b.group# order by group#;
GROUP# MEMBER STATUS
---------- -------------------------------------------------- ------------
1 /u01/app/oracle/oradata/orcltest/redo01.log INACTIVE
2 /u01/app/oracle/oradata/orcltest/redo02.log CURRENT
3 /u01/app/oracle/oradata/orcltest/redo03.log INACTIVE
模拟故障:将inactive日志文件清空
echo ‘’ > /u01/app/oracle/oradata/orcltest/redo03.log
现象:当数据库切换到该日志组时,数据库并不知道磁盘上的日志文件有问题,只是将内容写到日志文件在内存的拷贝中,等到切换的时候,日志文件落盘就会发现该日志是有问题的,然后alert日志出现报错,不过不影响数据库正常运行,只是以后数据库切换日志会跳过该日志组
SQL> insert into scott.t01 select * from scott.t01; // 重复对一张表进行插入,模拟产生大量的日志
观察alert日志
Errors in file /u01/app/oracle/diag/rdbms/orcltest/orcltest/trace/orcltest_arc0_9006.trc:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/orcltest/redo03.log'
ORA-27048: skgfifi: file header information is invalid
Additional information: 12
Master archival failure: 313
SQL> alter system switch logfile;
查看v$log,可以看到group 3一直没有被用到
修复:将该日志文件重新初始化
SQL> alter database clear unarchived logfile group 3; // active的日志损坏也是类似处理,使用该命令后数据库归档会断,所以在恢复日志组后,应立即进行全库备份。