• 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而言,就是对数据块的修改还没有写到磁盘中,因此该状态下该日志是不能被覆盖的

  • 相关阅读:
    sklearn之线性回归
    机器学习概述
    scipy之定积分计算和简单图像处理
    scipy之插值器
    numpy之排序
    spring mvc 实现文件上传
    Maven安装本地jar包到本地仓库
    spring mvc实现转发和重定向
    sprign mvc 解决中文乱码问题
    spring mvc 中使用session
  • 原文地址:https://www.cnblogs.com/zmc60/p/15865590.html
Copyright © 2020-2023  润新知