必须部署两个observer,因为oracle强制要求至少两个实例通过投票(quorum)达成共识才能批准fast-start failover,单点宕机即导致fsfo挂起为disabled,无法降级运行;二者须物理隔离、双向连通、独立运行。
单个 observer 无法启用 fast_start_failover,oracle 强制要求至少两个 observer 实例达成投票共识才能批准切换——这不是可选项,是硬性校验逻辑。
为什么必须部署两个 Observer?
一个 OBSERVER 进程宕机,整个自动故障切换能力就归零。Oracle 不会“降级运行”,而是直接挂起 FAST_START_FAILOVER 状态为 DISABLED。根本原因在于:Observer 之间不共享状态,靠内部投票(quorum)防脑裂;少于 2 个实例,无法形成多数派,系统拒绝执行任何 failover 决策。
-
OBSERVER不参与日志传输或数据同步,只监听主库、备库心跳和角色状态 - 两个 Observer 必须能互相连通(
tnsping双向通),且都能连上主库和备库 - 禁止部署在同一台主机、同一虚拟机、甚至同一个网络出口下——物理隔离是底线
启动双 Observer 的关键实操点
命令看似简单,但环境闭环没做好,90% 的失败都卡在启动阶段:一个跑着,另一个报错退出,或两个都连不上备库。
- 确保两台 Observer 主机的
tnsnames.ora都正确定义了PRIMARY_DB和STANDBY_DB,并用tnsping PRIMARY_DB和sqlplus /@STANDBY_DB实测双向连通 - 启动命令必须带完整路径和显式配置文件:
DGMGRL> START OBSERVER /path/to/observer1.ora,其中observer1.ora内容仅一行:CONNECT IDENTIFIER IS PRIMARY_DB(另一台可用相同配置,12c+ 允许双 Observer 都连主库) - 不要用
nohup dgmgrl &后台启动,改用systemd或init.d管理进程生命周期——否则异常退出无日志、无告警、难排查
Fast-Start Failover 启用前必须核对的三项配置
很多“启用了但切不动”的问题,根源不在 Observer,而在这三项 Broker 属性没生效。
-
FastStartFailoverThreshold:默认 30 秒,跨城专线建议设为60,避免网络抖动误触发 -
FastStartFailoverLagLimit:设为0意味着备库必须完全实时,稍有归档积压就拒绝切换;生产环境推荐90~180 -
FastStartFailoverAutoReinstate:务必设为TRUE,否则 failover 后原主库恢复上线不会自动转为新备库,需手动REINSTATE
Observer 日常巡检容易被忽略的细节
Broker 界面显示 FAST_START_FAILOVER: ENABLED 并不等于真正可用——Observer 进程可能已僵死但未退出,或心跳中断但未上报。
- 定期检查
DGMGRL> SHOW FAST_START_FAILOVER输出中的Observer present是否为YES,且两个 Observer 的State都是ONLINE - 查
v$dataguard_status中是否有ORA-16826(failover disabled due to observer loss)类错误 - 注意 Observer 日志路径(默认在
$ORACLE_HOME/dg/broker/log),不是所有错误都会回传到 DGMGRL 会话里











