ORA-16766是MRP0进程已终止的“结果快照”,需查v$managed_standby确认MRP0是否真在APPLYING_LOG状态、分析MRP trace文件中的底层错误(如ORA-01111/ORA-65169)、验证STANDBY_FILE_MANAGEMENT=AUTO等关键参数。

ORA-16766 不是单一错误,而是“Redo Apply is stopped”的状态快照——它本身不告诉你原因,只告诉你结果。必须查 v$dataguard_status、MRP trace 文件和 v$managed_standby 才能定位真实故障点。
查 MRP 进程是否真在运行
很多人只看 DGMGRL 的 show database verbose 就以为 MRP 没启,其实可能只是状态没刷新。直接查实例内进程:
- 执行
SELECT PROCESS, STATUS, SEQUENCE# FROM v$managed_standby;—— 关键看是否有MRP0行且STATUS是APPLYING_LOG;若只有RFS或全是CLOSING/IDLE,说明 MRP 根本没起来 - 如果
PROCESS列没有MRP0,说明ALTER DATABASE RECOVER MANAGED STANDBY DATABASE没生效,或被隐式取消(比如开了 PDB 但没先CANCEL) - 注意:
v$managed_standby中CLIENT_PROCESS = 'LGWR'或'ARCH'是传输端行为,和备库应用无关;别误判为“日志已到就等于在应用”
看 MRP trace 文件里的真实报错
ORA-16766 总是伴随更底层的错误(如 ORA-01111、ORA-65169、ORA-16786),这些藏在 MRP trace 里。路径通常为:$ORACLE_BASE/diag/rdbms/<db_unique_name>/<instance_name>/trace/<instance_name>_mrp0_*.trc
- 最常见三类报错:
-
ORA-01111: name for data file X is unknown - rename to correct file→ 备库缺数据文件,路径映射失败(DB_FILE_NAME_CONVERT没设或写错) -
Automatic Copy of Standby datafiles for create pdb failed with error - 65169→ 主库新建 PDB,备库STANDBY_FILE_MANAGEMENT=AUTO但目标路径不存在,需手动建目录或补参数 -
ORA-16786: unable to access Data Guard broker configuration files→DG_BROKER_CONFIG_FILE1对应文件不可读/磁盘满/SELinux 拦截,broker 无法加载配置,MRP 不启动
-
- 别只扫一眼 trace 开头,要搜
ERROR和ORA-,trace 末尾常有完整堆栈 - 若 trace 为空或找不到,说明 MRP 根本没尝试启动——此时问题在参数或命令层(比如
dg_broker_start=FALSE)
确认关键参数和状态是否就绪
MRP 启动前有硬性依赖,漏掉任一都会静默失败:
-
STANDBY_FILE_MANAGEMENT必须为AUTO(除非你手动管理所有文件)。若为MANUAL,新建表空间/PDB 时备库不会自动创建数据文件,直接卡住 -
DB_FILE_NAME_CONVERT必须成对设置(主库路径→备库路径),且路径真实存在、权限可写。用SELECT NAME FROM v$datafile看备库当前数据文件路径,比对是否仍含主库 ASM 别名(如+DATA/...) -
dg_broker_start必须为TRUE(即使不用 broker,某些版本也依赖它加载内部状态)。查法:SHOW PARAMETER dg_broker_start - 备库必须处于
MOUNT状态(不是OPEN READ ONLY),且v$database.open_mode显示MOUNTED;如果误开成READ ONLY,MRP 会拒绝启动
PDB 场景下特别容易踩的坑
Oracle 12c+ 的 PDB 在备库默认 MOUNTED,但它的状态直接影响 MRP 启动逻辑:
- 主库新建 PDB 后,备库对应 PDB 会卡在
MOUNTED或CLOSED,此时 MRP 可能持续报 ORA-16766 —— 并非同步中断,而是 PDB 文件创建失败导致日志应用暂停 - 不要在备库 CDB$ROOT 下直接
ALTER PLUGGABLE DATABASE pdb1 OPEN,会报ORA-65115;正确流程是:RECOVER MANAGED STANDBY DATABASE CANCEL→ALTER PLUGGABLE DATABASE pdb1 OPEN READ ONLY→ALTER PLUGGABLE DATABASE pdb1 CLOSE IMMEDIATE→RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT - 如果 PDB 数据文件路径在备库不存在(例如主库用 ASM,备库用文件系统),
STANDBY_FILE_MANAGEMENT=AUTO会失败并停 MRP,错误码通常是ORA-65169,必须提前建好目录或补全DB_FILE_NAME_CONVERT
ORA-16766 的根因永远不在表面——它像一张病危通知单,真正要抢救的是背后那个没被发现的 ORA-01111、ORA-65169 或权限缺失。查 trace、盯 v$managed_standby、验证参数三件套缺一不可,任何跳步都可能让修复变成反复重启。


















