不能同步。Oracle Data Guard物理备库与主库必须使用完全一致的小版本号和PSU补丁集,否则MRP0进程无法持续运行;需通过v$version精确比对版本字符串、opatch lsinventory核对补丁列表,并验证MRP0真实状态及alert.log报错。

不能同步。Oracle Data Guard 物理备库与主库必须使用完全一致的小版本号和 PSU 补丁集,否则 MRP0 进程无法持续运行,同步必然失败。
MRP0 进程启动后几秒内退出、ORA-01092、ORA-00704、DGMGRL 连接后立即报 ORA-12547,都是典型表现——这不是配置问题,而是二进制级不兼容。
如何确认主备补丁是否真正一致?
-
不要只看
v$version输出的 “11.2.0.4”,要执行:SELECT banner FROM v$version WHERE banner LIKE 'Oracle%';
比对末尾完整字符串,例如11.2.0.4.190115vs11.2.0.4.0—— 差一个数字就不行。 -
进入
$ORACLE_HOME/OPatch目录,分别运行:opatch lsinventory -detail
重点核对 RDBMS 和 Network 组件的补丁列表是否**逐条完全相同**;主库打了 PSU,备库必须装**同一个 PSU 包**,不能只装 base release。
MRP0 是否真在运行?别被假象骗了
-
执行:
SELECT process, status, sequence# FROM v$managed_standby WHERE process = 'MRP0';
只有status = 'APPLYING_LOG'才算有效运行;WAIT_FOR_LOG或空结果,说明它已静默退出。 别依赖
ps aux | grep mrp:进程可能残留,但内部早已 halt。立刻查备库
alert.log最后 100 行,搜索ORA-01092或incompatible database version;跟踪文件里常出现control file version mismatch—— 这是最直接的证据。
想升级又保持同步?逻辑 DG 是唯一出路,但准备必须到位
物理 DG 跨版本不可行,逻辑 DG(SQL Apply)可以,但前提是主库必须完成三件事:
- 执行
EXEC DBMS_LOGSTDBY.BUILD,初始化 LogMiner 字典,否则备库无法解析 11g redo 为 SQL - 开启主键补充日志:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;仅ADD SUPPLEMENTAL LOG DATA不够,缺主键列日志会导致 DML 丢失 - 扫描不兼容对象:
SELECT <em> FROM DBA_LOGSTDBY_UNSUPPORTED</em>和SELECT FROM DBA_LOGSTDBY_NOT_UNIQUE WHERE BAD_COLUMN = 'Y';遇到LONG、ROWID列或无主键表,必须提前处理
没做完这三步就启用逻辑 DG,会立刻报 ORA-16108 或同步过程中静默丢数据。
补丁不一致的问题,表面是运维操作疏漏,实质是 Oracle 对控制文件结构、redo record 格式、SCN 处理逻辑的硬性二进制约束——它不给你绕过去的机会。


















