oracle重做日志组通常有四种状态,即unused,inactive,active,current。
1、unused:通常指从未被使用的日志组,即新添加的日志组。
2、current:状态为LGWR进程正把redo log buffer的日志写进日志组(redolog)中。
3、active:为刚刚完成日志切换后的状态,
--如果是非归档模式,此时该日志组中提交的事务引起的数据改变还没有完全从DB buffer cache写入到数据文件中,因此该日志组还不能被覆盖,并且待完全写入后变为inactive状态。
--如果数据库为归档模式,那么是在该状态下完成归档的。
active状态只是表明,目前log buffer的数据没有向当前这个组中写数据,并不能说明这组red log的数据已经完成了归档,也可能在执行归档过程[但是通过alter system switch logfile使文件变为了active,文件已经归档了。]。 活动的非当前日志,该日志可能已经完成归档也可能没有归档,活动的日志文件在Crash recovery(实例恢复)时会被用到。 ACITVE状态意味着检查点尚未完成,如果日志文件循环使用再次到达该文件,数据库将处于等待的停顿状态,此时在alert文件中,可以看到类似如下记录:Checkpoint not complete。 当这种问题出现时,可以从数据库内部通过v$session_wait来观察,该视图会显示数据库当前哪些session正处于这种等待。Checkpoint not complete在数据库中体现为等待事件log file switch(checkpoint incomplete): SQL> select sid,event,state from v$session_wait;---查询结果中event的值为:log file switch 在此同时,可能DBWR进程正在进行db file parallel write,日志文件必须等待DBWR完成检查点触发的写操作之后才能被覆盖。如果设置了参数log_checkpoints_to_alert为TRUE的话,还可以在alert文件中清晰地看到检查点的增进和完成情况。
4、inactive:状态的日志可以被覆盖,可以允许写入日志。如果是在归档模式下,那么此阶段证明归档已经完成。
文章评论