dgmgrl必须显式指定用户名、密码和db_unique_name连接主备库,否则默认连本地实例或认证失败;例如dgmgrl sys/oracle123@orcl,其中orcl为主库db_unique_name,不可用操作系统认证或省略连接标识。

dgmgrl 不是输个命令就自动连上主备库的工具,它默认连本地实例、不带认证、也不读 tnsnames.ora 里的别名——直接敲 dgmgrl 回车,90% 情况下连的是错库。
怎么用 dgmgrl 正确连接主库和备库
连不上,后续所有操作都无效。关键不是“会不会用”,而是“连到哪个库”。
- 必须显式指定用户名、密码、
db_unique_name,例如:dgmgrl sys/Oracle123@orcl(orcl是主库的db_unique_name,不是 service_name) - 不能只写
dgmgrl /,操作系统认证在非本地 Oracle 用户下大概率失败;也不能只写dgmgrl sys/Oracle123,这会尝试连本地默认实例(可能根本不是 DG 环境里的库) - 如果报
ORA-12154: TNS could not resolve the connect identifier,说明$ORACLE_HOME/network/admin/tnsnames.ora缺少对应db_unique_name的条目,或条目里SERVICE_NAME写成了实例名(SID) - 主库侧必须用
SYSDBA权限用户;备库同理,且db_unique_name必须和SHOW PARAMETER db_unique_name输出值完全一致
CREATE CONFIGURATION 前必须手动验证的三项参数
Broker 不校验底层配置是否生效,只比对参数值。CREATE 失败几乎全是这三项没对齐。
-
DB_UNIQUE_NAME:主备库各自查SHOW PARAMETER db_unique_name,值必须存在、不重复、且和 dgmgrl 连接时用的名称一致 -
LOG_ARCHIVE_CONFIG:必须显式包含双方,如'DG_CONFIG=(orcl,orcl_stdy)';漏一个就报ORA-16625: cannot reach database -
LOG_ARCHIVE_DEST_2(或更高编号):主库上该参数必须含service=xxx(指向备库 tns 别名)、db_unique_name=orcl_stdy(不是 service_name)、valid_for=(online_logfile,primary_role);漏掉DB_UNIQUE_NAME=是高频坑
ENABLE CONFIGURATION 卡住或报 ORA-16792 怎么办
启用不是原子操作,Broker 会逐项检查状态。卡住 ≠ 命令错,而是某项依赖未就绪。
- 先跑
VALIDATE DATABASE orcl和VALIDATE DATABASE orcl_stdy,看具体哪条报错;ORA-16792几乎总是伴随子错误,比如ORA-16810: multiple errors or warning - 最常见是备库没开归档:
ARCHIVE LOG LIST显示Archive Mode: Disabled—— Broker 强制要求主备都必须是归档模式,哪怕你启了实时应用(REAL-TIME APPLY) - 检查
SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE:主库必须是PRIMARY+READ WRITE,备库必须是PHYSICAL STANDBY+MOUNTED;如果是READ ONLY,得先SHUTDOWN IMMEDIATE再STARTUP MOUNT - 监听必须正常、时间必须同步(
ntpq -p或chronyc tracking),否则 VALIDATE 会静默失败
switchover 切换前最容易被忽略的检查点
切换本身命令简单,但失败往往发生在“以为准备好了”的环节。
-
SHOW DATABASE VERBOSE orcl和SHOW DATABASE VERBOSE orcl_stdy中,Intended State必须都是TRANSPORT-ON和APPLY-ON;如果备库是APPLY-OFF,得先EDIT DATABASE orcl_stdy SET STATE='APPLY-ON' - 主库上必须已配置备用重做日志(SRL),且数量 ≥ 主库在线日志组数;缺 SRL 会导致切换后新主库无法生成归档,
ALTER SYSTEM SWITCH LOGFILE报错 -
SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE DEST_ID=1和DEST_ID=2要基本一致;差太多说明传输延迟大,强行切换可能丢数据 - 切换命令
SWITCHOVER TO orcl_stdy必须在主库上执行;切完立刻SHOW CONFIGURATION确认角色已交换,别只信终端输出
Broker 配置里最麻烦的从来不是语法,而是每个参数背后都绑着一个独立运行的子系统(监听、归档、SRL、时间同步)。任何一个链路断开,dgmgrl 就只会甩出一串 ORA 错误码,不会告诉你“是监听没 reload 还是密码文件没复制”。











