oracle 11g rac启用data guard broker需满足四硬条件:角色一致性、服务名可达、密码文件同步(含sysbackup权限)、参数隔离;dg_broker_start须在所有rac节点显式启用,log_archive_dest_n的valid_for与db_unique_name须严格匹配,dgmgrl必须通过服务名连接。

Oracle 11g RAC 环境下启用 Data Guard Broker 不是“开个开关”就能用的事——它要求主库所有节点、备库(无论 RAC 或单实例)全部满足角色一致性、服务名可达性、密码文件同步和参数隔离这四个硬条件,缺一不可。Broker 启动后若报 ORA-16664 或 ORA-16789,90% 是因为某个节点没参与日志传输,或 SERVICE 名指向了单节点 VIP 而非 SCAN。
dg_broker_start 必须在所有 RAC 节点上显式启用
Broker 不会跨实例自动传播 dg_broker_start=TRUE。哪怕只在一个节点执行 ALTER SYSTEM SET dg_broker_start=TRUE,其他节点仍处于关闭状态,DGMGRL 连接时可能随机落到未启用的实例,导致配置失败或状态不一致。
- 逐个登录每个 RAC 节点,在 SQL*Plus 中执行:
ALTER SYSTEM SET dg_broker_start=TRUE SCOPE=BOTH; - 验证方式:在每个节点运行
SHOW PARAMETER dg_broker_start,输出必须为TRUE - 若使用 SPFILE,该参数修改会持久化;但若某节点临时用 PFILE 启动,Broker 将无法启动,且不会报错,只会静默失效
LOG_ARCHIVE_DEST_n 的 VALID_FOR 和 DB_UNIQUE_NAME 必须严格匹配角色
DG Broker 依赖 VALID_FOR 判断归档目的地是否适用于当前数据库角色(PRIMARY/STANDBY),也依赖 DB_UNIQUE_NAME 做拓扑校验。RAC 主库若只配一个 LOG_ARCHIVE_DEST_2,Broker 会拒绝启用重做传输,报 ORA-16789。
- 主库每个节点 SPFILE 中需包含类似配置:
LOG_ARCHIVE_DEST_2='SERVICE=rac_standby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=rac_standby' -
SERVICE=rac_standby必须与 TNSNAMES.ORA 中定义的服务名完全一致,且该服务必须指向备库 SCAN 或 VIP,不能写racdg1这类单节点地址 - 备库端同样要配
LOG_ARCHIVE_DEST_2指回主库,用于 Switchover 后反向传输,否则 Broker 执行SWITCHOVER TO会卡在“等待日志传输就绪”
密码文件必须同步且含 SYSBACKUP 权限
Broker 在执行 Switchover 或 Failover 时,会通过 SYSBACKUP 连接目标库执行内部命令(如 ALTER DATABASE COMMIT TO SWITCHOVER)。RAC 环境下若仅在节点1生成密码文件并拷贝到节点2,但未重新添加 SYSBACKUP,节点2将无法响应 Broker 指令,报 ORA-01031: insufficient privileges。
- 在任一节点用
ORAPWD重建密码文件时,必须加sysbackup=y参数:orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=xxx entries=10 sysbackup=y - 将新密码文件手动拷贝到所有 RAC 节点的
$ORACLE_HOME/dbs/目录,并确保权限为640、属主为oracle:oinstall - 重启所有实例(或至少执行
ALTER SYSTEM REGISTER),使密码文件变更生效
DGMGRL 连接必须用服务名,不能连实例名
Broker 配置对象(broker configuration)是以数据库为单位管理的,不是以实例为单位。用 CONNECT sys@orcl1(实例名)连接 DGMGRL,Broker 会认为你只管这个实例,后续 ENABLE CONFIGURATION 可能只拉起部分进程,甚至跳过备库校验。
- 主库连接应使用服务名:
CONNECT sys@orcl AS SYSDBA,其中orcl是DB_UNIQUE_NAME对应的服务名(TNSNAMES.ORA 中定义) - 备库连接同理:
CONNECT sys@orcldg AS SYSDBA,确保orcldg服务指向的是备库整体(SCAN 或监听器负载均衡地址) - 首次
CREATE CONFIGURATION前,务必先在两端用TNSPING测试服务名连通性:tnsping orcl和tnsping orcldg
最易被忽略的一点:Broker 启动后,V$DATAGUARD_CONFIG 视图中显示的数据库名是 DB_UNIQUE_NAME,不是实例名。如果主库两个节点的 DB_UNIQUE_NAME 不统一(比如节点1是 orcl,节点2误配成 orcl2),Broker 会把它们识别为两个独立数据库,直接导致配置崩溃。检查这件事,比反复调参数更关键。











