能配,但必须全局启用ARCHIVELOG和FORCE LOGGING、显式配置LOG_ARCHIVE_DEST_n的DB_UNIQUE_NAME与VALID_FOR、同步含SYSBACKUP权限的密码文件,并使用Data Guard Broker统一管理;否则易触发ORA-16789或ORA-16664等故障。

能配,但不能按单实例那一套来——RAC主库配Data Guard,本质是让所有节点协同对外输出一个逻辑主库身份,而不是分别连备库。错配LOG_ARCHIVE_DEST_n、漏开FORCE LOGGING、密码文件不同步,三者占了现场故障的80%以上。
必须全局启用 ARCHIVELOG 和 FORCE LOGGING
RAC里只在一个节点上执行ALTER DATABASE ARCHIVELOG或ALTER DATABASE FORCE LOGGING是无效的。其他节点仍可能产生非归档日志或跳过强制记录,导致备库收不到关键重做流。
- 先在任一节点执行:
SHUTDOWN IMMEDIATE→STARTUP MOUNT→ALTER DATABASE ARCHIVELOG→ALTER DATABASE OPEN - 再执行:
ALTER DATABASE FORCE LOGGING(该命令跨实例生效,但需等待所有实例完成一次日志切换) - 验证用:
SELECT LOG_MODE, FORCE_LOGGING FROM V$DATABASE,两列必须同时为ARCHIVELOG和YES - 注意:
V$DATABASE是全局视图,但GV$DATABASE会返回多行——别只查一个实例就认为全好了
LOG_ARCHIVE_DEST_n 必须显式绑定 DB_UNIQUE_NAME 且区分 VALID_FOR
RAC主库不能只配一个LOG_ARCHIVE_DEST_2指向备库。每个归档目标(本地归档、远端备库)都得单独配,且DB_UNIQUE_NAME和VALID_FOR必须严格匹配角色和日志类型,否则DG Broker拒绝启用传输,MRP进程起不来。
- 主库SPFILE中(用
SID='*'全局生效):LOG_ARCHIVE_CONFIG='DG_CONFIG=(rac_prod,orcldg)' LOG_ARCHIVE_DEST_1='LOCATION=+FRA VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=rac_prod' LOG_ARCHIVE_DEST_2='SERVICE=orcldg ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg'
-
SERVICE=orcldg必须与TNSNAMES.ORA中定义的服务名一致,且该服务要指向备库的SCAN或VIP,不能写单节点IP - 备库端也要配
LOG_ARCHIVE_DEST_2指回主库,否则Switchover后无法反向传输 - 漏配
VALID_FOR或写成(ALL_LOGFILES,PRIMARY_ROLE)是ORA-16789的高频原因
密码文件必须同步且含 SYSBACKUP 权限
RAC各节点的密码文件不一致,或没包含SYSBACKUP权限,会导致备库连接主库时认证失败,报ORA-01017或ORA-16664(无法联系主库)。
- 用
orapwd生成统一密码文件,并拷贝到所有RAC节点的$ORACLE_HOME/dbs下,覆盖原文件 - 确认包含
SYSBACKUP:登录任一节点执行SELECT * FROM V$PWFILE_USERS WHERE USERNAME = 'SYSBACKUP';,结果应为TRUE - 若用ASM存储密码文件,确保所有节点都能读取同一份文件(如放在+DATA/orapw
DB_UNIQUE_NAME)
RAC + Data Guard 必须用 Data Guard Broker
手动维护LOG_ARCHIVE_DEST_n、用SQL执行ALTER DATABASE COMMIT TO SWITCHOVER在RAC环境下必然失败。Broker通过DMON进程协调所有RAC实例的LGWR/ARCH,统一绑定归档路径并同步角色变更。
- 配置前必须验证4个硬性条件:
-
DB_UNIQUE_NAME在主备端显式设置且互不相同(不能是默认ORCL) - 主备库均启用
ENABLE PLUGGABLE DATABASE(12c+强制,即使没建PDB也得开) -
LOG_ARCHIVE_CONFIG包含双方DB_UNIQUE_NAME - 监听器静态注册
GLOBAL_DBNAME = <db_unique_name>_DGMGRL.<db_domain>,例如rac_prod_DGMGRL.example.com
-
-
DGMGRL里的CONNECT IDENTIFIER不是TNS别名,而是tnsnames.ora中定义的、指向目标实例的服务名,且该服务对应的监听器必须注册上述_DGMGRL全局名 - 常见错误:
ORA-12154表面是连接失败,实际是Broker启动数据库时找不到_DGMGRL服务名
真正容易被忽略的,是GLOBAL_DBNAME监听器注册和SYSBACKUP权限这两项——它们不报错、不阻断初始化,但会在Switchover或Failover关键时刻突然失效,且日志里只显示模糊的“无法联系主库”。


















