Oracle 19c搭建Active Data Guard最推荐方式是RMAN ACTIVE DUPLICATE,主库需启用ARCHIVELOG和FORCE LOGGING,备库启动至NOMOUNT并配置正确密码文件、pfile及SERVICE解析,复制后须立即创建SRL、配置LOG_ARCHIVE_DEST_2并设STANDBY_FILE_MANAGEMENT=AUTO。

直接用 RMAN ACTIVE DUPLICATE 是 Oracle 19c 搭建 Active Data Guard 最快、最稳妥的方式——它不依赖本地备份,主库在线时就能“边读边传”,省掉备份/拷贝/恢复三步,T 级库也能在几小时内完成备库初始化。
主库必须启用 FORCE LOGGING 和 ARCHIVELOG
这是 Active Duplicate 能同步数据的前提。没开这两项,RMAN 复制会成功,但后续日志传输和应用必然失败,MRP 进程起不来。
-
ALTER DATABASE FORCE LOGGING;必须执行,否则部分 DML(如/*+ APPEND */)产生的非日志块无法被备库重放 - 确认归档已开启:
ARCHIVE LOG LIST;输出中Database log mode必须是Archive Mode - 如果未开启,按顺序执行:
SHUTDOWN IMMEDIATE;→STARTUP MOUNT;→ALTER DATABASE ARCHIVELOG;→ALTER DATABASE OPEN; - 别漏掉
ALTER DATABASE OPEN;——只STARTUP MOUNT后就跑 RMAN,会报ORA-01157: cannot identify/lock data file
备库启动到 NOMOUNT 前要配好密码文件和参数文件
Active Duplicate 要求 AUXILIARY 实例能连上主库,且自身能被主库识别。密码文件不是可选,而是强制;参数文件里最关键的不是 DB_NAME,而是 DB_UNIQUE_NAME 和 CONTROL_FILES 路径。
- 主库密码文件必须拷到备库的
$ORACLE_HOME/dbs/orapw<sid></sid>,且权限设为640,否则 RMAN 报ORA-17628: Oracle error 1017 returned by remote Oracle server - 备库
init.ora至少含:DB_NAME=orcl(与主库一致)、DB_UNIQUE_NAME=orcldg(必须与LOG_ARCHIVE_CONFIG中定义一致)、CONTROL_FILES='/u01/oradata/orcldg/control01.ctl'(路径需提前创建并确保有写权限) - 不要用 SPFILE 启动备库 NOMOUNT ——RMAN duplicate 过程中会自动重建控制文件,SPFILE 容易导致
ORA-01219: database not open类混淆错误 - 启动命令固定为:
sqlplus /nolog→CONNECT / AS SYSDBA→STARTUP NOMOUNT PFILE='/u01/init_orcldg.ora';
RMAN duplicate 命令里 SERVICE 名必须可解析且监听已注册
Active Duplicate 本质是 AUXILIARY 主动连主库拉数据,所以 SERVICE 参数不是随便写的字符串,而是必须能在备库上 tnsping 通、且主库监听器里已注册对应 SID 或 GLOBAL_DBNAME 的服务名。
- 检查方式:在备库执行
tnsping orcl(假设主库服务名为orcl),返回OK才算通过 - 主库
listener.ora中必须有对应SID_DESC,例如:(SID_DESC=(GLOBAL_DBNAME=orcl)(SID_NAME=orcl)),否则ORA-12514: TNS:listener does not currently know of service requested - RMAN 命令示例(在备库执行):
RMAN TARGET sys/password@orcl AUXILIARY /→DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK; -
NOFILENAMECHECK是关键开关:OMF 环境下不加它,RMAN 会因文件路径冲突直接退出;但若主备存储结构不同(如主库用 ASM、备库用 FS),就得手动映射,不能加
duplicate 完成后必须立刻配置 Standby Redo Log 和日志传输
RMAN duplicate 只复制数据文件和控制文件,不会建 SRL,也不会改主库的 LOG_ARCHIVE_DEST_2。缺 SRL 会导致 MRP 进程卡住;缺传输配置,备库永远收不到新日志。
- 在备库上创建 SRL,组数至少比主库联机日志多一组,大小严格一致:
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 '/u01/oradata/orcldg/srl05.log' SIZE 200M; - 主库执行:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orcldg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg' SCOPE=BOTH; - 主库验证传输:
ALTER SYSTEM SWITCH LOGFILE;→ 查V$ARCHIVED_LOG看DEST_ID = 2是否有新归档生成 - 备库启动日志应用:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;——注意是USING CURRENT LOGFILE,不是THROUGH ALL LOGFILE,后者在 ADG 场景下会阻塞实时查询
最容易被忽略的是备库 STANDBY_FILE_MANAGEMENT 参数,默认是 MANUAL;不设成 AUTO,主库加个表空间,备库就报 ORA-01274。这个必须在 duplicate 完成后、启动 MRP 前就改掉。


















