必须在目标端用RMAN CONVERT DATAFILE做字节序转换,因跨endian平台(如Linux小端→AIX大端)不转换会导致ORA-01194或块校验失败;判断依据是比对V$DATABASE与V$TRANSPORTABLE_PLATFORM中ENDIAN_FORMAT是否不同。
必须在目标端用 rman convert datafile 做字节序转换,源端 convert tablespace 仅适用于同 endian 平台或你明确控制源库状态的场景;跨 endian 时跳过这步,目标库启动必报 ora-01194 或块校验失败。
怎么判断要不要做字节序转换
查源库和目标平台的 ENDIAN_FORMAT 是否一致,不看操作系统名,只看 V$TRANSPORTABLE_PLATFORM 中的完整字符串:
- 在源库执行:
SELECT PLATFORM_NAME, ENDIAN_FORMAT FROM V$DATABASE; - 在目标库(或任意 19c 实例)执行:
SELECT PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM WHERE PLATFORM_NAME IN ('Linux x86 64-bit', 'AIX-Based Systems (64-bit)', 'Microsoft Windows x64'); - 如果二者
ENDIAN_FORMAT不同(如源是Little、目标是Big),就必须用CONVERT DATAFILE;相同则可跳过转换,但TO PLATFORM仍需显式指定
RMAN CONVERT DATAFILE 在目标端执行的硬性要求
命令必须在目标主机上、以目标库实例为 TARGET 运行,且以下三项参数一个都不能错:
-
FROM PLATFORM必须严格匹配源库V$DATABASE.PLATFORM_NAME输出值,包括空格、括号、大小写——'Linux x86 64-bit'写成'linux x86_64'就会静默失败 -
TO PLATFORM是目标平台名,不是 OS 名;例如 AIX 系统填'AIX-Based Systems (64-bit)',不是'AIX' -
FORMAT路径必须是目标主机上已存在的目录,RMAN 不创建父级;建议用%U避免重名,如'/u02/oradata/dst/%U'
示例(在目标主机 RMAN 中执行):
RUN {
CONVERT DATAFILE '/tmp/tts_users01.bkp'
FROM PLATFORM 'Linux x86 64-bit'
FORMAT '/u02/oradata/dst/users01.dbf'
TO PLATFORM 'AIX-Based Systems (64-bit)';
}
还原后表空间状态和路径映射的实操坑点
还原完的数据文件只是“躺在磁盘上”,还不能直接 ALTER TABLESPACE ... READ WRITE,必须先解决两件事:
- 数据文件路径要注册进控制文件:用
SET NEWNAME或提前配好DB_FILE_NAME_CONVERT,否则RESTORE TABLESPACE会报ORA-19504 - 表空间默认仍是
READ ONLY,但目标库用户可能需要写权限——别急着改状态,先用IMPDP导入元数据,再统一执行ALTER TABLESPACE ... READ WRITE - 如果用了
BACKUP FOR TRANSPORT生成的备份集,记得它自带一个.dmp元数据文件,导入时必须带上TRANSPORT_DATAFILES参数指向转换后的.dbf路径
最常被跳过的动作是:没确认 DB_RECOVERY_FILE_DEST 空间是否足够存下整个传输集,尤其当用 BACKUP FOR TRANSPORT 时,RMAN 会在该路径下缓存临时文件,空间不足直接卡在 EXPDP 阶段,报 ORA-39002 却不提示根本原因。


















