配置LOG_ARCHIVE_DEST_n参数
在 ADG 环境中,LOG_ARCHIVE_DEST_n 参数(其中 n 是 1 到 31 之间的数字)用于定义重做日志的归档目的地。这些目的地可以是本地或远程的,远程目的地通常指向备库。
- 定义本地归档目的地:
为了在主库上保留归档日志的本地副本,可以设置:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/path_to_archives';
- 定义远程归档目的地:
为了将归档日志发送到备库,可以设置:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db_name ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_unique_name';
值 | 含义 |
---|---|
SERVICE | 指向备库的 TNS 服务名。例如:SERVICE=’standby_db’ |
ASYNC | 表示使用异步模式发送日志 |
VALID_FOR | 定义归档日志目的地的有效性。例如:VALID_FOR=(ONLINE_LOGFILES, PRIMARY_ROLE) |
DB_UNIQUE_NAME | 备库的唯一名称 |
- 设置归档日志的传输属性:
值 | 含义 |
---|---|
AFFIRM | 定义备库需要确认已经收到并写入重做日志 |
NOAFFIRM | 不等待备库确认 |
LGWR SYNC | 使用同步模式将重做日志从主库传输到备库 |
LGWR ASYNC | 使用异步模式将重做日志从主库传输到备库 |
- 其他常见设置:
值 | 含义 |
---|---|
REOPEN | 如果归档失败,定义重新尝试的时间间隔 |
DELAY | 指定在备库上应用归档日志之前的延迟时间(以分钟为单位)。例如:DELAY=60 |
ALTERNATE | 定义备用归档目的地,当主要目的地不可用时使用。例如:ALTERNATE=LOG_ARCHIVE_DEST_2 |
MAX_FAILURE | 指定在放弃归档日志目的地之前允许的连续失败次数 |
NET_TIMEOUT | 指定网络操作的超时时间(以秒为单位) |
例如:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db_name SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_unique_name';
- 设置归档日志的保留策略:
使用 LOG_ARCHIVE_DEST_STATE_n 参数来启用或禁用特定的归档目的地:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
- 清除或重置归档目的地:
如果需要清除或重置特定的归档目的地,可以使用:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='';
配置主库和备库的归档日志删除策略
- 主库的归档日志删除策略
在主库上,可以使用 LOG_ARCHIVE_DEST_n 参数的 DELETE 属性来配置归档日志的删除策略。
删除已传输的归档日志:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db_name VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_unique_name DELETE ALL ARCHIVELOG ALL SHIPPED TO standby_unique_name';
这将确保所有已经成功传输到指定备库的归档日志在主库上被删除。
- LOG_ARCHIVE_DELETION_POLICY
除了第一种方法外,还可以通过设置LOG_ARCHIVE_DELETION_POLICY参数,来控制归档日志的自动删除策略。以下是该参数的一些常用设置及其含义:
值 | 含义 |
---|---|
APPLIED | 当设置为 APPLIED 时,Oracle 会自动删除已经被备库应用的归档日志。这是在 Data Guard 环境中常用的设置,确保只有已经安全应用到备库的归档日志才会被删除 |
NONE | 当设置为 NONE 时,Oracle 不会自动删除任何归档日志。这意味着需要手动管理和删除归档日志 |
SPACE | 当设置为 SPACE 时,Oracle 会在磁盘空间不足时自动删除归档日志 |
SHIPPING | 当设置为 SHIPPING 时,Oracle 会删除已经成功传输到所有指定的备库的归档日志。这个和第一个不同的是,第一个包括了传输和应用 |
设置方法如下:
ALTER SYSTEM SET LOG_ARCHIVE_DELETION_POLICY = APPLIED;
- 备库的归档日志删除策略
在备库上,归档日志的删除通常是基于它们是否已经被应用。使用 RMAN 的配置来自动删除已经被应用的归档日志:
rman> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
- 验证归档日志删除策略是否生效
在备用库上执行下面的SQL,可以在备库上查看归档日志文件的状态。这是一个用来验证归档日志的删除策略是否已经生效的方法。
SELECT APPLIED, ARCHIVED, DELETED FROM V$ARCHIVED_LOG;
列名 | 含义 |
---|---|
APPLIED | 这一列表示归档日志是否已经在备库上被应用。如果值为 YES,则表示该归档日志已经被应用 |
ARCHIVED | 这一列表示归档日志是否已经被归档。在备库上,这通常应该是 NO,因为备库通常不会自己生成归档日志。它只是从主库接收并应用归档日志 |
DELETED | 这一列表示归档日志是否已经被删除。如果值为 YES,则表示该归档日志已经被删除 |
- 注意事项
- 在配置归档日志的删除策略之前,确保有最近的备份,以防万一。
- 在主库上,确保不要过早地删除归档日志,因为备库可能仍然需要它们。
- 在备库上,确保归档日志已经被应用并且不再需要之后再删除它们。
- 定期检查归档日志的目的地,确保它们没有填满磁盘空间。
- 在生产环境中应用这些设置之前,建议先在测试环境中验证它们。