• 联机重做日志文件


    一、触发LGWR写日志的条件
    联机重做日志文件:
    日志写进程LGWR负责把日志缓冲区中的日志条目(Redo Records/Redo Enty)写入联机日志文件中,并赋予一个系统改变标识符SCN,一个条目用于描述一次对某个数据块的改变。

    1)当commit事务发生
    2)redo log buffer存储达到1/3
    3)当重做日志缓冲区有超过一个兆字节的更改记录
    4)在DBWN将buffer cache修改过的数据块的信息写入到数据文件之前
    5) 发生检查点切换

    触发CHECK POINT事件的情况:
    1)每次日志切换时。
    2)实例通过normal,transactional,immediate选项关闭时
    3)通过设置初始化参数FAST_START_MTTR_TARGET强制发生
    4) .数据库管理员手工设置ALTER SYSTEM CHECKPOINT、 ALTER TABLESPACE, DATAFILE OFFLINE时。
    5).使用alter tablespace[OFFLINE NORMAL|READ ONLY|BEGIN BACKUP] 语句导致指定数据文件发生检查点
    非归档模式只能做冷备份,归档模式可以做热备份并且可以做增量备份和部分恢复.

    二、联机重做日志状态

    日志文件组的状态一般有INACTIVE、ACTIVE、CURRENT、UNUSED、CLEARING、CLEARING_CURRNT等六种状态:

    SQL> SELECT STATUS FROM V$LOG;

    UNUSED : 表示该联机重做日志文件组对应的文件还从未被写入过数据,通常刚刚创建的联机重做日志文件组会显示成这一状态。当日志切换到这一组时,就会改变状态。

    CURRENT : 表示当前正在使用的日志文件组。该联机重做日志组是活动的。当前Oracle数据库正在使用的联机重做日志文件组。

    ACTIVE : 表示该组是活动的但不是当前组,实例恢复时需要这组日志。如果处于这一状态,表示虽然当前并未使用,不过该文件中内容尚未归档,或者文件中的数据没有全部写入数据文件,一旦需要实例恢复,必须借助该文件中保存的内容。

    INACTIVE: 表示实例恢复已不再需要这组联机重做日志组了。表示对应的联机重做日志文件中的内容已被妥善处理,该组联机重做日志当前处于空闲状态。

    CLEARING:表示该组重做日志文件正被重建(重建后该状态会变成UNUSED)。

    CLEARING_CURRENT:表示该组重做日志重建时出现错误。

    日志文件的状态有STALE,INVALID 、DELETED、空白 四种状态。可以通过下面语句查看

    SELECT STATUS FROM V$LOGFILE

    INVALID : 表示该文件是不可以被访问的。

    STALE : 表示该文件中的内容是不完全的。

    空白 : 表示该文件正在使用。

    DELETED : 表示该文件已不再有用了。

    ARCHIVED列值为YES表示已经归档,NO表示未归档。 SEQUENCE列值表示日志序列号,每进行一次日志切换就+1。

    三、重做日志文件相关的查询
    SELECT * FROM V$LOG;

    SELECT * FROM V$LOGFILE;

    SELECT * FROM V$ARCHIVED_LOG;

    SELECT * FROM V$RECOVER_FILE

    SELECT * FROM V$LOG_HISTORY;

    SELECT * FROM V$LOGHIST;

    --查看闪回日志使用状况
    SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;

    四、日志组的修改
    alter database add logfile group 4 ('/home/oracle/oradata/orcl/redo04_01.log', '/home/oracle/oradata/orcl/redo04_02.log') size 500M;
    ALTER DATABASE DROP LOGFILE GROUP 1;
    注意事项:
    1)执行删除日志组命令后,其实只是在数据字典中删掉了对于日志信息。你查看对应的日志文件,你会发现日志文件还在,只有手动删除日志文件,才能

    真正的删除日志文件。
    2)不能删除仅有的2个文件组;
    3)不能删除正在活动的文件组(即CURRENT、ACTIVE状态的日志文件);
    4)不能删除当前组的成员,当日志组只有一个成员时,不能删除日志组成员。
    5)不能删除还没有归档的文件组。
    SQL> alter system switch logfile; --日志切换
    SQL> alter database add logfile member '/home/oracle/oradata/orcl/redo1_02.log' to group 1; --增加日志组成员
    SQL> alter database drop logfile member  '/home/oracle/oradata/orcl/redo1_02.log'; --删除日志组成员
    不能删除日志组中唯一的日志文件,可以使用删除组的方法直接删除组;不能删除没有归档或者还在活动的日志;
    重命名日志组成员:
    alter database rename file '/home/oracle/oradata/orcl/redo01.log' to '/home/oracle/oradata/orcl/redo1_01.log';
    注意2点:
    不能移动正在使用的日志文件。
    确保执行命令前把目标文件已经移动到新目录下了。

    清空日志文件数据

    清空是说删除日志文件的内容。主要用于数据库无法进行有效恢复的时候。比如标识为current的日志文件组所有文件都坏了等。只有非active 和非

    current状态的组才能被清空

    ALTER DATABASE CLEAR LOGFILE 'XXXXXXXX.LOG';
    ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP NUMBER;

    《FROM:http://www.cnblogs.com/kerrycode/》

  • 相关阅读:
    去掉python的警告
    LeetCode--687. 最长同值路径
    Python中获取字典中最值对应的键
    python -- 解决If using all scalar values, you must pass an index问题
    keras自定义padding大小
    评价指标的局限性、ROC曲线、余弦距离、A/B测试、模型评估的方法、超参数调优、过拟合与欠拟合
    一言难尽的js变量提升
    vue-cli 脚手架 安装
    十分钟入门 Less
    Echarts的资源文件
  • 原文地址:https://www.cnblogs.com/rusking/p/4259875.html
Copyright © 2020-2023  润新知