ora-16810是data guard broker的状态聚合报警,提示存在底层错误,需结合show database verbosity查看具体错误(如ora-16783、ora-16629等),并检查tns连通性、监听静态注册、归档gap及broker缓存延迟。

ORA-16810 表示 Data Guard Broker 检测到数据库存在多个错误或警告,不是单一故障,而是“状态聚合报警”——它本身不告诉你具体哪出问题,只提示你该去查底层细节了。
先看 DGMGRL 输出里紧跟着的真正错误
ORA-16810 几乎总是伴随其他 ORA- 错误一起出现,比如 ORA-16783(无法解析 GAP)、ORA-16629(保护级别不匹配)、ORA-16775(switchover 被拒)等。这些才是根因。
- 执行
SHOW DATABASE VERBOSITY 'standby_db_name',重点看输出中 “Database Error(s)” 和 “Database Warning(s)” 两栏 - 若看到
ORA-16783,立刻查备库是否有归档 GAP:SELECT * FROM V$ARCHIVE_GAP; - 若看到
ORA-16629,检查主库PROTECTION_MODE是否与备库实际能力匹配(例如设为MAXAVAILABILITY,但备库LOG_ARCHIVE_DEST_2状态是ERROR) - 别只盯着 ORA-16810,它就像汽车仪表盘上的“发动机故障灯”,亮了得读 OBD 故障码,不是换灯泡
验证 TNS 连通性与静态监听是否就位
DGMGRL 内部大量依赖 sqlplus / as sysdba 方式连接远端实例,而这个连接路径必须经由本地 tnsnames.ora 解析 + 远端 listener.ora 静态注册,缺一不可。
- 在主库节点执行:
tnsping standby_db_name,确认能解析且端口通(telnet standby_vip 1521) - 在备库节点执行:
lsnrctl status,确认输出中 SERVICE_NAME 列包含和主库tnsnames.ora里SERVICE_NAME完全一致的条目(大小写敏感) - 检查备库
$ORACLE_HOME/network/admin/listener.ora是否含SID_LIST_LISTENER段,且其中GLOBAL_DBNAME值 = 主库tnsnames.ora中对应条目的SERVICE_NAME - 改完 listener.ora 后必须
lsnrctl reload,不是 stop/start;否则 DGMGRL 在 switchover 时可能连不上
用 RMAN FROM SERVICE 快速修复常见 GAP 类错误
如果底层错误是 ORA-16783(gap 无法解析),且主库归档已丢失、FAL 机制失效,19c 最直接的方式是跳过归档补传,用主库实时状态重刷备库。
- 确保主库开启 FORCE LOGGING:
SELECT FORCE_LOGGING FROM V$DATABASE;,不是 YES 就执行ALTER DATABASE FORCE LOGGING; - 在备库执行(无需 shutdown):
RMAN> RECOVER STANDBY DATABASE FROM SERVICE primary_db_name; - 该命令会自动拉取主库当前 SCN 后的增量变更,覆盖 gap 区间;执行中备库仍可查询(只读),但不能开 DML
- 完成后立即执行:
DGMGRL> VALIDATE DATABASE 'standby_db_name';,确认返回success - 注意:此操作要求主库
primary_db_name在tnsnames.ora中可解析,且监听已静态注册该服务名
别忽略 DG Broker 自身缓存延迟
DG Broker 不是实时同步所有状态,它有内部缓存刷新周期(默认约 60 秒)。有时候你已经修好底层问题,但 DGMGRL 还在报 ORA-16810,只是因为它还没轮询到新状态。
- 执行
EDIT DATABASE 'standby_db_name' SET STATE = 'ONLINE';强制触发一次状态重检 - 或者等 2 分钟后再次
SHOW CONFIGURATION,看是否自动恢复 - 极端情况下可重启 Broker:
DGMGRL> DISABLE CONFIGURATION;→ENABLE CONFIGURATION;,但会中断 broker 控制流,慎用 - 最易被忽略的一点:Broker 的状态判断依赖
V$DATAGUARD_STATS和V$MANAGED_STANDBY,而这两个视图的更新受_dg_broker_event_timeout隐含参数影响,不要指望秒级响应











