CONVERT DATABASE命令必须在OPEN READ ONLY状态下执行,否则报RMAN-06136;TO PLATFORM值须严格匹配V$TRANSPORTABLE_PLATFORM中的PLATFORM_NAME;该命令不生成控制文件,需手动重建;db_file_name_convert的目标路径必须预先创建并具备写权限。
CONVERT DATABASE必须在只读库上执行,否则报RMAN-06136
oracle 19c 的 convert database 命令要求源数据库处于 open read only 状态,不是 mount,也不是 open。如果数据库是读写模式,rman 会直接拒绝执行并抛出 rman-06136: ora-01126: database must be mounted in exclusive mode and not open for this operation(实际错误码可能为 rman-06136 或底层 ora-01126)。这是因为转换过程需确保数据文件不被修改,同时允许 rman 读取数据字典获取表空间、文件路径等元信息。
正确操作顺序是:
SHUTDOWN IMMEDIATESTARTUP MOUNTALTER DATABASE OPEN READ ONLY
注意:不能跳过 OPEN READ ONLY 直接在 MOUNT 下运行 CONVERT DATABASE —— 这会导致 RMAN 无法解析 DB_FILE_NAME_CONVERT 中的源路径,报错 RMAN-03002: failure of convert command 并附带模糊提示。
TO PLATFORM值必须严格匹配V$TRANSPORTABLE_PLATFORM输出
CONVERT DATABASE ... TO PLATFORM 'xxx' 中的平台字符串不是操作系统名称,也不是随意缩写,而是 V$TRANSPORTABLE_PLATFORM 视图中 PLATFORM_NAME 列的**完整精确值**,包括大小写、空格、括号和连字符。例如 Linux x86 64-bit 不能写成 Linux x86_64 或 linux x8664-bit,否则 RMAN 会静默失败或报 RMAN-06004: ORA-19575: file size unknown 类似错误。
务必在源库中执行:
SELECT PLATFORM_NAME FROM V$TRANSPORTABLE_PLATFORM WHERE PLATFORM_NAME LIKE '%Linux%64%';
常见合法值示例:
Linux x86 64-bitAIX-Based Systems (64-bit)Solaris Operating System (x86-64)
如果目标平台不在该视图中返回结果里,说明 Oracle 不支持该平台组合,CONVERT DATABASE 无法使用。
CONVERT DATABASE不生成控制文件,必须手动重建
CONVERT DATABASE 只处理数据文件(.dbf),它**完全忽略**控制文件、重做日志、临时文件、密码文件和参数文件。迁移后目标主机上只有转换好的数据文件,没有可启动的控制文件 —— 这是最容易被忽略的关键点。
后续必须手动操作:
- 用源库的
CREATE CONTROLFILE脚本(从trace或ALTER DATABASE BACKUP CONTROLFILE TO TRACE获取)修改路径,指向目标主机上的新数据文件位置 - 在目标端用
sqlplus / as sysdba执行该脚本重建控制文件 - 执行
RECOVER DATABASE USING BACKUP CONTROLFILE(因无归档,通常需UNTIL CANCEL+ALTER DATABASE OPEN RESETLOGS)
遗漏这一步,即使所有数据文件都已转换完毕,STARTUP 也会卡在 ORACLE instance started 后无响应,或报 ORA-00205: error in identifying control file。
db_file_name_convert路径必须是目标主机上的真实可写目录
db_file_name_convert 参数不是正则替换,而是简单前缀替换。例如:db_file_name_convert '/u01/oradata/src/', '/u01/oradata/tgt/' 表示把所有源路径中以 /u01/oradata/src/ 开头的部分,替换成 /u01/oradata/tgt/。
关键限制:
- 目标路径(即替换后的路径)所在目录**必须已存在**,RMAN 不创建父目录
- 目标路径需有 Oracle 用户(如
oracle)的写权限,否则报RMAN-03009: failure of backup command on ORA_DISK_1 channel,实际原因藏在alert.log里的ORA-27040: file create error - 不能用通配符或变量,如
$ORACLE_BASE会被当作字面量处理,导致路径错误
建议提前在目标主机执行:mkdir -p /u01/oradata/tgt/ && chown oracle:oinstall /u01/oradata/tgt/,再运行 RMAN 命令。











