rman convert database 是唯一安全的全库跨平台迁移机制,必须在 open read only 状态下执行,需严格匹配 v$transportable_platform 中的 platform_name,不生成控制文件须手动重建,并注意跨 endian 时仅支持表空间级转换。

RMAN CONVERT DATABASE 是唯一能安全完成全库跨平台迁移的机制,其他方式(如直接拷贝 .dbf、restore 备份集)在异构平台下必然失败。
CONVERT DATABASE 必须在 OPEN READ ONLY 状态下执行
很多人卡在 RMAN-06136 或 ORA-01126,根本原因是误在 MOUNT 或 OPEN READ WRITE 下运行命令。RMAN 需要读取数据字典获取表空间路径、文件名、块大小等元信息,而这些只有在只读打开状态下才稳定可读。
- 正确顺序是:
SHUTDOWN IMMEDIATE→STARTUP MOUNT→ALTER DATABASE OPEN READ ONLY - 不能跳过
OPEN READ ONLY;CONVERT DATABASE在MOUNT下会报RMAN-03002并附带模糊提示 - 如果数据库有活跃事务或未提交变更,
OPEN READ ONLY会失败,需先清理应用连接
TO PLATFORM 值必须严格匹配 V$TRANSPORTABLE_PLATFORM
平台字符串不是操作系统简称,而是视图中 PLATFORM_NAME 列的完整值,大小写、空格、括号、连字符全部敏感。写错一个字符就会静默失败或报 RMAN-06004/ORA-19575。
- 查可用平台:
SELECT PLATFORM_NAME FROM V$TRANSPORTABLE_PLATFORM WHERE ENDIAN_FORMAT = (SELECT ENDIAN_FORMAT FROM V$DATABASE); - 常见合法值示例:
Linux x86 64-bit、Microsoft Windows x64、AIX-Based Systems (64-bit) -
Linux x86_64、linux x8664-bit、Windows 64全部非法 - 若目标平台不在查询结果中,说明 Oracle 不支持该组合,别浪费时间试了
CONVERT DATABASE 不生成控制文件,必须手动重建
这是最容易被忽略的致命点。命令输出只有转换后的数据文件(.dbf)、一个 transport script(crdb.sql)和一个 PFILE,但不包含控制文件、重做日志、临时文件、密码文件。目标库没有控制文件就无法启动。
- 推荐替代方案:在源库用
BACKUP FOR TRANSPORT DATABASE,它会自动打包控制文件快照 + 转换脚本 - 若已用
CONVERT DATABASE,必须在目标端用 transport script 中的CREATE CONTROLFILE语句重建,且注意修改所有LOGFILE和DATAFILE路径为 Linux/Windows 实际路径 - 重建后需执行
RECOVER DATABASE USING BACKUP CONTROLFILE,否则报ORA-01113或ORA-01244 -
DB_FILE_NAME_CONVERT参数指定的目录必须提前创建,并确保 Oracle 用户有写权限,否则转换过程会中断
跨 Endian 平台时仅支持 CONVERT DATAFILE
当源与目标平台字节序不同(比如从 Linux x86 64-bit → AIX),CONVERT DATABASE 会被拒绝,因为全库转换不支持跨 Endian。此时只能退回到表空间级迁移,用 CONVERT TABLESPACE 逐个处理。
- 先确认字节序:
SELECT ENDIAN_FORMAT FROM V$DATABASE; - 跨 Endian 时,
CONVERT DATABASE会直接报错,不会尝试执行 - 必须改用 XTTS(Cross Platform Transportable Tablespaces)流程,依赖增量备份 +
rman_xttconvert_v3.zip脚本 - XTTS 要求源库开启块改变跟踪(
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING),且目标端需打补丁(如 11.2.0.4+ 的 BP28)
真正容易出问题的地方不在命令本身,而在状态判断和路径一致性——比如 OPEN READ ONLY 是否真生效、crdb.sql 里写的路径是否和目标系统实际目录结构一致、DB_FILE_NAME_CONVERT 中的斜杠方向(Windows 用反斜杠要转义)是否被忽略。这些细节一旦漏掉,整个迁移会在最后一步启动失败,而错误日志往往不直接指向根源。











