fsfo要求主备库均启用flashback database,否则enable fast_start failover会报错或无法回切;必须显式设置faststartfailovertarget属性,observer须在独立主机本地运行且持续在线;仅shutdown abort或kill -9才触发自动切换。

FSFO 要求主备库都启用闪回数据库
不启用 FLASHBACK DATABASE,ENABLE FAST_START FAILOVER 会直接报错或切换后无法回切。FSFO 在故障转移后,要把原主库拉起来变成新备库,必须依赖闪回日志重放差异——这不是可选项,是硬性依赖。
- 主库和备库都要执行:
ALTER DATABASE FLASHBACK ON - 确保
DB_RECOVERY_FILE_DEST和DB_RECOVERY_FILE_DEST_SIZE已设且空间充足;闪回区写满会导致实例挂起 - 检查状态用:
SELECT FLASHBACK_ON FROM V$DATABASE,两库都必须返回YES
dgmgrl 配置中必须显式设置 FastStartFailoverTarget
即使 Broker 自动识别了主备关系,FastStartFailoverTarget 属性仍需手动指定,否则 SHOW FAST_START FAILOVER 里 Target 显示为 (none),FSFO 不会启动。
- 主库上执行:
EDIT DATABASE 'standby_db' SET PROPERTY 'FastStartFailoverTarget' = 'standby_db' - 备库上执行:
EDIT DATABASE 'primary_db' SET PROPERTY 'FastStartFailoverTarget' = 'primary_db' - 注意:值必须是 Broker 中定义的数据库名(不是 TNS 别名),大小写敏感
Observer 必须在独立主机运行且持续在线
START OBSERVER 命令不能在主库或备库上执行,也不能用远程 shell 调用——它必须在第三台专用主机上以本地会话启动,且进程不能退出。
- 推荐用 nohup 启动:
nohup dgmgrl -silent "START OBSERVER file=fsfo.dat" >> fsfo.log 2>&1 & - Observer 日志默认路径:
$ORACLE_HOME/rdbms/log/drc*.log,出问题先查这个目录 - 如果 Observer 进程意外终止,FSFO 立即失效,
SHOW CONFIGURATION仍显示 ENABLED,但状态实际卡在STARTED或NOT SYNCHRONIZED
FSFO 不响应 shutdown immediate,只认非正常中断
这是最常被忽略的操作陷阱。用 SHUTDOWN IMMEDIATE、SHUTDOWN NORMAL 或 SHUTDOWN TRANSACTIONAL 关主库,FSFO 完全不会触发——因为 Broker 收到的是“受控退出”信号,直接跳过故障判定流程。
- 测试必须用:
SHUTDOWN ABORT或直接 kill -9pmon进程 - 生产环境模拟故障时,也建议用
kill -9模拟实例崩溃,而非 SQL 命令 - 确认 Observer 是否真在工作:查日志里有没有周期性出现
Failed to ping primary或Initiating Fast-Start Failover
Waiting for primary to become unavailable 时,别急着调阈值,先确认主库是不是真“失联”了——网络通、tnsnames.ora 对、监听器活、LOCAL_LISTENER 配对,缺一不可。











