oracle 19c的observer不属于rac组件,仅用于data guard broker的fast-start failover,必须独立部署在第三台主机上,安装同版本oracle软件但不建实例,且需配置dgmgrl专用静态监听、启用fsfo并验证状态。

Oracle 19c 的 Observer 不是 RAC 组件,它只属于 Data Guard Broker 架构,且必须独立部署在第三台机器上——想用它给 RAC 做“故障仲裁”或“自动切换大脑”,方向就错了。
Observer 必须装在非主备库的独立主机上
Observer 进程(dgmon)本质是 Data Guard Broker 的外部心跳代理,它不参与数据库读写,只监听主备库状态并触发自动故障转移(Fast-Start Failover, FSFO)。如果把它和主库或备库装在同一台物理机或同一 OS 用户下,一旦该主机宕机,Observer 和目标库同时失效,FSFO 彻底失能。
- 必须用单独的 Linux 主机(如
192.168.56.100),安装同版本 Oracle 软件(仅软件,不建数据库实例) - 不能复用 RAC 节点、不能装在主/备库服务器上、也不能用容器或虚拟机共用宿主机内核
-
ORACLE_HOME路径需与主备库一致(如/u01/app/oracle/product/19.3.0/dbhome_1),否则 Broker 连接会因版本校验失败而拒绝通信 - 确认该主机的
/etc/hosts中已正确解析主备库 hostname 和 VIP,且 DNS 不参与解析(禁用resolve.conf中的 nameserver)
主备库必须启用 DGMGRL 静态监听器
Observer 通过 DGMGRL 协议连接主备库,不是走普通 SQL*Net。若监听器没注册 _DGMGRL 服务名,Broker 会报 ORA-12514: TNS:listener does not currently know of service requested in connect descriptor,且无法设置 FSFO。
- 主库
listener.ora中必须包含:SID_DESC = (GLOBAL_DBNAME = orcl_p_DGMGRL)(注意后缀_DGMGRL) - 备库对应为:
GLOBAL_DBNAME = orcl_s_DGMGRL - 修改后执行
lsnrctl reload,再用lsnrctl status确认输出里有orcl_p_DGMGRL和orcl_s_DGMGRL两个服务 - 若用动态注册(即未配
SID_LIST),需在主备库分别执行:ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521))';并ALTER SYSTEM REGISTER;
FSFO 启用前三个参数缺一不可
即使 Observer 进程跑起来了,Broker 也不会自动触发 failover——必须显式开启 Fast-Start Failover,并设定触发条件。常见现象是:主库宕机后 Observer 日志里一直刷 Waiting for primary to become available,MRP 进程卡在 WAIT_FOR_LOG。
- 在 DGMGRL 中依次执行:
ENABLE FAST_START FAILOVER;EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 30;(单位秒,建议 30–60)EDIT DATABASE orcl_p SET PROPERTY LogXptMode = 'SYNC';(必须 SYNC,ASYNC 不支持 FSFO) - 验证是否生效:
SHOW FAST_START FAILOVER;输出中State必须是ENABLED,Target指向备库,Observer显示 Observer 主机名 - 别跳过
VALIDATE DATABASE VERBOSE orcl_p;——它会检查归档传输路径、密码文件一致性、standby redo log 数量等隐藏依赖
Observer 日志里最常被忽略的三行错误
启动 dgmon 后,不要只看进程是否存在。真正决定 FSFO 是否可用的是 $ORACLE_HOME/rdbms/log/dgobserver.log 里的细节。以下三类日志出现任意一条,FSFO 实际处于“假启用”状态:
-
ORA-16664: unable to receive the result from a database→ 主库监听未注册_DGMGRL服务,或防火墙拦了 1521 端口 -
ORA-16826: enabled state disabled due to apply services not running→ 备库 MRP 进程未启动,或ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;没执行 -
ORA-16698: column "LOG_ARCHIVE_DEST_n" contains a value that references standby database→ 主库log_archive_dest_2指向了备库 service_name,但没加VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE),导致 Broker 认为归档配置冲突
Observer 不是开箱即用的“高可用开关”,它是 Data Guard 架构里最敏感的神经末梢——任何网络抖动、时间不同步(主备 Observer 时钟差 >5 秒会拒绝通信)、或 Broker 配置残留(比如上次测试没 clean config),都会让它静默失效。上线前务必用 DGMGRL> FAILOVER TO orcl_s; 手动触发一次,再验证应用连接是否自动重连成功。











