RMAN DUPLICATE FROM ACTIVE DATABASE 默认极慢且易卡住,因其默认采用image copy模式导致源库I/O与网络双压、空块照传、传输串行;提速需强制backupset模式,即在TARGET和AUXILIARY均连接后配置DEVICE TYPE DISK PARALLELISM并显式ALLOCATE CHANNEL(c1连源库、c2连目标库),同时ADG克隆必须加NOREDO和NOFILENAMECHECK,目标端NOMOUNT前须确保db_unique_name不同、路径存在且权限正确、DB_FILE_NAME_CONVERT等参数配对、密码文件一致,并在pfile中设置STANDBY_FILE_MANAGEMENT=AUTO。
能直接跑通,但默认极慢;提速关键不在参数调优,而在显式控制传输模式和通道分配。
RMAN DUPLICATE FROM ACTIVE DATABASE 为什么一跑就卡住
不是命令写错了,而是 RMAN 默认走 image copy 模式:源库逐块读数据文件、原样发过去。这导致三个硬伤:
- 源库 I/O 和网络带宽双压,尤其千兆以下链路很快打满
- 空块照传不跳过,TB 级库多传几百 GB
- 传输串行,目标端必须等源端读完才开始写,RMAN 日志里能看到明显“等待”间隙
真正可用的路径是启用 backupset 模式——它在源端实时打包、压缩空块、支持并发拉取,且源库只响应请求,I/O 更平滑。
怎么强制 RMAN 走 backupset 模式
两件事缺一不可,漏掉任意一个都会退回 image copy:
- 执行
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;(或更高值),但该配置必须在TARGET和AUXILIARY都连上之后运行,否则只生效于当前连接端 - 显式
ALLOCATE CHANNEL:RMAN 不会自动起多通道,哪怕你配了PARALLELISM 4
正确顺序示例:
RMAN> CONNECT TARGET sys/pwd@src<br>RMAN> CONNECT AUXILIARY sys/pwd@dst<br>RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4;<br>RMAN> ALLOCATE CHANNEL c1 DEVICE TYPE DISK CONNECT 'sys/pwd@src';<br>RMAN> ALLOCATE CHANNEL c2 DEVICE TYPE DISK CONNECT 'sys/pwd@dst';
注意:c1 连源库,c2 连目标库;目标端 listener.ora 中 MAX_PROCESSES 建议 ≥10,否则并发通道会失败。
ADG 备库克隆必须加的两个开关
用 DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE 时,NOREDO 和 NOFILENAMECHECK 不是可选项,是硬性要求:
-
NOREDO:禁用在线日志传输。主库 online redo log 是滚动覆盖的,RMAN 无法可靠抓取;不加会报RMAN-06136: ORA-19505 -
NOFILENAMECHECK:绕过文件路径校验。主备目录结构几乎不可能一致,不加会卡在RMAN-05501或直接退出
完整最小命令片段:
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE<br> DORECOVER<br> NOFILENAMECHECK<br> NOREDO;
目标端 NOMOUNT 实例启动前必须检查的四件事
RMAN 不会帮你建目录、配权限、写参数,这些漏一项就停在第一步:
-
db_unique_name必须与源库不同(db_name可同),否则 RMAN 识别混乱 -
control_files、db_recovery_file_dest指向的路径必须真实存在,且oracle用户有读写权限 -
db_file_name_convert和log_file_name_convert必须配对,格式为'/src/path/', '/dst/path/',结尾斜杠不能少 - 密码文件
orapw<sid>必须存在且内容与源库一致(通常scp过来即可)
最容易被忽略的是 STANDBY_FILE_MANAGEMENT=AUTO —— 它不在 RMAN 命令里,但必须写进目标端 pfile,否则后续主库加数据文件,备库不会自动同步。


















