Oracle 19c搭建ADG备库最稳最快的方式是RMAN DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE,但必须显式指定NOREDO和NOFILENAMECHECK;主库须满足归档模式、FORCE LOGGING启用、已建Standby Redo Log三项硬性条件。
直接用 rman duplicate target database for standby from active database 就能快速建好 adg 备库,但漏掉 noredo 或 nofilenamecheck 中任意一个,命令必然失败。
主库必须提前配齐的三项硬性条件
备库能否启动,完全取决于主库是否“准备好被克隆”,不是看备库配置多完善。
- 归档模式已开启(
ARCHIVELOG),且log_archive_dest_1指向可写的本地路径 -
FORCE LOGGING已启用(查v$database.force_logging必须为YES);注意:之前未开时产生的归档日志不包含强制记录内容,补开后也无法修复这部分日志 - 已创建至少一组 Standby Redo Log(组数 ≥ online redo log 组数 + 1),大小和成员数需与 online 日志严格一致
RMAN DUPLICATE 命令里不能省略的四个关键参数
很多人照抄命令但没理解参数作用,结果卡在 RMAN-05541: no archived logs found 或 RMAN-06136: ORA-19505 上。
-
FOR STANDBY:告诉 RMAN 目标是物理备库,不是普通测试库;缺它会建出非 DataGuard 兼容结构 -
FROM ACTIVE DATABASE:启用在线块拉取,跳过备份传输环节;这是速度提升的核心 -
NOFILENAMECHECK:主备路径不同时(比如/u01/oradata/ORCL/vs/u02/oradata/STBY/)必须加,否则 RMAN 检测到文件名重复直接报错退出 -
NOREDO:最关键的坑点——RMAN 默认尝试传 online redo log,但主库正在运行,这些日志随时被覆盖;显式加NOREDO表示只传归档日志,后续由 MRP 进程持续应用
辅助实例(auxiliary)启动和密码文件同步要点
这个“空壳实例”必须启动到 NOMOUNT,且所有连接都依赖密码文件一致性。
- 辅助实例的
DB_NAME可与主库相同,但DB_UNIQUE_NAME必须不同(如主库prod,备库设为prod_stby) - SYS 密码必须与主库完全一致,否则必现
RMAN-06403: could not obtain a fully authorized session - 必须用
orapwd手动创建密码文件,且entries≥2(RMAN 内部并发连接需要) - 若用
PASSWORD FILE选项(默认开启),RMAN 会尝试覆盖 auxiliary 端密码文件;Windows 下容易因文件锁失败,建议提前删掉再执行DUPLICATE
路径转换和初始化参数不能靠“默认”
即使主备目录结构一模一样,Oracle 11g+ 也要求显式声明路径映射,否则控制文件或数据文件重命名失败。
-
DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT必须在SPFILE子句中显式设置,例如:SET DB_FILE_NAME_CONVERT '/primary/', '/standby/' - 备库初始化参数里必须有
STANDBY_FILE_MANAGEMENT=AUTO,否则主库新增表空间/数据文件时,备库不会自动创建对应文件 -
compatible参数值必须 ≥11.1.0(11g)或 ≥12.1.0(19c),低于该值会拒绝执行FROM ACTIVE DATABASE
最容易被忽略的是 FORCE LOGGING 的时间边界问题:它只保障开启之后的日志完整性,之前产生的归档日志若含 NOLOGGING 操作,备库恢复时就会卡在 ORA-01113: file 1 needs media recovery —— 这类问题无法靠重跑 DUPLICATE 解决,必须从主库重新归档或补全日志起点。


















