Oracle归档日志启用与维护

归档开启情况判断

  • 通用方法:

    1
    SQL> SELECT log_mode from v$database;
  • sys用户:

    1
    SQL> archive log list;

如何开启日志归档

  1. 启用归档日志前要先停止数据库

    1
    SQL> shutdown immediate;
  2. 开启数据库至mount状态(打开控制文件,不打开数据文件)

    1
    SQL> startup mount;
  3. 改变日志模式

    • 启用数据库归档

      1
      SQL> alter database archivelog;
    • 关闭归档

      1
      SQL> alter database noarchivelog;
  4. 打开数据库(将数据文件打开)

    1
    SQL> alter database open;
  5. 验证当前日志模式

    1
    SQL> archive log list;

归档启动后的设置

  • 归档进程设置:

    • 查看

      1
      2
      3
      SQL> show parameter log_archive_max_processes;
      NAME TYPE VALUE
      log_archive_max_processes integer 4
    • 修改:

      1
      2
      SQL> alter system set log_archive_max_processes=5;
      System altered

归档占用情况判断

  • 查看闪回空间已经占用情况

    1
    2
    # 如果空间使用率99%以上,证明归档空间已经满了,需要清理。
    SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
  • 查看归档日志文件数量

    1
    SQL> select  * from v$recovery_file_dest;
  • 当出现ORA-00257: archiver error. Connect internal only, until freed错误连不上数据库时,如果数据库归档目标为USE_DB_RECOVERY_FILE_DEST且DB_RECOVERY_FILE_DEST目录为默认闪回空间目录时。

归档高占用处理方法

归档路径设置

单一归档路径

  • 如果使用db_recovery_file_dest参数设置单一的归档目录,默认使用Fast Recovery Area闪回恢复区存放归档数据。

    • 需要注意该区域有大小限制,建议将大小调大:

      1
      SQL> alter system set db_recovery_file_dest_size=8G scope=both;
    • 修改闪回恢复区路径:

      1
      SQL> alter system set db_recovery_file_dest='location=C:\app\Administrator\oracle_log' scope=both;
    • 查看闪回归档存储路径:

      1
      SQL> show parameter db_recovery_file_dest;
  • 也可手工配置log_archive_dest初始化参数,使用本地路径存放归档日志,这里给出的是本地文件系统例子,可自行测试ASM磁盘组。

    1
    2
    3
    4
    5
    # 需要将DB_RECOVERY_FILE_DEST和LOG_ARCHIVE_DEST_n参数置空参数置空
    SQL> alter system set db_recovery_file_dest='';
    SQL> alter system set log_archive_dest_1 ='';
    # 然后设置log_archive_dest参数
    SQL> alter system set log_archive_dest ="C:\log";

两路归档路径

配置log_archive_destlog_archive_duplex_dest参数。

1
2
3
4
# 设置log_archive_duplex_dest参数路径
SQL> alter system set log_archive_duplex_dest='C:\log';
# 切换日志触发写归档日志
SQL> alter system switch logfile;

查看新生成的归档日志文件,可以看到新生成的归档大小和文件名一致。两份归档日志互为冗余。

多路归档路径

使用log_archive_dest_n参数,其中,n的取值为1到31的整数,也就是说,可以指定1到31个独立的路径作为归档日志的路径。

log_archive_dest_n参数的取值可以选择LOCATIONSERVIDE关键字:

  • 如果使用LOCATION关键字,可以选择本地文件系统、ASM磁盘组或USE_DB_RECOVERY_FILE_DEST代表的闪回恢复区;(在使用Fast Recovery Area归档的情况下,LOG_ARCHIVE_DEST_1的默认值为USE_DB_RECOVERY_FILE_DEST。)
  • 如果使用SERVICE关键字,可以选择备库的网络连接标识符连接备份数据库。
  1. 需要将LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST参数置空:

    1
    2
    SQL> alter system set log_archive_duplex_dest='';
    SQL> alter system set log_archive_dest='';
  2. 修改多路归档日志路径:

    1
    2
    3
    SQL> alter system set log_archive_dest_1='location=C:\log\arch1' scope=spfile; 
    SQL> alter system set log_archive_dest_2='location=C:\log\arch2' scope=spfile;
    SQL> alter system set log_archive_dest_3='location=C:\log\arch3' scope=spfile;
  3. 查看归档文件目录:

    1
    SQL> show parameter LOG_ARCHIVE_DEST_;
  4. 再次查看:

    1
    2
    3
    4
    5
    6
    7
    SQL> archive log list;
    数据库日志模式 存档模式
    自动存档 启用
    存档终点 C:\orclBackUp\archive01
    最早的联机日志序列 18
    下一个存档日志序列 20
    当前日志序列 20
  5. 通过切换日志,查看归档路径下是否有归档日志产生来验证归档路径设置是否正确,切换日志命令如下

    1
    SQL> alter system switch logfile;
  6. 查看新生成的归档日志文件,显然新生成的归档大小和文件名一致。两份归档日志互为冗余。

归档路径参数区别

  • DB_RECOVERY_FILE_DEST:闪回恢复区路径
  • LOG_ARCHIVE_DEST:指定归档文件存放的路径,该路径只能是本地磁盘,默认为’’。
  • LOG_ARCHIVE_DEST_n:指定归档文件存放的路径,Oracle最多支持把日志文件归档到31个地方,n从1到31。归档地址可以为本地磁盘,或者网络设备。

三个参数区别如下:

  1. 如果设置了DB_RECOVERY_FILE_DEST,就不能设置LOG_ARCHIVE_DEST,默认的归档日志存放于DB_RECOVERY_FILE_DEST指定的闪回恢复区中

    可以设置LOG_ARCHIVE_DEST_n,如果这样,那么归档日志不再存放于DB_RECOVERY_FILE_DEST中,而是存放于LOG_ARCHIVE_DEST_n设置的目录中。

    如果想要归档日志继续存放在DB_RECOVERY_FILE_DEST中,可以通过如下命令:alter system set log_archive_dest_1=’location=USE_DB_RECOVERY_FILE_DEST’

  2. 如果设置了LOG_ARCHIVE_DEST,就不能设置LOG_ARCHIVE_DEST_n和DB_RECOVERY_FILE_DEST。

    如果设置了LOG_ARCHIVE_DEST_n,就不能设置LOG_ARCHIVE_DEST。

    也就是说,LOG_ARCHIVE_DEST参数和DB_RECOVERY_FILE_DEST、LOG_ARCHIVE_DEST_n都不共存。而DB_RECOVERY_FILE_DEST和LOG_ARCHIVE_DEST_n可以共存

  3. LOG_ARCHIVE_DEST只能与LOG_ARCHIVE_DUPLEX_DEST共存。这样可以设置两个归档路径。LOG_ARCHIVE_DEST设置一个主归档路径,LOG_ARCHIVE_DUPLEX_DEST设置一个从归档路径。所有归档路径必须是本地的。

  4. 如果LOG_ARCHIVE_DEST_n设置的路径不正确,那么Oracle会在设置的上一级目录归档。比如设置LOG_ARCHIVE_DEST_1=’location=C:\archive1’,而OS中并没有archive1这个目录,那么Oracle会在C盘归档。

归档日志清理

  1. cmd进入oracle的rman模式:

    1
    RMAN> rman target  /
  2. 显示所有的日志及日志地址

    1
    RMAN> list archivelog all;
  3. 可以把无效的expired的archivelog标出来

    1
    RMAN> crosscheck archivelog all;
  4. 删除所有的无效日志

    1
    RMAN> delete expired archivelog all;
  5. 使用删除语句进行删除:

    1
    2
    3
    # 其中sysdate-7代表保留近七天的归档日志。
    # 如需保留近十天的,则需将sysdate-7修改为sysdate-10即可。
    RMAN> delete archivelog until time 'sysdate-7';
  6. 显示所有的日志及日志地址

    1
    RMAN> list archivelog all;
  7. 查看归档日志文件

    1
    2
    3
    SQL> select name from v$archived_log;
    或:
    SQL> select substr(t.NAME,1) NAME,ROUND(sum(t.BLOCKS*t.BLOCK_SIZE)/1024/1024) TOTAL_MB from v$archived_log t where t.DELETED='NO' group by substr(t.NAME,1);

归档日志清理脚本

clear.bat

1
rman target / @"D:\PMSALEX\clear.txt"

clear.txt

1
delete archivelog until time 'sysdate-10';
0%