CONVERT DATABASE必须在OPEN READ ONLY状态下执行,否则报RMAN-06136或ORA-01126;平台名须严格匹配V$TRANSPORTABLE_PLATFORM.PLATFORM_NAME;不生成控制文件,需手动重建并执行RECOVER DATABASE USING BACKUP CONTROLFILE。
必须在 open read only 状态下执行 convert database,否则直接报 rman-06136;平台名必须一字不差匹配 v$transportable_platform.platform_name;控制文件不会被生成,必须手动重建。
为什么 CONVERT DATABASE 总是报 RMAN-06136 或 ORA-01126
这不是权限或路径问题,而是数据库状态错了。RMAN 需要读取数据字典里的表空间、文件路径、块大小等元信息,这些只有在 OPEN READ ONLY 下才稳定可读。很多人误以为 MOUNT 就够了,结果 RMAN 在 MOUNT 下根本解析不了 DB_FILE_NAME_CONVERT 中的源路径,报错 RMAN-03002 并附带模糊提示。
正确顺序只能是:
SHUTDOWN IMMEDIATESTARTUP MOUNTALTER DATABASE OPEN READ ONLY
如果应用连接未断开、有未提交事务,OPEN READ ONLY 会失败 —— 这时得先清理会话,不能硬上。
TO PLATFORM 'xxx' 的值怎么填才不报 RMAN-06004
它不是操作系统名称,也不是你凭经验写的缩写。必须从源库查:
SELECT PLATFORM_NAME FROM V$TRANSPORTABLE_PLATFORM WHERE ENDIAN_FORMAT = (SELECT ENDIAN_FORMAT FROM V$DATABASE);
返回结果里哪个值就用哪个,大小写、空格、括号、连字符一个都不能少。例如:
- ✅
Linux x86 64-bit - ❌
linux x86_64(大小写错 + 缺空格 + 缺连字符) - ❌
Windows x64(漏了Microsoft和ia (32-bit)或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(文件需要恢复)或 ORA-01244(控制文件未命名)。
DB_FILE_NAME_CONVERT 目录没写权限会怎样
RMAN 不会提前校验,而是在转换过程中逐个写入目标路径时失败,报错类似 ORA-27040: file create error 或静默跳过部分文件,最终导致目标端数据文件缺失或不全。
务必确保:
- 目标路径已
mkdir -p创建完毕 - Oracle OS 用户对该路径有
rwx权限(不是仅 root 可写) - 如果用了 ASM,
DB_FILE_NAME_CONVERT必须指向 ASM diskgroup,且用户有对应权限
跨平台迁移最易忽略的其实是控制文件重建后的路径修正和 recover 步骤 —— 很多人看到 transport.sql 就以为万事大吉,结果启动时才发现控制文件里还写着源库的 Windows 路径或者没执行 recover。











