Oracle 19c搭建ADG备库必须启用FORCE LOGGING和ARCHIVELOG,否则RMAN复制漏块、MRP启动失败、查询报ORA-16000;RMAN DUPLICATE命令须显式指定NOREDO和NOFILENAMECHECK,且主备DB_UNIQUE_NAME与LOG_ARCHIVE_CONFIG必须双向严格一致。
必须开 force logging 和 archivelog,否则 rman 复制会漏块、mrp 启动失败、查询报 ora-16000 —— 这不是可选项,是硬门槛。
Active Data Guard 依赖重做流完整传输和实时应用。如果主库没开 FORCE LOGGING,像 INSERT /*+ APPEND */ 或 CREATE TABLE AS SELECT 这类直接路径操作产生的变更可能不写 redo,RMAN 复制时就漏数据块,备库启动后报 ORA-01110 或 MRP 应用中断;没开归档则根本无法传输日志。
SELECT log_mode, force_logging FROM v$database;,结果必须是 ARCHIVELOG 和 YES
force_logging 为 NO,需先 SHUTDOWN IMMEDIATE → STARTUP MOUNT → ALTER DATABASE FORCE LOGGING; → ALTER DATABASE OPEN;
log_mode 为 NOARCHIVELOG,同样需在 MOUNT 状态下执行 ALTER DATABASE ARCHIVELOG;,再打开FORCE LOGGING 对高并发小事务有轻微性能影响,但不可跳过用 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_NAME、DB_UNIQUE_NAME、CONTROL_FILES
orapwd 创建,如:orapwd file=$ORACLE_HOME/dbs/orapworcl_stby password=xxx entries=10
主库新增数据文件(比如 ALTER TABLESPACE users ADD DATAFILE)时,如果备库 standby_file_management 是 MANUAL(Oracle 19c 默认值),新文件不会自动创建,MRP 会挂起并报 ORA-01111 或 ORA-01157 —— 这不是同步延迟,是配置缺失。
ALTER SYSTEM SET standby_file_management=AUTO SCOPE=BOTH;
MANUAL,必须显式改备库恢复完成后,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,非 ERROR 或 DEFERRED
SELECT THREAD#, SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG WHERE NEXT_TIME > SYSDATE - 1/24 ORDER BY 1,2; 确认最近归档已接收且未应用缺口真正容易被忽略的是 DB_UNIQUE_NAME 和 LOG_ARCHIVE_CONFIG 的双向一致性 —— 它们不是单向配置,而是 DG 实例身份识别的“握手协议”,错一个字符,日志就传不过去,而且错误现象常表现为 MRP 不报错但不动,排查起来最耗时间。