是,dg_broker_start 参数必须为 TRUE 且 SCOPE 为 BOTH 或 SPFILE,RAC 环境需所有实例一致;同时需确保配置文件路径有效、权限正确、监听器静态注册且 GLOBAL_DBNAME 等于 DB_UNIQUE_NAME。
dg_broker_start 参数是否真为 TRUE
broker 启动失败最常见原因是 dg_broker_start 看似开启,实则未生效。dgmgrl 命令(如 show configuration)会直接报 ora-16525: the data guard broker is not yet available。
- 必须在 SQL*Plus 中执行
SHOW PARAMETER dg_broker_start,确认值为TRUE且SCOPE包含BOTH或SPFILE - 若改过参数但没重启数据库,或只设了
MEMORY,重启后就失效 —— 这类配置不会持久化 - RAC 环境下要检查所有实例,
SELECT INST_ID, VALUE FROM GV$PARAMETER WHERE NAME = 'dg_broker_start';
DG_BROKER_CONFIG_FILE1/2 路径是否可读写且存在
Broker 配置文件(.dat)损坏或权限不对,会导致 ORA-16786: unable to access Data Guard broker configuration files 或启动时静默失败。
- 查参数:
SHOW PARAMETER DG_BROKER_CONFIG_FILE1,确认路径真实存在、目录已创建(Broker 不会自动建父目录) - 文件属主必须是
oracle用户,不能是root或grid;权限建议644,目录755 - ASM 路径需特别注意:如
+DATA/dgbroker/dr1prim.dat,必须确保 ASM diskgroup 已挂载、且用户有 ASM 权限 - 磁盘空间不足或文件系统只读也会触发该错误,用
df -h和mount | grep $(dirname $ORACLE_HOME)快速验证
监听器与 TNS 名称是否双向通、服务名是否匹配 DB_UNIQUE_NAME
ORA-16571、ORA-12514 或 DGMGRL 报 connect identifier is xxx 失败,本质是 Broker 进程无法连上目标库,和 tnsping 能通无关。
- 主库的
tnsnames.ora中,connect identifier对应的条目,其SERVICE_NAME必须等于备库的DB_UNIQUE_NAME(不是INSTANCE_NAME或SERVICE_NAME) - 备库监听器必须静态注册:
listener.ora中要有(SID_DESC = (SID_NAME = orcl) (GLOBAL_DBNAME = standby_db)),且GLOBAL_DBNAME=DB_UNIQUE_NAME - 用
lsnrctl status在备库上确认该服务显示为READY,而非UNKNOWN - Broker 启动时会尝试连接所有配置中的数据库,任一库连不上都会卡住或报错 —— 即使你只打算操作主库
Broker 日志里有没有关键线索
Broker 进程(dmon)不输出到 alert.log,而是写进独立日志,ORA-16501、ORA-16706 这类泛型错误必须看它才能定位根因。
- 默认日志路径:
$ORACLE_HOME/rdbms/log/drc<db_unique_name>.trc</db_unique_name>和drn<db_unique_name>.log</db_unique_name> - 重点关注最近几行:是否有
Failed to open configuration file、Cannot connect to database、Configuration ID mismatch - 如果日志为空或写入失败,先检查目录权限和磁盘空间 —— Broker 会因日志不可写而静默降级
- 不要忽略
drn*.log,它记录 Broker worker 的启动/重试行为,比 trace 更易读
GLOBAL_DBNAME 匹配 —— 这个点不满足,哪怕其他全对,Broker 也永远连不上备库。











