ORA-16810是Broker汇总告警,非真实故障;须先validate database触发实时状态协商,定位根因(如dmon未启、监听缺_DGMGRL服务等),再分清改Broker元数据或数据库实际参数,否则易引发ORA-16603或配置恶化。
ora-16810 不是故障本身,而是 broker 发现底层至少一个真实问题后汇总打出的“总告警”——直接 edit database 修属性,90% 是白忙活,甚至让配置更糟。
先跑 validate database,别急着看 verbose
validate database 会强制 Broker 与数据库做一次全量状态协商,不是读缓存,而是实时拉取真实参数、进程状态和连接能力。很多“不一致”其实是 dmon 连不上、监听没注册或实例没 open 导致的假阳性。
- 成功返回
Success:问题自动修复,不用再查 - 失败报错(如
ORA-16620、ORA-16625):错误信息直指根因,比如tnsping不通StaticConnectIdentifier指定的服务名,或ps -ef | grep dmon找不到进程 - 必须在
dgmgrl已连接到配置中某个库(主或备)的前提下执行,不能空连本地 - 多个备库要逐个
validate database 'SBDB',Broker 不批量扫
show database verbose SBDB 看具体哪几项不一致
只有 validate 失败或仍显示 Warning 时,才切到这里。重点盯三类字段:
-
InconsistentProperties:比如值为(monitor),说明 Broker 想用 Observer 监控但根本没启或连不上 -
InconsistentLogXptProps:常见于LogXptMode、NetTimeout—— 很多是主备库 spfile 里没显式设这些参数,Broker 读到默认值,但元数据存了你之前 edit 过的值 - 带
(monitor)的LogXptStatus、RecvQEntries:Broker 拉不到指标,通常因为数据库没OPEN/MOUNT、dmon挂了、或监听缺_DGMGRL服务
修法必须分清“改 Broker”还是“改数据库”
Broker 属性只是元数据快照,它必须和数据库实际状态双向一致。硬用 edit database 覆盖,常触发 ORA-16603 或校验失败。
- 如果
DbFileNameConvert在show parameter里已设好,但verbose显示旧值 → 先确认主备库都执行过ALTER SYSTEM SET db_file_name_convert = 'A','B' SCOPE=BOTH,再edit database 'SBDB' SET PROPERTY DbFileNameConvert = 'A','B' - 如果
ArchiveLagTarget在 spfile 是60,Broker 元数据存的是0→ 必须edit database改 Broker 值,只改 spfile 不同步 - 如果
StandbyArchiveLocation在 RAC 主库上是实例级路径 → 得用edit instance orcl1 on database orcl set property StandbyArchiveLocation=...,edit database会报ORA-16582 - 如果
LogArchiveFormat在备库 spfile 里显示(missing)→ 先在 SQL*Plus 里ALTER SYSTEM SET LogArchiveFormat='...' SCOPE=BOTH,再edit database同步
真修不动时,重置 Broker 是最后手段
当 statusreport 显示 DbFileNameConvert 被截断(如末尾是 /u01/app/oracle/oradat),说明 Broker 配置文件(dr1)已损坏,edit database 完全无效。
- 停掉主备库的
dg_broker_start:ALTER SYSTEM SET dg_broker_start = FALSE - 删掉所有节点上的
$ORACLE_HOME/dbs/dr1*.dat和dr2*.dat - 重启数据库,再
CREATE CONFIGURATION重建 Broker - 密码不同步导致的
ORA-01017+ORA-16810:必须 scp 主库orapw到备库并重命名为对应名,不能只改密码
最易被忽略的点:监听日志里 _DGMGRL 服务是否真注册、状态是否 READY,比任何 Broker 命令都早暴露问题。不查这里,其他操作全是蒙眼修车。











