必须用RMAN CONVERT做字节序转换,TO PLATFORM值须严格匹配V$TRANSPORTABLE_PLATFORM中目标平台的完整字符串,表空间须先设为READ ONLY并验证无传输违规,增量备份也需逐个转换,转换后应在目标端校验文件头平台标识。

必须用 RMAN CONVERT 在源端或目标端做字节序转换,不能跳过这步直接拷文件。
CONVERT DATAFILE 必须指定准确的 TO PLATFORM 值
TO PLATFORM 不是操作系统简称,而是 V$TRANSPORTABLE_PLATFORM 中的完整字符串。写错一个空格或大小写,RMAN 就会静默生成无效文件,后续在目标端报 ORA-19563(文件头校验失败)或 RMAN-06004(平台不支持)。
- 查准命令:在源库执行
SELECT PLATFORM_NAME FROM V$TRANSPORTABLE_PLATFORM WHERE ENDIAN_FORMAT = (SELECT ENDIAN_FORMAT FROM V$DATABASE),只取该结果集里目标平台那一行的完整值 - 常见合法值示例:
'Linux x86 64-bit'、'AIX-Based Systems (64-bit)'、'HP-UX IA (64-bit)'—— 单引号、空格、括号、连字符都必须一致 - 不能写成:
'linux x86_64'、'Linux x86-64'、'Linux x8664-bit'
转换前表空间必须设为 READ ONLY
CONVERT DATAFILE 或 CONVERT TABLESPACE 命令依赖稳定的元数据快照。如果表空间仍为读写状态,RMAN 无法安全读取段头、文件编号等关键信息,后续在目标端大概率触发 ORA-01122(数据库文件验证失败)或 ORA-19566(损坏块超限)。
- 先运行
exec dbms_tts.transport_set_check('TBS_NAME', TRUE),确认TRANSPORT_SET_VIOLATIONS视图为空 - 再执行
ALTER TABLESPACE tbs_name READ ONLY;若应用连接未断,该语句会卡住,需提前kill相关 session - 转换完成后可立即切回读写:
ALTER TABLESPACE tbs_name READ WRITE(仅限源库)
增量追平阶段容易忽略字节序一致性
全量转换完只是第一步。如果迁移窗口长、业务持续写入,就必须走增量备份追平流程。但很多人忘了:**每次增量备份也必须在目标平台字节序下转换**,否则最后应用时会因块格式不匹配而失败。
- 增量备份本身不带字节序信息,
CONVERT是独立操作;不能只对全量文件做一次转换就以为万事大吉 - 推荐用
rman-xttconvert_2.0工具包自动管理增量转换脚本,它会按properties配置中定义的platform_name自动拼出正确TO PLATFORM - 手动操作时,每个增量备份片都要单独执行
CONVERT DATAFILE ... TO PLATFORM 'xxx' FORMAT ...,别漏掉
真正卡住人的不是“会不会转”,而是“转完的文件到底是不是目标平台能认的”。最稳妥的做法:在目标端用 strings 扫描转换后文件头前 100 字节,确认出现目标平台标识字符串(如 Linux 或 AIX),而不是源平台残留痕迹。


















