Observer不会自动重连,必须手动重启并确认Broker状态同步;它是一次性命令,不驻留后台,失效常见于非独立主机执行、环境变量错误、日志目录无写权限或主备网络不可达,验证需查dgmon进程、drc*.log日志及SHOW FAST_START FAILOVER输出。
Observer 断开后不会自动重连,必须手动重启并确认 Broker 状态同步 —— 这是绝大多数人误以为“启过一次就一直运行”的根源。
Observer 进程本身不守护、不后台驻留,dgmgrl -silent "START OBSERVER" 是一次性命令,执行完即退出。常见失效原因包括:
dgmgrl 不触发 Observer 实例)ORACLE_HOME 或 PATH 未正确设置,导致找不到 dgmon 后台进程$ORACLE_HOME/rdbms/log/)无写权限,启动时失败但不报错ORA-16664: unable to receive results from database
不能只看命令是否返回成功,要查三个地方:
ps -ef | grep observer,确认有 dgmon 进程且父进程不是 shell(而是 oracle 用户的长期进程)tail -f $ORACLE_HOME/rdbms/log/drc*.log,正常应持续输出类似 Observer is monitoring configuration 和心跳时间戳dgmgrl 中连接 Broker 后运行 SHOW FAST_START FAILOVER,输出中 Observer Enabled 必须为 YES,且 FSFO Status 为 SYNCHRONIZED(不是 STARTED 或空白)这个状态比 Observer 进程是否存在更关键 —— 它说明 Broker 已感知到主备数据不同步,Observer 即使在跑也不会触发切换。优先顺序是:
SELECT FSFO_STATUS FROM V$DATABASE,确认值为 SYNCHRONIZED;若不是,说明 redo 传输或应用卡住,得先解决日志 GAPV$ARCHIVE_DEST_STATUS,重点看 STATUS = VALID 且 ERROR 列为空;若有 ORA-16057 或 ORA-16714,需修复归档路径或角色配置kill -9 找到的 dgmon),清理日志文件,再用完整路径执行 $ORACLE_HOME/bin/dgmgrl -silent "START OBSERVER"
Observer 的可靠性不取决于“有没有启动”,而取决于它能否持续读取 V$DATABASE.FSFO_STATUS 并与 Broker 通信。任何一环断开(权限、网络、日志路径、SCN 同步)都会让它变成“活着的摆设”。