observer必须独立部署于异地灾备中心或云vpc,与主备库物理隔离;需同版本oracle软件、正确配置tnsnames.ora和staticconnectidentifier;主备库须启用broker、maximum availability模式及sync affirm传输;启动后须通过show fast_start_failover和validate database验证状态。

Observer必须独立部署,不能装在主库或备库上
Observer进程一旦挂掉,FSFO就失效。如果把它和主库或备库共用一台机器,那台机器宕机,整个高可用链路直接断掉——不是“降级”,是彻底失去自动故障转移能力。
常见错误:把observer装在dg01(主库)或dg02(备库)上,只图省事;结果主库服务器断电后,dgmgrl连不上observer,FAILOVER命令根本发不出去。
- Observer机器需安装**同版本Oracle数据库软件**(不要求建实例,但必须有
ORACLE_HOME和可执行的dgmgrl) -
/etc/hosts里必须能解析主、备库的主机名(如dg01、dg02),不能只靠DNS或写IP——TNS连接失败时,dgmgrl不会报错,而是静默超时 - Observer机器上的
tnsnames.ora必须包含主备库的完整连接描述符,且SERVICE_NAME要与db_unique_name一致(不是ORACLE_SID)
主备库必须启用Broker并配置StaticConnectIdentifier
Broker不启用,observer连不上任何数据库;没配StaticConnectIdentifier,Observer重启后无法重建连接,MRP状态会卡在WAIT_FOR_LOG。
错误现象:DGMGRL> show configuration显示Success,但show database verbose "xxx"里StaticConnectIdentifier为空,FSFO始终不触发。
- 主备库都要执行:
alter system set dg_broker_start=true scope=both; - 如果监听里没配
_DGMGRL服务名(比如ORCL_P_DGMGRL),就必须手动设置:edit database "orcl_p" set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dg01)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl_p)(INSTANCE_NAME=orcl)(SERVER=DEDICATED)))'; - 注意:
INSTANCE_NAME必须是实际实例名(不是db_unique_name),否则连接被拒绝,日志里只写ORA-12514,不提示具体错在哪
启动Observer前,主备库必须处于MAXIMUM AVAILABILITY模式
FSFO只支持MAXIMUM AVAILABILITY和MAXIMUM PERFORMANCE两种模式,但生产环境几乎都选前者——因为后者允许数据丢失,而Observer的核心价值就是“零数据丢失下的自动切换”。
常见坑:protection_mode显示MAXIMUM AVAILABILITY,但protection_level仍是MAXIMUM PERFORMANCE,说明同步传输没真正生效,Observer会拒绝接管。
- 检查命令:
SELECT protection_mode, protection_level FROM v$database;两列输出必须都是MAXIMUM AVAILABILITY - 确保主库
log_archive_dest_2含SYNC AFFIRM和VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE),否则Broker认为同步链路不可靠,不许启用FSFO -
FAST_START_FAILOVER_THRESHOLD建议设为30–60秒(默认是30),太短易误触发,太长影响RTO
启动Observer后必须验证FSFO状态,不能只看进程是否存在
nohup dgmgrl / "START OBSERVER" &跑起来不代表FSFO就活了。很多DBA看到ps -ef | grep observer有进程就以为完事,结果故障时切不动。
真实验证步骤只有三步:SHOW CONFIGURATION → SHOW FAST_START_FAILOVER → VALIDATE DATABASE,缺一不可。
-
SHOW FAST_START_FAILOVER必须显示ENABLED且Observer is running,否则FAILOVER命令无效 -
VALIDATE DATABASE "orcl_s"会检查网络延迟、SRL是否足够、归档是否连续——这里报Warning: Redo Transport Services not functional比报错更危险,它意味着Observer已上线但同步链路实际中断 - Observer日志默认在
$ORACLE_HOME/dbs下,文件名是dr1<db_unique_name>.dat</db_unique_name>,不是alert.log,出问题得去翻这个
db_unique_name和TNS别名不一致导致连接失败——dgmgrl报错极简,只说ORA-12154,但根源常是tnsnames.ora里写的SERVICE_NAME=orcl_p,而实际db_unique_name是orcl_primary,Broker内部匹配失败。











