LOG_ARCHIVE_DEST_2在RAC中配置不当是物理备库同步不均衡的常见根因,主因是VALID_FOR未匹配实际角色、SERVICE名解析失败、SYNC模式引发单点阻塞或密码文件缺失SYS权限,导致部分实例归档被拒收或静默丢弃。
log_archive_dest_2 在 rac 环境下配置不当,是导致物理备库同步不均衡的常见根因——不是网络或磁盘慢,而是归档日志从不同实例发往备库时路径、角色、传输模式不一致,造成部分归档被拒收、延迟或静默丢弃。
检查 LOG_ARCHIVE_DEST_2 的 VALID_FOR 是否匹配实际角色
备库同步卡在某个节点(比如只看到 instance 1 的归档在应用,instance 2 的 SEQUENCE# 长期停滞),大概率是 LOG_ARCHIVE_DEST_2 的 VALID_FOR 值没覆盖当前主库角色。RAC 中每个实例启动时角色可能不同(PRIMARY / PHYSICAL STANDBY),但归档目标必须明确声明“对谁生效”。
常见错误配置:VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE) —— 这会导致 instance 2 启动为 PHYSICAL STANDBY(如 ADG 模式下切换后)时,该实例完全不生成归档到备库。
正确做法是:在所有 RAC 实例上统一设为LOG_ARCHIVE_DEST_2='SERVICE=standby_db ASYNC VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby_db'
- 用
ALL_LOGFILES覆盖 online + standby redo log,避免 standby redo 日志无法归档 - 用
ALL_ROLES确保无论当前是 PRIMARY 还是 PHYSICAL STANDBY 角色,都启用该归档路径 - 执行后需
ALTER SYSTEM ARCHIVE LOG CURRENT触发一次归档,再查v$archive_dest_status确认STATUS变为VALID
确认 LOG_ARCHIVE_DEST_2 的 SERVICE 名称能否被所有实例解析
RAC 多实例共享同一套 tnsnames.ora,但若 SERVICE=standby_db 在某节点的 $ORACLE_HOME/network/admin/tnsnames.ora 中缺失或拼写错误,该实例的 ARCH/LGWR 就会静默失败——v$archive_dest_status 显示 ERROR,ERROR 列可能是 ORA-12154: TNS:could not resolve the connect identifier,但不会报错到 alert.log。
验证方式:
- 在每个 RAC 实例上分别执行:
tnsping standby_db,必须全部返回 OK - 切到对应实例环境:
export ORACLE_SID=orcl1→sqlplus / as sysdba→SELECT * FROM v$archive_dest WHERE dest_id = 2;,核对DESTINATION字段是否与 tnsnames 中定义一致 - 特别注意大小写和空格:Oracle 对 SERVICE 名区分大小写,
standby_db和STANDBY_DB是两个不同服务
避免 LOG_ARCHIVE_DEST_2 使用 SYNC 模式引发单点阻塞
在 RAC 主库中启用 SYNC 模式(如 LGWR SYNC)看似可靠,实则极易引发同步不均衡:一旦备库网络抖动或 RFS 进程短暂卡住,某个 RAC 实例的 LGWR 就会被阻塞在 log file sync 等待事件上,而其他实例不受影响,造成归档生成节奏分裂。
典型现象:v$system_event 中 log file sync 平均等待时间突增,且仅出现在 instance 1;v$managed_standby 中 instance 2 的 MRP0 正常 applying,instance 1 的 MRP0 却是 WAIT_FOR_GAP。
建议改为:LGWR ASYNC 或更稳妥的 ARCH 模式:
LOG_ARCHIVE_DEST_2='SERVICE=standby_db ASYNC VALID_FOR=(ALL_LOGFILES,ALL_ROLES) ...'- 异步模式下归档传输失败不会阻塞主库事务,配合 RMAN
SHIPPED TO ALL STANDBY删除策略,可兼顾可用性与数据完整性 - 若业务强要求零丢失,应搭配备用 redo log +
REOPEN=60参数缓解瞬时中断影响,而非死守 SYNC
检查密码文件是否对所有实例生效
RAC 中若仅在 instance 1 创建了密码文件,instance 2 缺失或权限不对,LGWR 尝试连接备库时会因认证失败静默退出——v$archive_dest_status 显示 DEFERRED,ERROR 列为 ORA-01017: invalid username/password 或更隐蔽的 ORA-16057: DGID not set for destination。
关键点:
- 密码文件必须在所有 RAC 节点的相同路径下存在(如
$ORACLE_HOME/dbs/orapw$ORACLE_SID),且属主为oracle:oinstall,权限640 - 确认
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE在所有实例的 spfile 中已设置 - 检查
v$pwfile_users,确保SYS用户的SYSDBA权限在所有实例上均为TRUE
最易被忽略的是:密码文件名必须带实例名(orapworcl1, orapworcl2),不能共用一个 orapwORCL —— Oracle 11g RAC 不支持跨实例共享密码文件名。











