ORACLE归档模式

来源:互联网 发布:新加坡电信网络制式 编辑:程序博客网 时间:2024/06/10 12:34

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

在ORACLE10g和11g版本,ORACLE默认的日志归档路径为闪回恢复区($ORACLE_BASE/flash_recovery_area)。对于这个路径,ORACLE有一个限制,就是默认只有2G的空间,而且不只是归档日志的默认路径,也是备份文件和闪回日志的默认地址,这样的话归档日志锁使用的空间就达不到2G,在没有设置好这个路径大小的情况下,很多系统都遇到过归档日志满而无法归档导致数据库夯住的问题,可以使用下面的SQL语句去查看归档信息。

一、归档日志

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

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

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

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

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

    归档日志用途

        恢复数据库

        更新standby数据库

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

       

二、日志的两种模式

    1.非归档模式

        不适用与生产数据库

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

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

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

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

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

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

 

    2.归档模式

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

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

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

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

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

        备份与恢复

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

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

三、查看归档模式

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

          数据库日志模式            非存档模式

          自动存档             禁用

          存档终点            USE_DB_RECOVERY_FILE_DEST

          最早的联机日志序列     321

          当前日志序列           326。
          或者 SQL> SELECT log_mode FROM v$database; --查看数据库是否处于归档模式

          LOG_MODE

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

            NOARCHIVELOG    -------非归档   

 四、两种模式的切换设置

    1.非归档到归档模式

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

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

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

        d.切换到open阶段(alterdatabaseopen)

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

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

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

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

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

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

           数据库日志模式            存档模式

          自动存档             启用

          存档终点            USE_DB_RECOVERY_FILE_DEST

          最早的联机日志序列     321

          当前日志序列           326。

 2.归档模式切换到非归档模式(步骤同非归档到归档模式仅仅是c步骤使用alterdatabase noarchivelog)

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

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

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

        d.切换到open阶段(alterdatabaseopen)

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

 五、归档文件路径(闪回恢复区)设置

SQL> archive log list

数据库日志模式             非存档模式

自动存档             禁用

存档终点            USE_DB_RECOVERY_FILE_DEST

最早的联机日志序列     321

当前日志序列           326。

 上面的存档终点USE_DB_RECOVERY_FILE_DEST默认就是闪回恢复区($ORACLE_BASE/flash_recovery_area),可以通过下面的SQL查看闪回恢复区的信息。

SQL> show parameter db_recover

NAME                        TYPE         VALUE

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

db_recovery_file_dest       string      D:\oracle\flash_recovery_area

db_recovery_file_dest_size  big integer   2G

 

通过上面的SQL结果可以看到,闪回恢复区为D:\oracle\flash_recovery_area,大小为2G,也可以通过查询v$recovery_file_dest视图查看闪回恢复的限制信息。

 

SQL> select name,SPACE_LIMIT,SPACE_USED from v$recovery_file_dest;

NAME                           SPACE_LIMIT SPACE_USED

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

D:\oracle\flash_recovery_area   2147483648   21225472

默认情况下,归档日志会存放到闪回恢复区(D:\oracle\flash_recovery_area)内,如果闪回恢复区已经使用到2G,归档日志就有可能无法继续归档,数据库夯住,通常的解决方法是增大闪回恢复区,可以用以下SQL实现。

SQL> alter system set db_recovery_file_dest_size=3G;

系统已更改。

即使用这种方法解决的当前燃眉之急,虽然闪回恢复区ORACLE会自动管理,如果闪回恢复区空间不足就会清理掉没用的数据,但是如果备份策略不是很完善,数据库非常繁忙的情况下,还有可能遇到这种情况,通常需要修改归档日志的路径,将归档日志放到其他不受限制的路径下来解决这个问题,可通过下面的SQL来修改归档日志的存放路径。

SQL> alter system set log_archive_dest_1='location=D:\arch';

重启数据库

SQL> archive log list

数据库日志模式             非存档模式

自动存档             禁用

存档终点            D:\arch

最早的联机日志序列     321

当前日志序列           326。

 

七、手工归档

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

0 0
原创粉丝点击