zoukankan      html  css  js  c++  java
  • Oracle日志详解

    Oracle日志详解

    一、Oracle日志分类

    分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程), redo log 重做日志(记录数据库的更改)。

    本文主要关注Oracle的重做日志。
    重做日志分为在线重做日志和归档重做日志。
      online Redo log files--在线重做日志,又称联机重做日志,指Oracle以SQL脚本的形式实时记录数据库的数据更新,换句话说,实时保存已执行的SQL脚本到在线日志文件中(按特定的格式)。
      Archive Redo log files--归档重做日志,简称归档日志,指当条件满足时,Oracle将在线重做日志以文件形式保存到硬盘(持久化)。

      重做日志的简单原理:在数据更新操作commit前,将更改的SQL脚本写入重做日志。主要用于数据库的增量备份和增量恢复。  

      重做日志直接对应于硬盘的重做日志文件(有在线和归档二种),重做日志文件以组(Group)的形式组织,一个重做日志组包含一个或者多个日志文件。


    二、关于在线重做日志(online redo log)

    在线重做日志的原理:
        
         对于在线重做日志,Oracle 11g默认对于每个数据库实例,建立3个在线日志组,每组一个日志文件,文件名称为REDO01.LOG,REDO02.LOG和REDO03.LOG。(用户可以通过视图操作添加/修改/删除日志组和日志文件来自定义在线重做日志)
         每组内的日志文件的内容完全相同,且保存在不同的位置,用于磁盘日志镜像,以做多次备份提高安全性。默认情况这3组通常只有一组处于活动状态,不断地同步写入已操作的脚本,当日志文件写满时(达到指定的空间配额),如果当前数据库处于归档模式,则将在线日志归档到硬盘,成为归档日志;若当前数据库处于非归档模式,则不进行归档操作,而当前在线日志的内容会被下一次重新写入覆盖而无法保存。因此,通常数据库在运行时,是处于归档模式下的,以保存数据更新的日志。
        当前归档日志组写满后,Oracle会切换到下一日志组,继续写入,就这样循环切换;当处于归档模式下,切换至原已写满的日志组,若该日志组归档完毕则覆盖写入,若没有则只能使用日志缓冲区,等待归档完毕之后才能覆盖写入。当然,处于非归档模式下是直接覆盖写入的。(关于数据库归档模式的设置,我会在另外的博文中讲到)。

        Oracle提供了2个视图用于维护在线重做日志:V$LOG 和  V$LOGFILE,我们可以通过这两个视图查看和修改在线日志。    

    关于V$LOG视图的详细属性字段可Oracle 11g的官方文档:http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2029.htm
    关于V$LOGFILE视图的详细属性字段可Oracle 11g的官方文档:
    http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2031.htm

    官方文档还是最给力的呀,不要忽视!!
            
    通过v$logfile视图查询在线日志文件信息:  
    SQL> SELECT * FROM v$logfile ORDER BY group#;   

    GROUP#   TATUS  TYPE     MEMBER                              IS_RECOVERY_DEST_FILE

    1               ONLINE    E:APPADMINISTRATORORADATAORCLREDO01.LOG     NO
    2               ONLINE    E:APPADMINISTRATORORADATAORCLREDO02.LOG     NO
    3               ONLINE    E:APPADMINISTRATORORADATAORCLREDO03.LOG     NO


    通过v$log视图查询在线日志的总体信息:
    SQL> SELECT * FROM v$log;

    GROUP#    THREAD#     SEQUENCE#    BYTES   MEMBERS     ARCHIVED  STATUS    FIRST_CHANGE#   FIRST_TIME               

    1     1   49    52428800      1    NO    CURRENT    1466615     07-1月 -11
    2     1   47    52428800      1    YES   INACTIVE   1434125     06-1月 -11
    3     1   48    52428800      1    YES   INACTIVE   1460403     07-1月 -11

    当然,还可以通过ALTER DATABASE ADD 、delete等命令增加/修改/删除在线日志或日志组,具体操作可查看http://blog.csdn.net/robinson_0612/archive/2010/07/20/5749556.aspx


    三、关于归档重做日志(Archive redo log)

        其实,所谓的归档,就是指将在线日志进行归档、持久化到成固定的文件到硬盘,便于以后的恢复和查询。
        当然,前提条件是数据库要处于归档模式。
        
    Oracle 11g 默认是为归档日志设定2个归档位置,这2个归档位置的的归档日志的内容完全一致,但文件名不同。

    蓦然回首,那人却在,灯火阑珊处。
  • 相关阅读:
    MVC3、如何应用EntityFramework 连接MySql 数据库 Kevin
    DEV EXPRESS Summary Footer 不显示 Kevin
    装饰模式 Kevin
    Dev 控件 GridControl 控件 二次绑定数据源的问题。 Kevin
    System.InvalidOperationException 异常 Kevin
    LINQ to XML Kevin
    代理模式——代码版“吊丝的故事” Kevin
    VS2012 中的设备 面板 Kevin
    maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程
    maven 学习笔记(一)eclipse+android+maven
  • 原文地址:https://www.cnblogs.com/linux-186/p/13814338.html
Copyright © 2011-2022 走看看