active duplicate需源库归档模式开启且日志可用,路径转换、db_name、口令文件、监听注册必须严格匹配,cdb/pdb环境需注意克隆范围,完成后须立即执行首次rman备份。

DUPLICATE DATABASE ... FROM ACTIVE DATABASE 是 Oracle 12c 中最常用、也最容易出错的克隆方式。它不依赖本地备份,直接从源库实时拉取数据文件和归档日志,适合快速建测试库,但对环境一致性要求极高——只要路径、口令、监听、归档模式中有一项没对齐,RMAN 就会卡在 auxiliary instance 启动后或复制中途报错,且错误信息往往模糊。
必须确保源库处于归档模式且可访问归档日志
Active duplicate 本质是“边拷贝边恢复”,需要持续应用源库产生的归档日志来保持一致性。如果源库未开归档,或归档路径不可写、归档被删除,RMAN 会在恢复阶段报 ORA-19625(无法识别归档日志)或卡在 recovering datafile 阶段。
- 检查命令:
archive log list,输出必须含Archive Mode和Automatic archival Enabled - 确认归档日志至少保留到克隆开始时刻:运行
SELECT NAME, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG WHERE FIRST_TIME > SYSDATE - 1/24 ORDER BY FIRST_TIME; - 若源库是 RAC,所有实例都要开归档,且
LOG_ARCHIVE_DEST_1要指向共享存储(如 +FRA),不能是本地路径
辅助实例参数文件里 DB_FILE_NAME_CONVERT 和 LOG_FILE_NAME_CONVERT 不是可选项
同主机克隆时,如果不做路径转换,RMAN 默认会尝试把数据文件写回源库路径,轻则覆盖源库文件,重则因权限/锁导致 ORA-17628(远程服务器返回错误)或 ORA-19505(无法识别文件)。即使你用 NOFILENAMECHECK,也只是跳过文件名冲突检查,**不解决物理路径重叠问题**。
- 正确写法示例(源库路径
/oradata/orcl/→ 目标库路径/oradata/dupdb/):*.db_file_name_convert='/oradata/orcl/','/oradata/dupdb/'*.log_file_name_convert='/oradata/orcl/','/oradata/dupdb/' - 注意末尾斜杠必须一致;若用 ASM,路径要写成
'+DATA/orcl/','+DATA/dupdb/' -
DB_NAME必须设为目标库名(如dupdb),不能和源库一样;否则启动辅助实例时会报ORA-01276(无法添加文件,因 DB_NAME 冲突)
连接串和口令文件必须严格匹配,尤其跨主机时
RMAN TARGET 连源库、AUXILIARY 连目标库,这两个连接背后都依赖 ORACLE_SID 和口令文件。常见失败点是:辅助实例能 startup nomount,但 RMAN 报 ORA-01031: insufficient privileges 或直接断连。
- 口令文件名必须为
orapw<sid></sid>(如orapwdupdb),且内容需与源库orapw<source_sid></source_sid>完全一致(scp复制即可,不要重建) - 辅助实例的
listener.ora必须配静态注册,SID_LIST_LISTENER里包含目标SID,否则RMAN连不上AUXILIARY - 检查
TNSNAMES.ORA:源库连接串(TARGET)和辅助库连接串(AUXILIARY)都应能独立sqlplus /@xxx成功,且用户必须是SYSDBA
执行 DUPLICATE 命令时别漏掉关键子句
一个看似简单的命令,少一个子句就可能让克隆中途失败或生成不可用库。特别是 12c 的 CDB/PDB 环境,FROM ACTIVE DATABASE 默认只克隆 CDB,PDB 不会自动带过来。
- 基础命令必须含:
DUPLICATE DATABASE TO dupdb FROM ACTIVE DATABASE PASSWORD FILE SPFILE NOFILENAMECHECK;
——PASSWORD FILE表示复制口令文件,SPFILE表示从内存生成新 SPFILE,NOFILENAMECHECK关闭文件名校验(同主机必加) - 若克隆的是 PDB,得先在源库用
ALTER PLUGGABLE DATABASE pdb_old CLOSE;,再在目标端用CREATE PLUGGABLE DATABASE ... FROM ...@link,RMAN DUPLICATE不支持直接克隆单个 PDB - 想跳过某个表空间(如临时表空间或测试专用表空间):加
SKIP TABLESPACE TEMP, EXAMPLE,但要确保这些表空间不被其他对象依赖,否则报ORA-19573(无法获取数据文件独占锁)
真正容易被忽略的是:克隆完成后,辅助库虽然 OPEN,但它的 DBID 已重置,所有 RMAN 备份记录都无效;如果你后续要用 RMAN 管理这个库,必须立刻执行 BACKUP DATABASE PLUS ARCHIVELOG 建立新备份链——否则下次 RESTORE 会找不到匹配的备份集。











