ORA-16766是MRP0进程已终止的结果快照,非独立错误;须查v$managed_standby确认MRP0是否存活(PROCESS='MRP0'且STATUS='APPLYING_LOG'),再分析其trace文件中的ORA错误(如ORA-01111、ORA-15041等)定位根因并针对性修复,最后验证v$archived_log中APPLIED='YES'连续3~5条。
ORA-16766不是错误,是MRP0已死的快照
ora-16766本身不触发,它只是v$dataguard_status里一条“结果记录”——真正的问题永远在mrp0进程是否活着。dg broker显示intended state: apply-on不代表它真在干活,必须查v$managed_standby确认:process = 'mrp0'且status = 'applying_log'才算有效运行。如果查不到mrp0行,或状态是wait_for_log、error、not active,说明它已经退出,broker只是把“你下过指令”当成了“它正在执行”。
查MRP0 trace文件比反复edit database更关键
MRP0挂掉后会在background_dump_dest下生成_mrp0_*.trc文件,直接搜ERROR行,90%的根因就藏在里面:
-
ORA-01111或ORA-01157:备库缺数据文件,路径不存在或名字仍是UNNAMEDxxxxx; -
ORA-15041:ASM磁盘组(如DG_DATA01)空间耗尽,MRP0启动时无法创建临时应用文件; -
ORA-65169:12c+ PDB场景下,主库新建PDB的数据文件没同步到备库对应路径,MRP0遇到DDL卡死; -
ORA-01274:备库standby_file_management=MANUAL或db_create_file_dest未设,导致无法自动建文件。
Broker配置可信前,先验证dmon和静态注册
如果show configuration显示Configuration Status: ERROR,Broker自身可能已失联,盲目操作会掩盖真实问题:
- 用
tnsping <staticconnectidentifier>_DGMGRL</staticconnectidentifier>验证网络通不通(注意服务名带_DGMGRL后缀); - 执行
ps -ef | grep dmon,确认ora_dmon_[SID]进程存在; - 查
show parameter dg_broker_start,值必须为TRUE且scope=BOTH; - 备库若处于
RESTRICTED模式,dmon连不进去,Broker永远报错,哪怕sqlplus / as sysdba能登录。
修复动作必须匹配trace里的具体错误码
别无差别执行alter database recover managed standby database disconnect,它可能绕过底层文件缺失问题,让MRP0反复崩溃:
- 遇
ORA-01111:查v$datafile找出UNNAMED文件,用alter database create datafile '<unnamed_path>' as '<correct_path>'</correct_path></unnamed_path>重建; - 遇
ORA-15041:立刻清理ASM磁盘组(删归档、扩盘),再手工启动MRP:alter database recover managed standby database using current logfile disconnect; - 遇
ORA-65169:手动拷贝主库PDB数据文件到备库对应路径,再alter pluggable database <pdb_name> open</pdb_name>; - 修复后必须验证
v$archived_log中APPLIED='YES'连续出现3~5条,才算真正恢复应用。
最常被忽略的是:MRP0 trace里出现Waiting for message from database,这不是Broker问题,而是备库根本没启用应用(RECOVERY_MODE = IDLE),得立刻切过去查v$managed_standby,而不是在Broker里反复edit database。











