Oracle日志文件中状态为INVALID(原因分析)
Oracle中向日志组中添加日志文件,查询结果显示状态为invalid;
alter database add logfile member '/u01/app/oracle/oradata/orcl/redo04a.log' to group 4;
alter database add logfile member '/u01/app/oracle/oradata/orcl/redo04b.log' to group 4;
1.查看当前使用的是哪个日志组 (正巧就是redo4组)
2.尝试切换日志 看看能否修复:alter system switch logfile;
3. 原因分析:
单个日志组中,各日志成员完全相同。在组内新建了一个成员时,在OS层面上查看物理文件,虽然文件大小都一样,但是新建的成员内必然是没有日志信息的,它并没有和其他成员同步。因此它的状态会被Oracle标记为INVALID。
根据Oracle的工作规则,如果处在Invalid状态的日志文件组不是Current日志组,那么在日志切换到该组的时候,内容都会被覆盖。
在恢复时的执行细节如下:
①当前日志为redo4,添加成员redo4a后显示invalid
②切换日志,CURRENT为redo1组,redo4a依旧是invalid
③切换日志,CURRENT为redo2组,redo4a依旧是invalid
④切换日志,CURRENT为redo3组,redo4a依旧是invalid
⑤切换日志,CURRENT为redo4组,redo4a恢复正常!
所以简单来讲,重新一轮切换到redo4组的时候,会将日志原有的内容覆盖刷新。当日志切换到一个新的日志组的时候,会将日志原有的内容覆盖刷新。这个过程中,伴随着各个成员保持一致。此时,Invalid状态的日志文件就会得到同步的机会。