Redo日志组的状态:
Current:目前正在写的日志组;
Active:目前不在写,但是还未进行ckpt,即cache中脏数据还未写入datafile,恢复时需要用到此日志组;
Inactive:目前不在写,已进行ckpt,实例恢复不需要此日志组。
由于每3秒进行的检查点并不是完全检查点,并不保证脏数据完全写入datafile,所以做实验可以看到,手工执行alter system switch logfile后,原来current的日志处于active状态,说明对应的脏数据没有写完成,要经过N多个三秒后,状态会变成inactive。
丢失后恢复方法:
查询v$log视图,查看日志状态,对于inactive的日志,直接alter database clear logfile即可,因为这种日志已经完成了datafile的写入,不需要恢复。而丢失active和current日志组,都是比较麻烦的,必然会有数据丢失,如果有备份还好,recover database unitl cancel或scn都可以。如果没有备份,则需要隐含参数(在initl<sid>.ora中加入如下参数_allow_resetlogs_corruption=TRUE)强制打开数据库,并导出文件,风险较大。
---End---