oracle 19c rac主库配置data guard时,log_archive_dest_2必须使用sid='*'统一生效、tns名称需在所有节点tnsnames.ora中一致且显式启用log_archive_dest_state_2,否则导致归档失败或ora-16057等错误。
oracle 19c rac 主库配置 data guard 时,log_archive_dest_2(或更高编号)不能按节点单独指定 service 名称并带 sid='inst1' 这类限定——它必须对所有实例生效,且 service 名称需在所有节点上可解析。否则会触发日志传输失败、ora-16057: dgid not found 或归档挂起。
LOG_ARCHIVE_DEST_n 在 RAC 中必须用 sid='*' 而非具体实例名
RAC 多实例共享同一套归档目标参数,LOG_ARCHIVE_DEST_2 的 SERVICE 指向的是备库的 TNS 别名(如 ORCLST),不是主库某个实例。若错误写成 sid='orcl1':
- 仅 orcl1 实例加载该 dest,orcl2 不识别,导致部分归档无法发送
-
ALTER SYSTEM SET ... SCOPE=BOTH SID='orcl1'会报ORA-02097: parameter cannot be modified(因该参数不支持单实例 scope) - DG Broker 启动时校验失败,
SHOW CONFIGURATION显示ERROR
正确写法统一用 sid='*':
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=ORCLST LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCLST' SCOPE=BOTH SID='*';
为什么 RAC 主库的 LOG_ARCHIVE_DEST_1 也要设 VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
主库 RAC 中,每个实例都有自己的在线日志组(THREAD#),但归档路径必须覆盖全部线程。若 VALID_FOR 写成 (ONLINE_LOGFILES,PRIMARY_ROLE):
- 仅归档当前实例的在线日志,其他实例产生的归档可能被忽略
- 备库应用时发现日志序列断层(gap),
V$ARCHIVE_GAP查出缺失 - 尤其在实例故障切换后,新主实例的日志可能未被归档到
DEST_1
所以主库推荐统一设为:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=+FRA VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL' SCOPE=SPFILE SID='*';
RAC 主库中 LOG_ARCHIVE_DEST_STATE_n 必须显式启用
RAC 环境下,即使参数已设置,LOG_ARCHIVE_DEST_STATE_2 默认是 DEFER(尤其在使用 DBCA 创建的 RAC 数据库中)。不手动开启会导致:
- 日志不发送,
V$ARCHIVE_DEST_STATUS.STATUS显示INACTIVE -
SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;返回ERROR字段为空但实际无传输 - 误以为网络或 TNS 问题,浪费排查时间
务必执行:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH SID='*';
TNS 名称必须在所有 RAC 节点的 $ORACLE_HOME/network/admin/tnsnames.ora 中一致存在
RAC 每个节点独立运行 Oracle 进程,TNS 解析不走集群共享。若只在节点1配了 ORCLST,节点2尝试发日志时会报:
ORA-12154: TNS:could not resolve the connect identifier specified
检查方式(每节点都执行):
tnsping ORCLST
确保所有节点的 tnsnames.ora 包含完全相同的条目,且 HOST 指向备库监听地址(不是 VIP 或 SCAN):
ORCLST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.98.132)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))
注意:端口必须与备库 listener.ora 中实际监听端口一致(常见误配为 1521,而备库监听在 1522)。
最易被忽略的是 LOG_ARCHIVE_DEST_STATE_n 的默认状态和 TNS 文件的节点一致性——参数写了不等于生效,配置配了不等于所有实例能用。RAC + DG 的稳定性,往往卡在这两个“看不见”的环节上。











