active database duplicate必须满足三个前提:源库open且已执行alter system archive log current;目标端辅助实例需有与源库一致的orapw密码文件且sys口令相同;tnsnames.ora须能解析源库连接串并放行网络端口。

FROM ACTIVE DATABASE 必须满足的三个前提
主动复制不是“远程拷贝”,而是源库实时读取+网络流式传输,所以对两端状态和权限要求严格。缺一不可:
- 源数据库必须处于
OPEN状态(MOUNT不行),且已执行过ALTER SYSTEM ARCHIVE LOG CURRENT,确保最新归档可被拉取 - 辅助实例(目标端)必须有与源库完全一致的
orapw<sid></sid>密码文件,且 SYS 口令相同;否则 RMAN 会报ORA-17628或连接中断 - 辅助实例的
tnsnames.ora中必须能解析源库连接串,且源库监听器允许反向连接——常被忽略的是防火墙放行源库到辅助主机的端口(默认1521),以及listener.ora中未配置静态服务名
路径转换参数不能省,DB_FILE_NAME_CONVERT 是刚需
RMAN 不会自动推导路径映射,哪怕你用了 NOFILENAMECHECK,只要数据文件或日志写入路径不存在,就会卡在 ORA-01503: CREATE CONTROLFILE failed 或 ORA-19504。
必须显式指定:
-
SET DB_FILE_NAME_CONVERT '/u01/oradata/orcl/', '/u01/oradata/clone/'—— 注意结尾斜杠不能少,且成对出现 -
SET LOG_FILE_NAME_CONVERT '/u01/oradata/orcl/', '/u01/oradata/clone/'—— 漏掉会导致控制文件重建失败 - 如果重做日志组路径不同,还需额外
SET LOG_FILE_NAME_CONVERT映射,否则RESETLOGS阶段报错
示例命令片段:DUPLICATE TARGET DATABASE TO clone FROM ACTIVE DATABASE PASSWORD FILE SPFILE SET DB_FILE_NAME_CONVERT '/orcl/','/clone/' SET LOG_FILE_NAME_CONVERT '/orcl/','/clone/' NOFILENAMECHECK;
ORA-19566 / ORA-19809 不是磁盘空间问题,是恢复范围失控
这两个错误本质是 RMAN 默认尝试恢复“所有可用归档”,但克隆场景通常只需要某个时间点快照。不加限制就等于让 RMAN 去找它根本找不到、或没权限写的归档路径。
- 用
UNTIL TIME 'SYSDATE-1'显式限定终点,RMAN 自动跳过之后的归档,大幅降低失败概率 - 若已知 SCN,优先用
UNTIL SCN 12345678,比时间更精准(查源库V$DATABASE.CURRENT_SCN) - 开发/测试库常见只读表空间,加上
SKIP READONLY可跳过其恢复,避免因只读路径不可写而中断
不指定 UNTIL 的后果:RMAN 会一直尝试拉取最新归档,一旦源库归档目录未共享、或目标端 DB_RECOVERY_FILE_DEST 权限不对(缺 write+execute),立刻触发错误。
克隆完成后 RESETLOGS 才是真正起点,别急着连应用
DUPLICATE 成功只是完成还原+恢复流程,新库有独立 DBID,但以下三件事必须手动处理,否则应用连接会失败或数据异常:
- 检查并更新克隆库的
listener.ora和tnsnames.ora,确保服务名、SID、主机名与实际匹配(尤其跨主机时) - 确认
DB_UNIQUE_NAME与源库不同(即使同主机),否则 Data Guard 或后续 RMAN catalog 注册会混淆 - 运行
ALTER DATABASE OPEN RESETLOGS后,立即执行SELECT NAME, DBID, DB_UNIQUE_NAME FROM V$DATABASE;核验是否生效
最容易被忽略的是:克隆库默认仍启用源库的归档模式和归档路径,若不修改 LOG_ARCHIVE_DEST_1,它会试图往源库路径写归档,导致后续日志切换失败。











