oracle重做日志文件组v$log

时间:2022-04-13 08:10:08

v$log中status指的是重做日志文件组的状态,各状态含义:

CURRENT:当前的,正在被使用的日志文件,同一时刻只有一个日志文件会处于CURRENT状态,处于CURRENT的日志文件被LGWR进程实时的写入
ACTIVE:活动的,未被LGWR写,刚切换完成,尚未发生检查点,实例恢复时需要的重做日志文件为ACTIVE(处于ACTIVE的日志文件组无法删除)
INACTIVE:不活动的,实例恢复时不需要的重做日志文件为INACTIVE
UNUSED:还没有被写入的空白日志文件
CLEARING:正在被清除的日志文件,日志清除后状态变为UNUSED
CLEARING_CURRENT:正在被清除的CURRENT日志文件

SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- ----------- ------------ -----------
21 1 541787 536870912 512 1 YES INACTIVE 1025670969103 2016/9/18 1 102567098835 2016/9/18 1
22 1 541788 536870912 512 1 YES INACTIVE 1025670988354 2016/9/18 1 102567100793 2016/9/18 1
23 1 541783 536870912 512 1 YES INACTIVE 1025655942230 2016/9/18 1 102565596150 2016/9/18 1
24 1 541784 536870912 512 1 YES INACTIVE 1025655961500 2016/9/18 1 102565598107 2016/9/18 1
25 1 541786 536870912 512 1 YES INACTIVE 1025655999506 2016/9/18 1 102567096910 2016/9/18 1
26 1 541785 536870912 512 1 YES INACTIVE 1025655981078 2016/9/18 1 102565599950 2016/9/18 1
34 1 541789 536870912 512 1 YES INACTIVE 1025671007934 2016/9/18 1 102567102642 2016/9/18 1
35 1 541790 536870912 512 1 YES ACTIVE 1025671026423 2016/9/18 1 102567104561 2016/9/18 1
36 1 541791 536870912 512 1 YES ACTIVE 1025671045615 2016/9/18 1 102567105747 2016/9/18 1
37 1 541792 536870912 512 1 NO CURRENT 1025671057476 2016/9/18 1 281474976710
38 1 541781 536870912 512 1 YES INACTIVE 1025655905322 2016/9/18 1 102565592325 2016/9/18 1
39 1 541782 536870912 512 1 YES INACTIVE 1025655923257 2016/9/18 1 102565594223 2016/9/18 1

12 rows selected

SQL>

注意

  如果数据库处于ARCHIVELOG模式(归档模式),在没有被后台归档进程(ARCn)归档前,ACTIVE的日志文件不能被再次使用;如果数据库处于NOARCHIVELOG模式(非归档模式),当最后一个重做日志文件被写满后,LGWR会重新写入第一个ACTIVE日志文件
  可以使用alter database checkpoint命令手动的创建一个检查点,来使active的日志文件组变成inactive的日志文件组

active和inactive的区别

  这两种状态的重做日志都是已经归档的,不同的是,active状态的重做日志文件组是在实例恢复的时候被需要的,因为有一些事务虽然已经提交了,但是这些记录的更改还没有写到datafile中,如果这个时候实例down掉,在进行实例恢复的时候会需要这些active状态的日志文件组,每过一段时间,当系统负载不是很大的时候,Oracle会尝试将内存中的数据写入到datafile中,这个时候active的日志文件组就会变成inactive状态,我们可以使用alter database checkpoint强制来执行这个过程;而inactive是在实例恢复的时候不被需要的日志文件组。