一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Oracle Data Guard为何出现主备日志不同步

时间:2026-08-21 09:38:48 编辑:袖梨 来源:一聚教程网

MRP进程未启动或卡在WAIT_FOR_GAP时,首要确认其是否运行:查v$managed_standby无MRP0记录或状态非APPLYING_LOG,需手动启动并确保备库处于MOUNT或READ ONLY WITH APPLY状态。

MRP进程没启动或卡在WAIT_FOR_GAP状态

备库归档日志已传到,但数据就是不应用,第一反应不是网络或权限问题,而是MRP进程根本没跑起来。执行V$MANAGED_STANDBY查不到MRP0记录,或者状态是WAIT_FOR_GAP,就说明它停在了缺失日志处。

  1. 确认MRP是否运行:SELECT PROCESS, STATUS, SEQUENCE# FROM V$MANAGED_STANDBY WHERE PROCESS IN ('MRP0', 'MRP');
  2. 如果没返回或STATUS不是APPLYING_LOG,手动启动:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
  3. 注意:备库必须处于MOUNTREAD ONLY WITH APPLY状态,OPEN READ ONLY下MRP不会工作

主库归档传输失败报ORA-16191或ORA-12154

日志根本没发过去,自然谈不上应用。常见错误是ORA-16191(主库LNS无法登录备库)和ORA-12154(TNS解析失败),本质都是认证或连通性断了。

  1. ORA-16191几乎全是密码文件问题:主备库SYS密码不一致,或备库缺少orapw<sid>文件,或REMOTE_LOGIN_PASSWORDFILE没设成EXCLUSIVESHARED
  2. ORA-12154是TNS配置问题:主库log_archive_dest_2里写的service_name在tnsnames.ora中不存在,或监听没起、防火墙拦了端口
  3. 查传输状态:SELECT DEST_NAME, STATUS, ERROR FROM V$ARCHIVE_DEST WHERE DEST_ID = 2;,ERROR列直接暴露根因

备库存在ARCHIVE_GAP但没被发现

日志传过去了,但中间缺了几段,MRP会静默卡住——不报错、不推进、也不告警,只在V$ARCHIVE_GAP里留痕。这是最隐蔽的同步中断原因。

  1. 必须主动查:SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
  2. 有结果就说明缺口存在;没结果≠没问题,要再核对V$ARCHIVED_LOGAPPLIED='YES'的最大SEQUENCE#是否落后主库
  3. 缺口修复不能靠等:得去主库找对应SEQUENCE#的归档路径,手动拷到备库,再用ALTER DATABASE REGISTER PHYSICAL LOGFILE注册

STANDBY_FILE_MANAGEMENT=MANUAL导致文件缺失

主库新增表空间或数据文件,备库磁盘不够或参数设为MANUAL,就会生成UNNAMED00135这类占位文件,后续日志应用直接失败,报FILE MISSING

  1. 查备库缺失文件:SELECT FILE#, NAME FROM V$RECOVER_FILE WHERE ERROR = 'FILE MISSING';
  2. 确认参数:SHOW PARAMETER STANDBY_FILE_MANAGEMENT,生产环境必须是AUTO
  3. 临时补救:ALTER DATABASE CREATE DATAFILE '/path/to/UNNAMED00135' AS '/real/path/file01.dbf';,但治标不治本,得立刻扩容并切回AUTO

真正棘手的从来不是单点故障,而是多个条件叠加:比如MRP卡在GAP上,同时备库又缺空间,而你只盯着TNS连通性调了一整天。排查时别跳步,按“传输→接收→应用”三层顺序验证,每层都得看到明确证据,而不是凭感觉猜。

热门栏目