在Oracle 19c中如何快速搭建Active Data Guard物理备库?

作者:袖梨 2026-07-16
Oracle 19c搭建ADG备库必须启用FORCE LOGGING和ARCHIVELOG,否则RMAN复制漏块、MRP启动失败、查询报ORA-16000;RMAN DUPLICATE命令须显式指定NOREDO和NOFILENAMECHECK,且主备DB_UNIQUE_NAME与LOG_ARCHIVE_CONFIG必须双向严格一致。

必须开 force loggingarchivelog,否则 rman 复制会漏块、mrp 启动失败、查询报 ora-16000 —— 这不是可选项,是硬门槛。

主库必须确认 FORCE_LOGGING 和 ARCHIVELOG 已启用

Active Data Guard 依赖重做流完整传输和实时应用。如果主库没开 FORCE LOGGING,像 INSERT /*+ APPEND */CREATE TABLE AS SELECT 这类直接路径操作产生的变更可能不写 redo,RMAN 复制时就漏数据块,备库启动后报 ORA-01110 或 MRP 应用中断;没开归档则根本无法传输日志。

  • 执行 SELECT log_mode, force_logging FROM v$database;,结果必须是 ARCHIVELOGYES
  • force_loggingNO,需先 SHUTDOWN IMMEDIATESTARTUP MOUNTALTER DATABASE FORCE LOGGING;ALTER DATABASE OPEN;
  • log_modeNOARCHIVELOG,同样需在 MOUNT 状态下执行 ALTER DATABASE ARCHIVELOG;,再打开
  • 注意:FORCE LOGGING 对高并发小事务有轻微性能影响,但不可跳过

RMAN DUPLICATE FOR STANDBY 必须带 NOREDO 和 NOFILENAMECHECK

RMAN DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE 是 19c 最快的物理备库构建方式,但它对参数极其敏感。漏掉 NOREDO 会导致 RMAN 尝试拉取并应用在线日志,而主库正在运行,必然失败;漏掉 NOFILENAMECHECK 则因主备路径相同被拒绝执行。

  • 典型命令组合:DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK NOREDO;
  • FROM ACTIVE DATABASE 表示不依赖备份集,直接从主库实时拷贝,要求主备 TNS 连通、密码文件已复制、DB_UNIQUE_NAME 已设不同值
  • 备库必须提前建好最小初始化参数文件,至少含 DB_NAMEDB_UNIQUE_NAMECONTROL_FILES
  • 主库生成的密码文件不能复用,备库需单独运行 orapwd 创建,如:orapwd file=$ORACLE_HOME/dbs/orapworcl_stby password=xxx entries=10

备库必须设 standby_file_management=AUTO

主库新增数据文件(比如 ALTER TABLESPACE users ADD DATAFILE)时,如果备库 standby_file_managementMANUAL(Oracle 19c 默认值),新文件不会自动创建,MRP 会挂起并报 ORA-01111ORA-01157 —— 这不是同步延迟,是配置缺失。

  • 在备库执行:ALTER SYSTEM SET standby_file_management=AUTO SCOPE=BOTH;
  • 该设置影响所有后续文件级变更:临时文件、undo 表空间扩容、甚至 ASM diskgroup 扩容后的文件同步
  • 别指望默认值,19c 仍默认 MANUAL,必须显式改

启动 MRP 前必须验证归档传输无 GAP 且参数双向对齐

备库恢复完成后,ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT 启动 MRP,但如果归档没传过去或 LOG_ARCHIVE_CONFIG 配错,MRP 会静默卡住或报 ORA-16047(DGID mismatch)。

  • 检查主备 LOG_ARCHIVE_CONFIG 是否完全一致(大小写敏感):DG_CONFIG=(orcl_primary,orcl_standby)
  • 主库 LOG_ARCHIVE_DEST_2 指向备库:SERVICE=orcl_standby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_standby
  • 备库 LOG_ARCHIVE_DEST_2 指向主库:SERVICE=orcl_primary ASYNC VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=orcl_primary
  • SELECT STATUS, ERROR FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2; 确认状态为 VALID,非 ERRORDEFERRED
  • 启动 MRP 前,跑 SELECT THREAD#, SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG WHERE NEXT_TIME > SYSDATE - 1/24 ORDER BY 1,2; 确认最近归档已接收且未应用缺口

真正容易被忽略的是 DB_UNIQUE_NAMELOG_ARCHIVE_CONFIG 的双向一致性 —— 它们不是单向配置,而是 DG 实例身份识别的“握手协议”,错一个字符,日志就传不过去,而且错误现象常表现为 MRP 不报错但不动,排查起来最耗时间。

相关文章

精彩推荐