Data Guard 部署必须满足五项硬性条件:主库开启归档(ARCHIVELOG)和强制日志(FORCE LOGGING);RMAN DUPLICATE 必须指定 NOREDO 和 NOFILENAMECHECK;备库 standby_file_management 设为 AUTO;启动 MRP 前确认无归档缺口;主备密码文件完全一致。
主库必须开启归档和强制日志模式
不满足这两点,data guard 同步直接失败,alter database archivelog 和 alter database force logging 不是可选项,而是前置硬性条件。常见错误是只开了归档但没开强制日志,导致部分 dml 操作不写入重做流,备库应用时出现数据不一致甚至报错 ora-00344 或 ora-16057。
验证方式:
SELECT log_mode, force_logging FROM v$database;
输出必须为 ARCHIVELOG 和 YES。若为 NO,需在 MOUNT 状态下执行启用命令,并重启数据库生效。
RMAN DUPLICATE 命令必须指定 NOREDO 且使用 ACTIVE DATABASE 模式
物理备库搭建最常用也最稳妥的方式是 RMAN DUPLICATE TARGET DATABASE FOR STANDBY,但关键参数容易被忽略:NOFILENAMECHECK 必须加(避免文件路径冲突),NOREDO 必须显式指定(否则 RMAN 会尝试传输并应用在线日志,而主库此时仍在运行,必然失败)。
典型命令片段:
RMAN> CONNECT TARGET sys/oracle@primary_db<br>RMAN> CONNECT AUXILIARY sys/oracle@standby_db<br>RMAN> DUPLICATE TARGET DATABASE FOR STANDBY<br> FROM ACTIVE DATABASE<br> DORECOVER<br> NOFILENAMECHECK<br> NOREDO;
注意:FROM ACTIVE DATABASE 表示不依赖备份集,直接从主库实时拷贝,要求主备网络通畅、TNS 连通、密码文件已复制、db_unique_name 已设不同值。
standby_file_management 必须设为 AUTO,否则新增数据文件主库无法自动同步
主库执行 ALTER TABLESPACE ... ADD DATAFILE 后,如果备库的 standby_file_management 是 MANUAL,新文件不会自动创建,MRP 进程会挂起并报错 ORA-01111(名称未知)或 ORA-01157(无法标识/锁定数据文件)。这不是同步延迟问题,是配置缺失。
在备库执行即可修复:
ALTER SYSTEM SET standby_file_management=AUTO SCOPE=BOTH;
该参数影响所有后续文件级变更,包括临时文件、undo 表空间扩容等。Oracle 19c 默认仍是 MANUAL,不能依赖默认值。
启动 MRP 进程前必须确认 redo transport 已就绪且无 GAP
备库恢复完成后,ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT 启动 MRP,但若此前主库归档未成功传到备库(V$ARCHIVE_DEST_STATUS 中 STATUS 非 VALID,或 GAP_STATUS 为 YES),MRP 会立即报错退出,日志里反复出现 ORA-00308 或 ORA-16047。
检查要点:
SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;-
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;(非空即存在归档缺口) - 确保主库
log_archive_dest_2指向正确备库服务名,且SYNC/ASYNC、NOAFFIRM等属性与网络环境匹配
有 GAP 时,需手动从主库拷贝缺失归档并注册:ALTER DATABASE REGISTER PHYSICAL LOGFILE '...',再重启 MRP。
整个流程中最容易被跳过的其实是密码文件一致性 —— 主备必须用同一份 orapw<sid></sid>(或通过 ORAPWD FILE=... FORMAT=12.2 重建),否则 LGWR 无法连接备库,ARCH 进程持续报 ORA-16191。











