rman convert database 是唯一安全的全库跨平台迁移机制,必须在 open read only 状态下执行,需严格匹配 v$transportable_platform 中的 platform_name,不生成控制文件须手动重建,并注意跨 endian 时仅支持 convert datafile。
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 用户有写权限,否则报ORA-19504
跨 Endian 平台不能用 CONVERT DATABASE,只能 CONVERT DATAFILE 或 TABLESPACE
当源和目标平台 ENDIAN_FORMAT 不同(比如 x86_64 Linux ←→ SPARC AIX),CONVERT DATABASE 命令不可用,Oracle 仅允许按表空间或单个数据文件粒度转换。
- 确认是否跨 Endian:
SELECT PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM WHERE PLATFORM_NAME IN ('Linux x86 64-bit', 'AIX-Based Systems (64-bit)'); - 此时必须用:
CONVERT DATAFILE ... TO PLATFORM 'AIX-Based Systems (64-bit)' FORMAT '/path/to/converted.dbf'; - 每个数据文件都要单独指定,且对应表空间需先
OFFLINE或置于只读状态,否则报ORA-19570 - 转换完成后,目标库需手工
SWITCH DATAFILE并RECOVER,流程比全库转换繁琐得多
真正难的不是命令怎么写,而是判断「要不要转」和「在哪转」——平台兼容性查漏、外部对象(DBMS_TDB.CHECK_EXTERNAL)、字节序匹配、控制文件重建时机,这几处出错几乎占了实际迁移故障的 90%。别急着敲 CONVERT,先跑完检查再动手。











