CONVERT DATABASE必须在OPEN READ ONLY状态下执行,否则报RMAN-06136或ORA-01126;TO PLATFORM值须严格匹配V$TRANSPORTABLE_PLATFORM.PLATFORM_NAME;不生成控制文件,需手动重建并执行RECOVER DATABASE USING BACKUP CONTROLFILE。
CONVERT DATABASE 必须在源库 OPEN READ ONLY 状态下执行,否则直接报 RMAN-06136 或底层 ORA-01126;它不生成控制文件,也不能跳过手动重建这步——这是绝大多数人迁移失败的根源。
为什么 CONVERT DATABASE 总是报 RMAN-06136
这不是权限或路径问题,是数据库状态错了。rman 需要读取数据字典里的表空间名、文件路径、块大小等元信息,这些只在 open read only 下稳定可读。mount 状态下 rman 解析不了 db_file_name_convert 中的源路径,会报 rman-03002 并附带模糊提示。
- 正确顺序只能是:
SHUTDOWN IMMEDIATE→STARTUP MOUNT→ALTER DATABASE OPEN READ ONLY - 如果应用连接未断开、有未提交事务,
OPEN READ ONLY会失败,必须先清理会话 - 不能用
STARTUP RESTRICT或FORCE替代——RMAN 不认这些状态
TO PLATFORM 的值怎么填才不静默失败
TO PLATFORM 不是操作系统简称,也不是你凭经验写的缩写,必须严格匹配 V$TRANSPORTABLE_PLATFORM.PLATFORM_NAME 的完整字符串,大小写、空格、括号、连字符一个都不能少。
- 在源库执行:
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'(大小写+空格+连字符全错)、'Windows 64'(漏Microsoft和x64后缀) - 如果目标平台没出现在查询结果里,说明 Oracle 不支持该组合,
CONVERT DATABASE直接不可用
转换后为什么 STARTUP 报 ORA-01113 或 ORA-01244
CONVERT DATABASE 只处理 .dbf 数据文件,完全不碰控制文件、重做日志、临时文件、密码文件。你拿到的只是一堆转换好的数据文件 + 一个 transport.sql 脚本 + 一个 PFILE。
- 必须提前在目标主机创建所有目录:
$ORACLE_BASE/admin/$ORACLE_SID、oradata、fast_recovery_area等 - 用
transport.sql中的CREATE CONTROLFILE语句重建控制文件,注意把所有DATAFILE和LOGFILE路径改成目标主机的实际路径 - 重建后必须立即执行:
RECOVER DATABASE USING BACKUP CONTROLFILE,否则控制文件和数据文件 SCN 对不上 - 漏掉
RECOVER这步,就一定会卡在ORA-01113(文件需要恢复)
别用 CONVERT DATABASE 的三种典型场景
它不是万能钥匙。以下情况建议改用 BACKUP FOR TRANSPORT DATABASE 或分表空间 CONVERT DATAFILE:
- 源和目标
ENDIAN_FORMAT不同(如 Linux → AIX):此时CONVERT DATABASE不被支持,只能用CONVERT DATAFILE在目标端逐个转换 - 只想迁移部分业务表空间:用
CONVERT TABLESPACE更轻量、影响更小 - 无法将源库置为
OPEN READ ONLY(如生产库不能停写):只能走 Data Pump +BACKUP FOR TRANSPORT组合方案
跨平台迁移最易被忽略的点,从来不是命令怎么写,而是控制文件重建后忘了 RECOVER DATABASE USING BACKUP CONTROLFILE——这一步没有输出,但缺了它,数据库永远启不来。











