dgmgrl创建Data Guard Broker配置需满足四大前提:DG_BROKER_START=TRUE且重启实例、tnsnames.ora中定义带_DGMGRL后缀的专用服务名、create configuration命令显式指定connect identifier、备库处于MOUNT态并具备standby redo log。

dgmgrl 是创建 Oracle Data Guard Broker 配置的唯一命令行入口,但直接执行 create configuration 命令失败率极高——绝大多数问题不是语法错,而是前置条件没满足。
DG_BROKER_START 必须为 TRUE,且数据库已重启
这个参数控制 Broker 进程是否启动,它不支持动态修改。很多人改完就 ALTER SYSTEM SET DG_BROKER_START=TRUE,然后立刻进 dgmgrl,结果报错 ORA-16532: Data Guard broker is not enabled。
- 主库和备库都必须单独设置:
ALTER SYSTEM SET DG_BROKER_START=TRUE SCOPE=BOTH;
- 设置后必须重启实例(
SHUTDOWN IMMEDIATE+STARTUP),仅SCOPE=BOTH不够 - 检查是否生效:连接数据库后运行
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'dg_broker_start';,返回值必须是TRUE
tnsnames.ora 中的 service name 必须可连通且带 _DGMGRL 后缀
dgmgrl 连接时用的不是普通服务名,而是专用于 Broker 的监听服务。如果 sales-svc 在 tnsnames.ora 里只定义了常规连接描述符,dgmgrl 就会卡在连接阶段,或报 ORA-12154: TNS:could not resolve the connect identifier。
- 正确做法是在主库和备库的
$ORACLE_HOME/network/admin/tnsnames.ora中分别添加:sales-svc_DGMGRL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = phys-paris-1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = sales) (UR = A) ) ) - 注意:
(UR = A)表示允许连接到非 OPEN 状态的数据库(比如备库处于 MOUNT) - 测试连通性:用
tnsping sales-svc_DGMGRL和sqlplus sys@sales-svc_DGMGRL as sysdba双重验证
create configuration 命令中不能漏掉 connect identifier
常见错误是照抄文档写成:
create configuration mysales.com as primary database is sales;
这会报 ORA-16501: the Data Guard broker operation failed,因为 Broker 不知道该用哪个网络别名去连主库。
- 正确写法必须显式指定
connect identifier,且该值要和tnsnames.ora中定义的服务名完全一致(不含_DGMGRL后缀):create configuration mysales.com as primary database is sales connect identifier is sales-svc;
- 备库添加时同理:
add database salesdr as connect identifier is salesdr-svc maintained as physical; -
connect identifier不是数据库名,也不是DB_UNIQUE_NAME,它是你用来连接的那个 TNS 别名(即tnsnames.ora左侧的 key)
启用配置前,先确认 standby redo log 和归档路径已就绪
即使 show configuration 显示 DISABLED,也不代表配置逻辑正确。enable configuration 执行失败,90% 是因为备库缺 standby redo log 或主库归档目标不可写。
- 主库检查归档状态:
ARCHIVE LOG LIST,确保Archive Mode为Enabled,且Archive Destination可写 - 备库必须有至少一组 standby redo log,大小、组数应 ≥ 主库 online redo log;否则启用时报
ORA-16700: database is in a physically inconsistent state - 物理备库必须处于
MOUNT状态(不能OPEN),否则enable会拒绝
Broker 配置本身很薄,但它的稳定性极度依赖底层 Data Guard 基础设施的完备性。跳过验证步骤直接 enable,等于把问题留到故障切换时爆发。


















