fsfo不是配完就能用的功能,必须满足六个硬性前提:主备库版本≥10gr2、备库启用real-time apply、全程使用dgmgrl配置、log_archive_dest_n含合法valid_for、staticconnectidentifier可解析且连通、主备库均启用flashback database,缺一则enable时报ora-16651。

FSFO 不是配完就能用的功能,缺一个前提就会在 ENABLE FAST_START FAILOVER 时直接报错 ORA-16651。
必须满足的六个硬性前提条件
FSFO 依赖 Data Guard Broker 全程管控,所有检查项都必须通过 dgmgrl 的 SHOW DATABASE VERBOSITY 确认无 WARNING 或 ERROR。常见卡点不在 SQL 层,而在底层链路:
- 主备库版本必须 ≥ Oracle 10gR2(强烈建议 12cR2+ 或 19c;11.2.0.3 有已知 observer 漏判 bug)
- 备库必须启用 Real-Time Apply:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE - 必须用
dgmgrl配置 Broker,不能混用 SQL*Plus;SHOW CONFIGURATION必须显示Success -
LOG_ARCHIVE_DEST_n中主库需含VALID_FOR=(ALL_LOGFILES,PRIMARY_ROLE),备库对应项需为VALID_FOR=(ONLINE_LOGFILES,STANDBY_ROLE) - 主备库的
StaticConnectIdentifier必须可解析、监听正常,且能被对方数据库进程访问(常因tnsnames.ora缺失或防火墙拦截导致超时) - 主备库都必须开启 Flashback Database,否则
ENABLE FAST_START FAILOVER直接报ORA-16651
dgmgrl 中配置 FSFO 的关键步骤
所有操作必须从主库 Broker 连接入口进入,observer 主机必须独立部署(不能和主/备库共用):
- 连接 Broker:
dgmgrl sys/password@primary_db(注意:这里连的是 Broker 监听地址,不是数据库实例) - 设触发阈值(单位秒):
EDIT DATABASE 'standby_db' SET PROPERTY 'FastStartFailoverThreshold' = 30 - 启动 observer:
START OBSERVER(该命令必须在 observer 主机本地执行,远程调用无效) - 启用 FSFO:
ENABLE FAST_START FAILOVER,成功后SHOW CONFIGURATION显示Fast-Start Failover: ENABLED
observer 日志默认写入 $ORACLE_HOME/rdbms/log/drc*.log,故障排查第一要看这里。
FSFO 触发失败的三个高频原因
即使配置完成,实际故障时仍可能卡在 “waiting for failover” 或回退到手动干预状态:
- observer 进程意外退出(如主机重启、
kill -9、资源耗尽),FSFO 立即失效 - 主备库之间网络延迟突增,超过
FastStartFailoverThreshold设定值但未真正宕机,导致误判切换 - 备库 SRL(Standby Redo Log)空间不足或未正确配置
AFFIRM,尤其在 Maximum Availability 模式下,redo 写入失败会阻塞 observer 判定
最易被忽略的是 observer 的稳定性——它不是“配置一次就完事”的组件,而是必须 7×24 小时在线的独立守护进程;任何对 observer 主机的维护操作(比如打补丁、升级内核)都必须提前规划 failover 窗口。











