分享

oracle联机日志和归档日志

 cjavahtml 2018-03-26

      联机日志文件又叫重做日志文件,记录了对数据库修改的信息,包括用户对数据修改和数据库管理员对数据库结构的修改,一个oracle实例有一组或多组联机日志,每组至少包含1个或者多个日志成员,这里要多个日志成员的原因是防止日志文件组内某个日志文件损坏后及时提供备份,所以同一组的日志成员一般内容信息相同,但是存放位置不同。lgwr进程负责将数据写入日志文件,如果第一个日志文件被填满时,会切换到下一组日志文件,如果所有的日志文件都填满,并且日志操作模式为归档模式,lgwr进程开始等待归档进程将日志写入到归档日志中【归档日志是不同于联机日志的另一堆文件,归档日志文件可以看成是联机日志文件的累积】,然后覆盖当前日志文件再继续写入,如果日志操作模式为非归档模式,则直接覆盖日志文件。

      在Oracle数据库中,执行数据修改操作后,并不是马上写入数据文件,而是首先生成重做信息,并写入SGA中的一块叫LOG_BUFFER的固定区域,LOG_BUFFER有一定的触发条件,当满足触发条件后,会有相应进程将LOG_BUFFER中的内容写入数据块中。

      oracle联机日志作用:
      1、主要用来记录对数据库的改变,防止数据丢失。
      2、为了数据库操作快速反应。

      查看数据库归档模式:

      SQL> select name,log_mode from v$database;

      NAME      LOG_MODE

      --------- ------------

      ORCL      NOARCHIVELOG

      查询数据库联机日志文件组:

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

      GROUP#      BYTES ARCHIVED STATUS

      ---------- ---------- -------- ----------------

      1   52428800 NO       CURRENT

      2   52428800 NO       INACTIVE

      3   52428800 NO       INACTIVE

      4    5242880 NO       INACTIVE
      ARCHIVED 日志操作模式:NO表示为非归档模式,YES表示为归档模式 
      联机日志文件状态: 
      UNUSED : 表示该联机日志文件组对应的文件还从未被写入过数据,通常刚刚创建的联机重做日志文件组会显示成这一状态。当日志切换到这一组时,就会改变状态。 

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

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

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

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

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

      查看联机日志文件:

SQL> select * from v$logfile;
      GROUP# STATUS  TYPE    MEMBER                                                                           IS_RECOVERY_DEST_FILE
      ---------- ------- ------- -------------------------------------------------------------------------------- ---------------------
      3         ONLINE  /u01/oradata/orcl/redo03.log                                                     NO
      2         ONLINE  /u01/oradata/orcl/redo02.log                                                     NO
      1         ONLINE  /u01/oradata/orcl/redo01.log                                                     NO
      4         ONLINE  /u01/flash_recovery_area/ORCL/onlinelog/o1_mf_4_9bch1wfl_.log                    YES
      4         ONLINE  /oraclelog/redo04.log                                                            NO

      创建联机日志文件组:

      SQL> alter database add logfile group 4 size 5M;

      Database altered

      删除联机日志文件组:注意不能删除正在活动的文件组(即CURRENT、ACTIVE状态的日志文件)

      SQL> alter database drop logfile group 4; 

      Database altered

      为日志组添加日志文件:

      SQL> alter database add logfile member '/u01/oradata/orcl/redo04.log' to group 4;

      Database altered

      日志文件大小由日志文件组设定的

      日志切换:alter system switch logfile;
      日志切换就是停止写当前日志组,转而写另外一个新的日志组、系统可以自动切换,也可以手工切换。当发生SWITCH LOGIFLE时,系统会在后台完成CHECKPOINT的操作。CHECKPOINT是一个事件,它用于减少instant recovery的时间.当CHECKPOINT发生时,它会触发DBWR进程,把database buffer中变化了的数据写入数据文件,同时chkp进程更新control file和datafile header,以使它们保持一致。检查点其实是一个后台进程,用来保证所有修改过的数据库缓冲区的东西都写入数据库文件。它由参数LOG_CHECKPOINT_TIMEOUT和LOG_CHECKPOINT_INTERVAL来决定。检查点完成后,系统将更新数据库头和控制文件,也保证数据库的同步。这里主要体现在一个系统改变号上SCN(也叫检查点号)。它分别出现在v$log表的FIRST_CHANGE#列和V$DATAFILE的CHECKPOINT_CHANGE#列还有V$DATABASE的CHECKPOINT_CHANGE#上。 只要说明三个值相同,那么数据库就没有不同步的现象。否则就要进行介质恢复。这里可以通过日志切换改变新的检验点号。当然引起SCN改变的情况还有很多。

      控制日志文件切换时间间隔:

      SQL> show parameter archive_l;

      NAME                                 TYPE        VALUE

      ------------------------------------ ----------- ------------------------------

      archive_lag_target                   integer     0 表示不使用时间间隔,最大7200

      log_archive_local_first              boolean     TRUE

      修改联机日志文件存放目录

      1.关闭数据库:shutdown immediate

      2.移动联机日志文件到指定目录:mv /u01/oradata/orcl/redo04.log /oraclelog

      3.启动数据库:startup mount

      4.修改联机日志文件:

      SQL> alter database rename file '/u01/oradata/orcl/redo04.log' to '/oraclelog/redo04.log';

      Database altered.

      5.测试:

      SQL> select * from v$logfile;

      Warning: connection was lost and re-established

      GROUP# STATUS  TYPE    MEMBER                                                                           IS_RECOVERY_DEST_FILE

      ---------- ------- ------- -------------------------------------------------------------------------------- ---------------------

      3         ONLINE  /u01/oradata/orcl/redo03.log                                                     NO

      2         ONLINE  /u01/oradata/orcl/redo02.log                                                     NO

      1         ONLINE  /u01/oradata/orcl/redo01.log                                                     NO

      4         ONLINE  /u01/flash_recovery_area/ORCL/onlinelog/o1_mf_4_9bch1wfl_.log                    YES

      4         ONLINE  /oraclelog/redo04.log                                                            NO

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多