zoukankan      html  css  js  c++  java
  • Oracle重做日志文件

    一.简介

        Oracle引入重做日志的目的:数据库的恢复。

        Oracle相关进程:重做日志写进程(LGWR)。

        重做日志性质:联机日志文件,oracle服务器运行时需要管理它们。

        相关数据字典:v$log ; v$logfile 。

        操作者权限:具有sys用户或system用户权限。

        重做日志文件

    日志文件的数据文件类型:在线日志文件(又叫联机日志)与归档日志文件(在线日志文件的历史备份)

    日志运行的模式:归档模式、非归档模式(是否自动归档)

    日志的运行流程:写文件是依靠LGWR后台进程

    日志按照有序循环的方式被使用,即当一组日志文件被填满后,循环覆盖下一组日志文件,不断循环。

    重做日志文件的目的:1. 记录数据的改变 2. 提供数据恢复 3. 维护数据库完整性。

    二.获取重做日志的信息

    1. 获得数据库中有多少个重做日志组,每个组中有多少个成员、日志大小及状态。

    SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED

    FROM V$LOG;

       结果如下图:

      

        状态列(status)所显示常用状态的含义:

    •       inactive:表示实例恢复已不再需要这组联机重做日志组了。
    •        active:表示该组是活动的但不是当前组,实例恢复时需要这组日志。
    •        current:表示该组日志是当前组,该联机重做日志组是活动的。
    •        unused:表示该日志组从未写过,是重做日志刚刚添加到状态。

    2. 获得数据库中每个重做日志组的成员所在目录、文件名及状态。

        SELECT GROUP#,STATUS,TYPE,MEMBER

    FROM V$LOGFILE;

        结果如下图:

        

    状态列(status)所显示常用状态的含义:

    •        空白:表示该文正在使用。
    •        stale:表示该文件中的内容是不完全的。
    •        invalid:表示该文件是不可以被访问的。
    •         deleted:表示该文件已不在有用了。

    三.日志切换

        联机重做日志文件是以一种循环的方式来使用,当一组联机重做日志文件被写满时,LGWR将开始写下一组日志文件,这被称为日志切换。可以在任何时候强制性的进行重做日志切换操作。

           强制重做日志切换命令:ALTER SYSTEM SWITCH LOGFILE;

           日志切换前,正在写的日志组是3:

          

           执行命令ALTER SYSTEM SWITCH LOGFILE 后,在写日志组变为1:

          


     

    四.添加和删除联机重做日志文件组

    1. 添加联机重做日志组

    创建新的重做日志组SQL命令格式:

           ALTER DATABASE [数据库名]

              ADD LOGFILE [GROUP 正整数] 文件名

           [, [GROUP 正整数] 文件名] ……]

           创建新的重做日志组例子:

           ALTER DATABASE ADD LOGFILE ('d:/logfile/redo 04a.log','e:/logfile/redo04b.log')

    SIZE 15M;

    注意:由于没有使用GROUP选项,所有oracle系统会自动地在最大的组号上加1来产生新的组号。

    显示结果如下,创建一组新的日志组,组号是4,有两个成员,成员大小为15M。

    SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED

    FROM V$LOG;

     

    下面的结果显示了新建日志的文件路径和文件名。

    SELECT GROUP#,STATUS,TYPE,MEMBER

    FROM V$LOGFILE;

    2. 删除联机重做日志组

           删除重做日志组SQL命令格式:

           ALTER DATABASE [数据库名]

              DROP LOGFILE {GROUP 正整数 | (‘文件名’[,   ‘文件名’]……)}

               [,{GROUP 正整数 | (‘文件名’[,   ‘文件名’]……)}]…….

           删除重做日志组例子:

           ALTER DATABASE DROP LOGFILE GROUP 4;

           显示结果如下,可以看出GROUP为4的日志组已经不存在。

       SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED

       FROM V$LOG;

            

      SELECT GROUP#,STATUS,TYPE,MEMBER

      FROM V$LOGFILE;

        

    注意:

    当前的重做日志组不能删除。如果要删除,先使用日志强制切换命令ALTER SYSTEM SWITCH LOGFILE 进行切换。当一组重做日志被删除后,它的操作系统文件依然存在,只能用操作系统命令删除,否则会留下一些无用的垃圾文件。

    五.添加和删除联机重做日志成员(文件)

    1. 添加联机重做日志成员

           创建新的重做日志成员(文件)SQL格式:

           ALTER DATABASE [数据库名]

                  ADD LOGFILE MEMBER

                  [ ‘文件名’ [REUSE] [, ’文件名’ [REUSE]]]……

                         TO {GROUP 正整数 | (‘文件名’[, ‘文件名’]……)}

           添加重做日志成员例子:

           ALTER DATABASE ADD LOGFILE MEMBER

           'd:/logfile/redo01b.log' TO GROUP 1,

        'd:/logfile/redo02b.log' TO GROUP 2,

           'e:/logfile/redo03b.log' TO GROUP 3;

           显示结果如下,可以看出每个日志组增加了一个日志成员,有原来的2个增加到3个。

       SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED

       FROM V$LOG;

          

         下面的结果,显示了新增日志文件的路径和文件名。

     SELECT GROUP#,STATUS,TYPE,MEMBER

     FROM V$LOGFILE;

      

    2. 删除联机重做日志成员

           删除联机重做日志成员(文件)SQL命令格式:

           ALTER DATABASE [数据库]

                  DROP LOGFILE MEMBER ‘文件名’ [, ‘文件名’] ……

           删除重做日志成员例子:

           ALTER DATABASE DROP LOGFILE MEMBER 'd:/logfile/redo02b.log';

           结果显示如下,可以看出删除了组2一个日志成员。

       SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED

       FROM V$LOG;

            

      SELECT GROUP#,STATUS,TYPE,MEMBER

      FROM V$LOGFILE;

       

    注意:

    当前的重做日志组不能删除,否则会报如下错误:

    如果要删除,应该先使用ALTER SYSTEM SWITCH LOGFILE命令进行切换。

    如果数据库运行在归档模式,而要删除的成员还没有被归档完,那也无法删除它。

    当一个重做日志成员被删除后,它的操作系统文件依然存在,只能用操作系统命令删除。

    转载 : http://blog.csdn.net/jlds123/article/details/6021822

  • 相关阅读:
    Mysql安装
    Python的内存管理机制
    Ansible模块
    Redis持久化
    Linux——ansible(1)
    Flask
    Flask入门
    ajax处理回调函数,用ajax向后台发送数据
    数字类型钱币转换为大写
    ligerui多选动态下拉框
  • 原文地址:https://www.cnblogs.com/future2012lg/p/3115299.html
Copyright © 2011-2022 走看看