rman跨平台迁移必须先确认字节序与平台兼容性,严格匹配v$transportable_platform中的platform_name,数据库须open read only,convert database不生成控制文件,需手动重建并执行recover using backup controlfile。

RMAN跨平台迁移不是“备份+还原”就能跑通的事,必须先确认字节序和平台兼容性,否则CONVERT DATABASE会静默失败或报ORA-19504/ORA-19870。
检查源与目标平台是否支持直接转换
Oracle只允许在v$transportable_platform中列出的、且字节序(endian format)相同的平台间用CONVERT DATABASE。Windows和Linux x86_64都是Little Endian,可直转;但AIX(Big Endian)→Linux就必须先用DBMS_FILE_TRANSFER或Data Pump中转。
- 在源库执行:
SELECT platform_name, endian_format FROM v$transportable_platform WHERE platform_name IN ('Linux x86 64-bit', 'Microsoft Windows x64'); - 若结果中
endian_format不一致,CONVERT DATABASE命令不会报错,但生成的文件无法在目标端CREATE CONTROLFILE或STARTUP MOUNT - 注意:平台名必须完全匹配,
'Linux x86 64-bit'不能写成'Linux x86-64'或大小写混用
数据库必须处于READ ONLY状态才能执行CONVERT
很多人卡在RMAN-06026: some targets not found - aborting restore,其实是因为没真正打开为只读——OPEN READ ONLY是硬性前提,MOUNT或OPEN都不行。
- 正确顺序:
SHUTDOWN IMMEDIATE→STARTUP MOUNT→ALTER DATABASE OPEN READ ONLY - 验证:
SELECT open_mode FROM v$database;输出必须是READ ONLY - 如果误用
ALTER DATABASE OPEN(非只读),RMAN执行CONVERT DATABASE时会报ORA-12720: operation requires database to be in read-only mode
CONVERT DATABASE命令的关键参数不能省略
CONVERT DATABASE不是简单复制文件,它要重写数据块头、校验和、字典元数据,所以路径、平台名、新DB名三者缺一不可。
- 必须指定
NEW DATABASE(目标库名,非实例名),且该名需与后续CREATE CONTROLFILE中一致 -
FORMAT路径必须有写权限,且空间足够容纳所有数据文件(含临时文件重做后的副本) -
TO PLATFORM值必须来自v$transportable_platform的platform_name列,不能靠记忆拼写 - 示例:
CONVERT DATABASE NEW DATABASE 'ORCL' TO PLATFORM 'Linux x86 64-bit' FORMAT '/u01/convert/%U';
目标端还原后必须重建控制文件或使用transport script
RMAN CONVERT DATABASE不生成控制文件或重做日志,只转换数据文件。目标端不能直接STARTUP,必须走transport流程。
- 推荐方式:命令中加
TRANSPORT SCRIPT '/tmp/transport.sql',它会生成含CREATE CONTROLFILE语句的脚本 - 手动方式:用转换后的数据文件,在目标端
STARTUP NOMOUNT,再运行CREATE CONTROLFILE(注意RESETLOGS和NOARCHIVELOG选项) - 切记:
SWITCH DATABASE TO COPY在目标端无效——那是用于同平台RESTORE场景,跨平台转换后路径已由CONVERT固化,无需再切换
最容易被忽略的是字符集和DB_BLOCK_SIZE:即使平台和字节序都对,源库用AL32UTF8而目标库默认WE8ISO8859P1,或块大小从8K改成16K,CREATE CONTROLFILE阶段就会报ORA-01092并强制中断实例。这些必须在拷贝前比对v$database和v$parameter确认。











