Oracle Redo日志的状态
CURRENT:指的是当前的日志文件,该日志文件是活动的,当前正在被使用的,在进行崩溃恢复时,Current的日志文件时必须的。
ACTIVE:活动的非当前日志,该日志可能已经完成归档也可能没有归档,活动的日志文件在Crash恢复时会被用到。
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文件中清晰地看到检查点的增进和完成情况。
引起Checkpoint Incomplete可能有以下多种原因:
日志文件过小,切换过于频繁;
日志组太少,不能满足正常业务量的需要;
日志文件所在磁盘I/O存在瓶颈,导致写出缓慢,阻塞数据库正常运行;
由于数据文件磁盘I/O瓶颈,DBWR写出过于缓慢;
由于事务量巨大,DBWR负载过高,不堪重负。
解决方法:
适当增加日志文件大小;
适当增加日志组数;
使用更快的磁盘存储日志文件(如采用更高转速磁盘;使用RAID10而不是RAID5等方式);
改善磁盘I/O的性能;
使用多个DBWR进程或使用异步I/O等。
注意:Checkpoint Incomplete是一类严重的等待,它意味着数据库不能再产生日志,所有数据库修改操作将全部挂起。
INACTIVE:非活动日志,该日志在实例恢复时不再需要,但是在介质恢复时可能会用到。INACTIVE状态的日志也可能没有被归档。如果数据库启动在归档模式,在未完成归档之前,日志文件也不允许被覆盖,这时候活动进程会处于log file switch(archiving needed)等待之中。日志是否完成归档,可以根据v$log视图的archived字段进行判断。
UNUSED:是指该日志从未被写入,这类日志可能是刚被添加到数据库或者在RESETLOGS之后被重置。被使用之后,该状态会被改变。