Oracle 归档日志

系统 1612 0

--====================

-- Oracle 归档日志

--====================

 

    Oracle 可以将联机日志文件保存到多个不同的位置,将联机日志转换为归档日志的过程称之为归档。相应的日志被称为归档日志。

 

一、归档日志

    是联机重做日志组文件的一个副本

    包含 redo 记录以及一个唯一的 log sequence number

    对日志组中的一个日志文件进行归档,如果该组其中一个损坏,则另一个可用的日志将会被归档

    对于归档模式的日志切换,当日志归档完成后,下一个日志才能被覆盖或重新使用

    自动归档功能如开启,则后台进程 arcn 在日志切换时自动完成归档,否则需要手动归档

    归档日志用途

        恢复数据库

        更新 standby 数据库

        使用 LogMiner 提取历史日志的相关信息

       

二、日志的两种模式

    1. 非归档模式

        不适用与生产数据库

        创建数据库时,缺省的日志管理模式为非归档模式

        当日志切换,检查点产生后,联机重做日志文件即可被重新使用

        联机日志被覆盖后,介质恢复仅仅支持到最近的完整备份

        不支持联机备份表空间,一个表空间损坏将导致整个数据库不可用,需要删除掉损坏的表空间或从备份恢复

        对于操作系统级别的数据库备份需要将数据库一致性关闭

        应当备份所有的数据文件、控制文件 ( 单个 ) 、参数文件、密码文件、联机日志文件 ( 可选 )

 

    2. 归档模式

        能够对联机日志文件进行归档,生产数据库强烈建议归档

        在日志切换时,下一个即将被写入日志组必须归档完成之后,日志组才可以使用

        归档日志的 Log sequence number 信息会记录到控制文件之中

        必须有足够的磁盘空间用于存放归档日志

        Oracle 9i 需要设置参数 log_archive_start = true 才能够进行自动归档

        备份与恢复

            支持热备份,且当某个非系统表空间损坏,数据库仍然处于可用状态,且支持在线恢复

            使用归档日志能够实现联机或脱机时点恢复 ( 即可以恢复到指定的时间点、指定的归档日志或指定的 SCN )

 

三、两种模式的切换设置及手动归档

    1. 非归档到归档模式

        a . 一致性关闭数据库 ( shutdown [immediate | transactional |normal])

        b. 启动到 mount 阶段 (startup mount)

        c. 切换到归档模式 (alter database archivelog   [manual] )

        d . 切换到 open 阶段 ( alter database open )

        e . 对数据做一个完整备份 ( full backup )

        -- 演示非归档到归档模式

            SQL > ARCHIVE LOG LIST     -- 查看数据库是否处于归档模式

            Database log mode               No Archive Mode

            Automatic archival              Disabled

            Archive destination             USE_DB_RECOVERY_FILE_DEST

            Oldest online log sequence      14

            Current log sequence            16

            SQL > SELECT log_mode FROM v$database ;   -- 查看数据库是否处于归档模式

 

            LOG_MODE

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

            NOARCHIVELOG        

 

            SQL > SHUTDOWN IMMEDIATE ;      -- 一致性关闭数据库

            Database closed .

            Database dismounted .

            ORACLE instance shut down .

            SQL > STARTUP MOUNT ;          -- 启动到 mount 状态

            ORACLE instance started .

 

            Total System Global Area   251658240 bytes

            Fixed Size                   1218796 bytes

            Variable Size               75499284 bytes

            Database Buffers           171966464 bytes

            Redo Buffers                 2973696 bytes

            Database mounted .

            SQL > ALTER DATABASE ARCHIVELOG ;   -- 切换到自动归档模式

            Database altered .

            SQL > ALTER DATABASE OPEN ;         -- 切换到 open 状态

            Database altered .

            SQL > ARCHIVE LOG LIST ;            -- 查看数据库的归档状态

            Database log mode               Archive Mode     -- 已置为归档模式

            Automatic archival              Enabled          -- 对日志进行自动归档

            Archive destination             USE_DB_RECOVERY_FILE_DEST

            Oldest online log sequence      14

            Next log sequence to archive    16

            Current log sequence            16

            -- 备份数据库步骤省略

 

    2. 归档模式切换到非归档模式 ( 步骤同非归档到归档模式仅仅是 c 步骤使用 alter database noarchivelog ,演示省略 )

        a . 一致性关闭数据库 ( shutdown [immediate | transactional |normal] )

        b . 启动到 mount 阶段 ( startup mount )

        c . 切换到归档模式 ( alter database noarchivelog   )

        d . 切换到 open 阶段 ( alter database open )

        e . 对数据做一个完整备份 ( full backup )

       

    3. 手动归档

        手动归档时需要将日志模式切换为 alter database archivelog manual

        再使用 alter system archive log current | all 实现归档

        更多手动归档命令: ALTER SYSTEM archive_log_clause

        注意 :

            手动归档模式下不支持 stanby 数据库

            alter database archivelog 模式下也可以实现对日志的归档

           

            SQL > ALTER DATABASE ARCHIVELOG MANUAL ;      -- 将日志模式切换为手工归档模式

 

            Database altered .

 

            SQL > ALTER DATABASE OPEN ;                   -- 打开数据库

 

            Database altered .

 

            SQL > ALTER SYSTEM ARCHIVE LOG CURRENT ;      -- 对当前的日志进行归档 ( 建议在 mount 阶段完成 )

 

            System altered .

 

            SQL > ALTER SYSTEM ARCHIVE LOG ALL;          -- 对所有的日志进行归档

            alter system archive log all

            *

            ERROR at line 1 :

            ORA - 00271 : there are no logs that need archiving   -- 没有需要归档的日志

 

    4. 归档进程的调整

        通过设置 LOG_ARCHIVE_MAX_PROCESSES 参数,可以指定数据库规定所需初始化的进程数,缺省的归档进程数为 2

        一般情况下不需要修改该参数, Oracle 会根据归档情况自动启动额外的归档进程

        也可以动态的增加或减少归档进程数,比如有些业务在月底需要进行大量归档,平时则归档较少,对此可以动态修改

        修改方法

            ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES = 3 ;

   

    5. 配置归档 ( 两种归档位置配置方法 )

        a . 归档到本机且少于等于两个归档位置

            设置 LOG_ARCHIVE_DEST LOG_ARCHIVE_DUPLEX_DEST 参数

            alter system set log_archive_dest = '/u01/app/oracle/archivelog1' scope = spfile ;

            alter system set log_archive_duplex_dest = '/u01/app/oracle/archivelog2' scope = spfile ;

           

        b . 归档到本机或远程主机

            设置 LOG_ARCHIVE_DEST_n 参数 , n 最大值为 10

            alter system set log_archive_dest_1 = 'LOCATION=/u01/app/oracle/archivelog3' ;

            alter system set log_archive_dest_2 = 'SERVICE=standby1' ;

            对于远程归档位置 , SERVICE 选项需要指定远程数据库的网络服务名 ( tnsnames . ora 文件中配置 )

            LOG_ARCHIVE_DEST_n 的两个常用选项

                MANADATORY | OPTIONAL :

                    MANADATORY 表示归档必须成功复制到目的路径之后,联机重做日志才能被复用, OPTIONAL 正好相反

                REOPEN

                    指定归档失败后指定间隔多少时间重试归案,缺省的为 300

                示例:

                log_archive_dest_1 = 'LOCATION=/u01/app/oracle/archivelog3 manadatory reopen = 600'

                log_archive_dest_2 = 'SERVICE=standby1 manadatory reopen'

               

        c . 两种归档方法异同 ( 前者 log_archive_dest log_archive_duplex_dest ,后者 log_archive_dest_n )

            两者都可以归档到本机,后者可以归档到远程主机,前者不支持该功能

            前者最多配置两个归档位置,后者可以配置 10 个归档位置

            两者互不兼容,要么使用前者,要么使用后者

            使用后者归档到本地时需要增加 LOCATION 选项,备份到远程主机需要使用 SERVICE 选项

            但上述两种方式未指定路径时,归档日志位于 db_recovery_file_dest 缺省为 $ORACLE_BASE / flash_recovey_area

           

        d . 归档日志命名格式

            设置 LOG_ARCHIVE_FORMAT 参数, Unix 下的缺省设置为 LOG_ARCHIVE_FORMAT =% t_ % s_ % r . dbf

                % s : 日志序列号 :

                % S : 日志序列号 ( 带有前导 )

                % t : 重做线程编号 .

                % T : 重做线程编号 ( 带有前导 )

                % a : 活动 ID

                % d : 数据库 ID

                % r RESETLOGS ID .

            alter system set log_archive_format = 'arch_%t_%s_%r.arc' ;

           

        e . 归档位置状态

            Valid / Invalid       -- 磁盘位置及服务名等是否有效

            Enabled / Disabled    -- 磁盘位置的可用状态及数据库能否使用该归档位置

            Active / Inactive     -- 访问归档目的地是否有异常

           

        f . 归档成功的最小个数 ( 使用参数 log_archive_min_succeed_dest = n )

            alter system set log_archive_min_succeed_dest = 2 ;    -- 缺省为 1

            联机重做日志组能够被覆盖的前提

                所有强制路径归档位置成功实现归档

                归档目的地的成功归档的个数大于或等于上述参数设定的值

                当强制个数大于该参数设定的个数,则以强制个数为准

                当强制个数小于该参数设定的个数,则可选的成功归档路径加上强制的归档路径个数至少等于该参数设定值

       

        g . 控制归档的可用性 ( 使用参数 log_archive_dest_state_n )

            alter system set log_archive_dest_state_1 = enable | defer

            enable   --> 缺省状态,可以在该归档位置进行归档

            defer     --> 禁用该归档位置

           

        h . 演示归档路径配置及查看归档进程,归档位置状态

            SQL > ARCHIVE LOG LIST ;          -- 查看日志是否处于归档状态

            Database log mode               Archive Mode

            Automatic archival              Enabled

            Archive destination             USE_DB_RECOVERY_FILE_DEST

            Oldest online log sequence      24

            Next log sequence to archive    26

            Current log sequence            26

 

            SQL > ho ps - ef | grep ora_arc     -- 查看归档进程是否已启动

            oracle     4062      1   0 11 : 43 ?         00 : 00 : 00 ora_arc0_orcl

            oracle     4064      1   0 11 : 43 ?         00 : 00 : 00 ora_arc1_orcl

 

            SQL > SHOW PARAMETER ARCHIVE   -- 查看归档路径是否已设置,为空值表示未设置

 

            NAME                                  TYPE         VALUE

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

            archive_lag_target                    integer      0

            log_archive_config                    string

            log_archive_dest                      string

            log_archive_dest_1                    string

            log_archive_dest_10                   string

            log_archive_dest_2                    string

            log_archive_dest_3                    string

            log_archive_dest_4                    string

            log_archive_dest_5                    string

            log_archive_dest_6                    string

            log_archive_dest_7                    string

 

            NAME                                  TYPE         VALUE

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

            log_archive_dest_8                    string

            log_archive_dest_9                    string

            log_archive_dest_state_1              string       enable

            log_archive_dest_state_10             string       enable

            log_archive_dest_state_2              string       enable

            log_archive_dest_state_3              string        enable

            log_archive_dest_state_4              string       enable

            log_archive_dest_state_5              string       enable

            log_archive_dest_state_6              string       enable

            log_archive_dest_state_7              string       enable

            log_archive_dest_state_8              string       enable

 

            NAME                                  TYPE         VALUE

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

            log_archive_dest_state_9              string       enable

            log_archive_duplex_dest               string

            log_archive_format                    string       % t_ % s_ % r . dbf

            log_archive_local_first               boolean      TRUE

            log_archive_max_processes             integer      2

            log_archive_min_succeed_dest           integer      1

            log_archive_start                     boolean      FALSE -- 该参数在 9i 中使用

            log_archive_trace                     integer      0

            remote_archive_enable                 string       true

            standby_archive_dest                  string       ? / dbs / arch

 

 

            SQL > alter system set log_archive_dest = '/u01/app/oracle/archivelog1' scope = spfile ;

 

            System altered .

 

            SQL > alter system set log_archive_duplex_dest = '/u01/app/oracle/archivelog2' scope = spfile ;

 

            System altered .

 

            SQL > alter system set log_archive_format = 'arch_%t_%s_%r.arc' scope = spfile ;

 

            -- 设定完毕后需要重新启动实例,在此省略关闭启动信息

 

            SQL > ho ls / u01 / app / oracle / archivelog1   -- 查看归档路径下是否存在文件或文件夹

 

            SQL > ho ls / u01 / app / oracle / archivelog2   -- 查看归档路径下是否存在文件或文件夹

 

            SQL > alter system archive log current ;   -- 手动进行归档

 

            System altered .

 

            SQL > ho ls - l / u01 / app / oracle / archivelog1    -- 在指定的文件夹 archivelog1 已产生归档日志

            total 18224

            - rw ------- 1 oracle oinstall 18636800 Jul 28 20:39 arch_1_26_724852763.arc

 

            SQL > ho ls - l / u01 / app / oracle / archivelog2    -- 在指定的文件夹 archivelog2 已产生归档日志

            total 18224

            - rw ------- 1 oracle oinstall 18636800 Jul 28 20:39 arch_1_26_724852763.arc

 

            SQL > ho mkdir / u01 / app / oracle / archivelog3    -- 创建新的归档路径

 

            SQL > ho mkdir / u01 / app / oracle / archivelog4    -- 创建新的归档路径

 

            SQL > alter system set log_archive_dest_1 = 'location=/u01/app/oracle/archivelog3'

               2 scope = spfile ;

 

            System altered .

 

            SQL >   alter system set log_archive_dest_2 = 'location=/u01/app/oracle/archivelog4'

               2    scope = spfile ;

 

            System altered .

 

            SQL > shutdown immediate ;        -- 关闭实例

            Database closed .

            Database dismounted .

            ORACLE instance shut down .

            SQL > startup                    -- 启动实例后,收到错误提示表明两种归档方式不兼容

            ORA - 16019 : cannot use LOG_ARCHIVE_DEST_1 with LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST

 

            -- 关于上述设置导致的错误处理请参照:又一例 SPFILE 设置错误导致数据库无法启动

                                                 SPFILE 错误导致数据库无法启动

 

            -- 下面是正确的处理办法,应当先将一种归档方式路径置空,此处是将 log_archive_dest 置空

            SQL > alter system set log_archive_dest = '' scope = spfile ;

 

            System altered .

           

            -- 此处是将 log_archive_duplex_dest 置空

            SQL > alter system set log_archive_duplex_dest = '' scope = spfile ;

 

            System altered .

           

            -- 接下来再设定 log_archive_dest_1 log_archive_dest_2

            SQL > alter system set log_archive_dest_1 = 'location=/u01/app/oracle/archivelog3'

               2 scope = spfile ;

 

            System altered .

 

            SQL > alter system set log_archive_dest_2 = 'location=/u01/app/oracle/archivelog4'

               2   scope = spfile ;

 

            System altered .

           

            -- 由于没有配置 standby 服务器,所以省略配置到远程主机

            -- 设定完毕后需要重新启动实例,此时系统能正常启动,在此省略关闭启动信息

           

            SQL > alter system archive log current ;   -- 进行手动归档

 

            System altered .

 

            SQL > ho ls - l / u01 / app / oracle / archivelog3 /    -- 查看归档日志

            total 27752

            - rw ------- 1 oracle oinstall 28382208 Aug   2 13:46 arc_1_38_724852763.arc

 

            SQL > ho ls - l / u01 / app / oracle / archivelog4 /    -- 查看归档日志

            total 27752

            - rw ------- 1 oracle oinstall 28382208 Aug   2 13:45 arc_1_38_724852763.arc   

 

    SQL > col dest_name format a20 ;  

    SQL > col destination format a30 ;

    SQL > select dest_name , status , archiver , destination ,

      2   log_sequence , reopen_secs , transmit_mode , process

      3   from v$archive_dest ;     -- 查看归档目的地的相关状态信息

 

    DEST_NAME             STATUS     ARCHIVER    DESTINATION                     LOG_SEQUENCE REOPEN_SECS TRANSMIT_MOD PROCESS

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

    LOG_ARCHIVE_DEST_1    VALID      ARCH        / u01 / app / oracle / archivelog3 /              38          300 SYNCHRONOUS   ARCH

    LOG_ARCHIVE_DEST_2    VALID      ARCH        / u01 / app / oracle / archivelog4 /              38          300 SYNCHRONOUS   ARCH

    LOG_ARCHIVE_DEST_3    INACTIVE   ARCH                                                  0            0 SYNCHRONOUS   ARCH

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

             

        SQL > alter system set log_archive_dest_state_2 = defer ;    -- 停用 log_archive_dest_state_2

 

        System altered .

 

        SQL > show parameter log_archive_dest_state

 

        NAME                                  TYPE          VALUE

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

        log_archive_dest_state_1              string       enable

        log_archive_dest_state_10             string       enable

        log_archive_dest_state_2              string       DEFER      -- 该路径显示为 defer

        log_archive_dest_state_3              string       enable

        log_archive_dest_state_4              string       enable

        log_archive_dest_state_5              string       enable

        log_archive_dest_state_6              string       enable

        log_archive_dest_state_7              string       enable

        log_archive_dest_state_8              string       enable

        log_archive_dest_state_9              string       enable         

 

        SQL > alter system archive log current ;    -- 手动归档

 

        System altered .

 

        SQL > ho ls - l / u01 / app / oracle / archivelog3 ; -- 可以看出 archivelog3 archivelog4 多出几个归档文件

        total 124772                                -- 建议将多出文件件的使用系统命令复制到 archivelog4

        - rw ------- 1 oracle oinstall 28382208 Aug   2 13:46 arc_1_38_724852763.arc

        - rw ------- 1 oracle oinstall   1788416 Aug   2 20:41 arc_1_39_724852763.arc

        - rw ------- 1 oracle oinstall 30257664 Aug   2 22:21 arc_1_40_724852763.arc

        - rw ------- 1 oracle oinstall 30257664 Aug   2 22:22 arc_1_41_724852763.arc

        - rw ------- 1 oracle oinstall 30257664 Aug   2 22:22 arc_1_42_724852763.arc

        - rw ------- 1 oracle oinstall   6647296 Aug   2 22:23 arc_1_43_724852763.arc

 

        SQL > ho ls - l / u01 / app / oracle / archivelog4 ;

        total 29504

        - rw ------- 1 oracle oinstall 28382208 Aug   2 13:45 arc_1_38_724852763.arc

        - rw ------- 1 oracle oinstall   1788416 Aug   2 20:41 arc_1_39_724852763.arc

 

        SQL > alter system set log_archive_dest_state_2 = enable ; -- 启用 log_archive_dest_state_2

 

        System altered .

 

        SQL > alter system archive log current ;    -- 手动归档

 

        System altered .

 

        SQL > ho ls - l / u01 / app / oracle / archivelog3 ; -- 启用后出现了相同的 arc_1_44_724852763.arc 文件

        total 124856

        - rw ------- 1 oracle oinstall 28382208 Aug   2 13:46 arc_1_38_724852763.arc

        - rw ------- 1 oracle oinstall   1788416 Aug   2 20:41 arc_1_39_724852763.arc

        - rw ------- 1 oracle oinstall 30257664 Aug   2 22:21 arc_1_40_724852763.arc

        - rw ------- 1 oracle oinstall 30257664 Aug   2 22:22 arc_1_41_724852763.arc

        - rw ------- 1 oracle oinstall 30257664 Aug   2 22:22 arc_1_42_724852763.arc

        - rw ------- 1 oracle oinstall   6647296 Aug   2 22:23 arc_1_43_724852763.arc

        - rw ------- 1 oracle oinstall     81408 Aug   2 22:25 arc_1_44_724852763.arc

 

        SQL > ho ls - l / u01 / app / oracle / archivelog4 ;

        total 29588

        - rw ------- 1 oracle oinstall 28382208 Aug   2 13:45 arc_1_38_724852763.arc

        - rw ------- 1 oracle oinstall   1788416 Aug   2 20:41 arc_1_39_724852763.arc

        - rw ------- 1 oracle oinstall     81408 Aug   2 22:25 arc_1_44_724852763.arc

       

四、归档日志相关视图

    v$archived_log          --> 从控制文件中获得归档的相关信息

    v$archive_dest          --> 归档路径及状态

    v$log_history           --> 控制文件中日志的历史信息

    v$database               --> 查看数据库是否处于归档状态

    v$archive_processes     --> 归档相关的后台进程信息

    命令 : archive log list

   

        SQL > select   name , sequence# , registrar , standby_dest , archived , status

          2   from v$archived_log ;   

          NAME                                                      SEQUENCE# REGISTR STA ARC S

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

        / u01 / app / oracle / archivelog4 / arc_1_38_724852763 . arc               38 FGRD     NO   YES A

        / u01 / app / oracle / archivelog3 / arc_1_39_724852763 . arc                39 ARCH     NO   YES A

        / u01 / app / oracle / archivelog4 / arc_1_39_724852763 . arc               39 ARCH     NO   YES A

        / u01 / app / oracle / archivelog3 / arc_1_40_724852763 . arc               40 ARCH     NO   YES A

        / u01 / app / oracle / archivelog3 / arc_1_41_724852763 . arc                41 ARCH     NO   YES A

        / u01 / app / oracle / archivelog3 / arc_1_42_724852763 . arc               42 ARCH     NO   YES A

        / u01 / app / oracle / archivelog3 / arc_1_43_724852763 . arc               43 ARCH     NO   YES A

        / u01 / app / oracle / archivelog3 / arc_1_44_724852763 . arc               44 FGRD     NO   YES A

        / u01 / app / oracle / archivelog4 / arc_1_44_724852763 . arc               44 FGRD     NO   YES A

 

五、更多

 

SPFILE 错误导致数据库无法启动

 

又一例 spfile 设置错误导致数据库无法启动

 

Managing Archived Redo Logs

 

Oracle 实例和Oracle 数据库(Oracle 体系结构)

 

Oracle 用户、对象权限、系统权限

 

Oracle 角色、配置文件

 

  Oracle 联机重做日志文件(ONLINE LOG FILE)

 

  Oracle 控制文件(CONTROLFILE)

 

  Oracle 表空间与数据文件

Oracle 归档日志


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论