当数据库处于ARCHIVELOG 模式时,当进行日志切换时,后台进程ARCH 会自动生成归档日志。从ORACLE DATABASE 10G 开始,默认情况下,归档日志会存放在恢复区所对应的目录(对应于初始化参数db_recovery_file_dest),并且会按照特定格式生成归档日志文件名。为了改变归档日志的位置和名称格式,必须改变相应的初始化参数。
1. 配置归档日志的名称格式
初始化数据log_archive_format 用于指定归档日志的文件名格式,当设置该初始化参数时,可以指定以下匹配符:
从ORACLE DATABASE 10G 开始,当配置归档日志的名称格式时,匹配符%s、%t 和 %r是必需的。因为初始化参数log_archive_format 是静态参数,所以在修改之后必须重新启动数据库。如果归档日志被存放在快速恢复区,那么归档日志文件名不会采用log_archive_format 文件名格式。
SQL> alter system set log_archive_format='%s_%t_%r.log' scope=spfile;
系统已更改。
SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 75498852 bytes
Database Buffers 88080384 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
2. 使用log_archive_dest_n 配置归档位置
初始化参数log_archive_dest_n 用于指定多个归档位置,其中n是1和10之间的整数。通过使用该参数,不仅可以配置本地归档位置,还可以配置远程归档位置。
如果既要在主节点(主数据库所在机器)上生成归档日志,又要将归档日志传递到备用节点(备用数据库所在机器),那么必须使用参数log_archive_dest_n 配置归档位置。
当使用 log_archive_dest_n 配置本地归档位置时,需要使用 LOCATION 选项指定本地目录;当配置远程归档位置时,需要使用 SERVICE 选项指定到备用数据库的网络服务名。
SQL> alter system set log_archive_dest_1='location=c:\demo\archive';
系统已更改。
SQL> alter system set log_archive_dest_2='location=d:\demo\archive';
系统已更改。
SQL> alter system set log_archive_dest_3='service=orcl';
系统已更改。
上面语句配置了两个本地归档位置(LOCATION 选项)和一个远程归档位置(SERVICE 选项)。当执行日志切换时,会在主节点上生成两份相同的归档日志(互为镜像),并且会传递一份归档日志到备用节点。
3. 使用 log_archive_dest_n 的其他常用选项
当使用初始化参数 log_archive_dest_n 配置归档位置时,可以在归档位置上指定OPTIONAL 或 MANDATORY 选项。当指定 MANDATORY 选项时,还可以设置 REOPEN 属性。
OPTIONAL:该选项是默认选项。当使用该选项时,无论归档是否成功,都可以覆盖重做日志。
MANDATORY:该选项用于强制归档。当使用该选项时,只有在归档成功之后,重做日志才能被覆盖。
REOPEN:该属性用于指定重新归档的时间间隔,默认值是300秒(REOPEN 属性必须跟在 MANDATORY 选项后)。
SQL> alter system set log_archive_dest_1='location=c:\demo\archive optional';
系统已更改。
SQL> alter system set log_archive_dest_2='location=d:\demo\archive mandatory reopen=400';
系统已更改。
4. 使用 log_archive_dest_state_n 控制归档位置
如果归档位置所对应的磁盘剩余空间不足或出现损坏,那么归档到该位置将出现失败。为了解决磁盘问题,可能需要临时禁用相应的归档位置。通过使用初始化参数 log_archive_dest_state_n (n=1,2......10),DBA 可以控制归档位置的可用性。其值可为:ENABLE(激活);DEFER(禁用)。
SQL> alter system set log_archive_dest_state_1=enable;
系统已更改。
SQL> alter system set log_archive_dest_state_2=enable;
系统已更改。
SQL> alter system set log_archive_dest_state_3=defer;
系统已更改。
5. 使用 log_archive_max_processes 控制归档进程
初始化参数 log_archive_max_processes 用于控制归档进程个数。当数据库为 ARCHIVELOG 模式时,默认情况下 ORACLE 会自己启动两个归档进程。
SQL> alter system set log_archive_max_processes=3;
系统已更改。
6. 使用 log_archive_min_succeed_dest 控制本地归档最小成功个数
SQL> alter system set log_archive_min_succeed_dest=2;
系统已更改。
当执行上面语句后,如果在本地生成的归档日志少于两份,那么重做日志将不能被覆盖。
7. 使用 log_archive_dest 配置归档位置
如果不使用备用数据库,那么只需要将归档日志存放在本地目录。配置本地一至两个归档位置可以使用初始化参数 log_archive_dest 和 log_archive_duplex_dest,其中第一个参数用于指定第一个归档位置,第二个参数用于指定第二个归档位置(log_archive_dest 和 log_arvhive_duplex_dest 是为了与早期兼容而保留的,并且它们不能与 log_archive_dest_n 同时使用)。
SQL> alter system set log_archive_dest='d:\demo\archive1';
alter system set log_archive_dest='d:\demo\archive1'
*
第 1 行出现错误:
ORA-02097: 无法修改参数, 因为指定的值无效
ORA-16018: 无法将 LOG_ARCHIVE_DEST 与 LOG_ARCHIVE_DEST_n 或
DB_RECOVERY_FILE_DEST 一起使用
SQL> alter system set log_archive_duplex_dest='d:\demo\archive2';
alter system set log_archive_duplex_dest='d:\demo\archive2'
*
第 1 行出现错误:
ORA-02097: 无法修改参数, 因为指定的值无效
ORA-16018: 无法将 LOG_ARCHIVE_DUPLEX_DEST 与 LOG_ARCHIVE_DEST_n 或
DB_RECOVERY_FILE_DEST 一起使用