数据库
首页 > 数据库> > 32.oracle重做日志(redo log)的几种状态

32.oracle重做日志(redo log)的几种状态

作者:互联网

1.前言

  oracle的重做日志主要记录的是我们对oracle数据进行增删该操作时记录,不过该记录一般是二进制文件,我们是不能用文本文件进行打开,也就是说我们对oracle数据库的DML和DDL操作都会记录该日志中,因为该日志是非常重要的。但是由于我们操作数据库动作是无限的,但是日志文件大小是有限的,因此,日志文件采用循环写(这一点也非常类似于mysql的redo log)的模式进行记录着oracle操作.

2.查看日志状态

SQL> select group#,status,archived from v$log;

    GROUP# STATUS                        ARCHIVED
---------- ------------------------------------------------ ---------
     1     INACTIVE                        YES
     2     CURRENT                         NO
     3     INACTIVE                        YES

  这里简单地介绍一下:group是日志组的(在oracle中通常是以日志组来区分重做日志,11g中默认的日志组是3个,19c中好像默认的日志组是5),日志组中对应的就是日志文件,每个日志组中可以用一个或者多个日志文件(成员),

  status:这里status主要有四种状态,即unused,inactive,active,current

      unused通常是指从未被使用的日志组,即新添加的日志组。

      current:为LGWR进程正把redo log buffer的日志写进日志组中。

          active:为刚刚完成日志切换后的状态,此时该日志组中提交的事务引起的数据改变还没有完全从DB buffer cache写入到数据文件中,因此该日志还不能被覆盖,并且待完全写入后变成为inactive状态,如果数据库为归档模式,那么是在该状态完成归档的。

      inactive:该状态的日志可以被覆盖,可以允许写入日志。如果是在归档模式下,那么此阶段证明归档已经完成。

SQL> alter system switch logfile;

System altered.

SQL> select group#,status,archived from v$log;

    GROUP#  STATUS                        ARCHIVED
---------- ------------------------------------------------ ---------
     1      INACTIVE                        YES
     2      ACTIVE                          YES
     3      CURRENT                         NO

SQL> 

    这里有个active状态,对应的archived已经归档了,这里可以理解一个中间状态,简单地说就是:1.该日志中的记录已经被归档了(可以说是被cp了)2.该阶段的relog_buffer中的记录完全被刷到了该日志文件中(落盘),但是呢

相较于inactive而言,就是对数据块的修改还没有写到磁盘中,因此该状态下该日志是不能被覆盖的

 

标签:状态,log,32,inactive,归档,oracle,日志
来源: https://www.cnblogs.com/zmc60/p/15865590.html