rman-xttconvert_2.0工具包专为Oracle跨平台表空间迁移(XTTS)设计,解决手工执行CONVERT DATAFILE、增量追平、元数据切换等繁琐操作问题,通过脚本化封装实现TB级数据在数小时内完成迁移,显著压缩停机窗口。

Oracle 12c 中用 TTS 加速迁移,核心不是“能不能用”,而是“要不要绕开字节序转换”——跨平台必须用 RMAN CONVERT,同平台可直接拷贝数据文件,停机时间能压到分钟级。
确认源库和目标库是否支持 TTS 且字节序兼容
不检查这一步,后续所有操作都可能卡在 ORA-19563 或导入时报 “datafile is not transportable”。先连源库执行:
SELECT platform_name, endian_format FROM v$database, v$transportable_platform WHERE v$database.platform_name = v$transportable_platform.platform_name;
再查目标库是否在 v$transportable_platform 列表里,且 endian_format 一致。若不一致(比如源是 AIX、目标是 Linux),就必须走 RMAN 的 CONVERT DATAFILE 流程,不能跳过。
- 11g/12c/19c 都支持 TTS,但 12c 起支持
COMPATIBLE >= 12.0下的 PDB 级别传输,更灵活 - 字符集必须相同或超集关系(如源是 AL32UTF8,目标是 AL32UTF8 或 ZHS16GBK 不行)
-
SYSTEM、SYSAUX、UNDO表空间不能传,只能传用户自定义表空间
导出前必须将表空间设为 READ ONLY
这是 TTS 最容易被忽略的硬性前提。即使只读窗口很短,也得执行:
ALTER TABLESPACE users READ ONLY;
否则 expdp 会报 ORA-39123:“Data Pump transportable tablespace job does not support non-read-only tablespaces”。注意:
- 临时表空间(
TEMP)、撤销表空间(UNDOTBS1)不需要也不允许设为只读 - 如果表空间里有未提交事务,
ALTER ... READ ONLY会 hang 住,需先查v$transaction并协调业务 - 12c 中支持在线重命名数据文件,但 TTS 过程中不建议混用,避免
ORA-01516报错
expdp 使用 TRANSPORTABLE=ALWAYS 模式导出
不要用默认模式,必须显式指定参数,否则导出的是逻辑数据而非元数据描述文件:
expdp '/ as sysdba' \ DUMPFILE=tts_export.dmp \ DIRECTORY=data_pump_dir \ TRANSPORTABLE=ALWAYS \ TABLESPACES=users,example \ LOGFILE=exp_tts.log
这个命令不会导出表空间数据文件,只生成一个 .dmp 文件(含对象定义、约束、权限等元数据),真正要拷的是数据文件本身(如 users01.dbf)。关键点:
-
DIRECTORY必须指向本地磁盘路径,不能是 ASM —— ASM 需先用ASMCMD cp拷到文件系统 - 导出完成后,立刻执行
ALTER TABLESPACE ... READ WRITE,否则业务长时间中断 - 若表空间含 XMLType 或 SecureFile LOB,需额外检查
DBMS_TTS.TRANSPORT_SET_CHECK是否通过
impdp 导入时常见失败场景与绕过方式
导入阶段出错最多,典型如 ORA-19625(找不到数据文件)、ORA-39122(表空间名冲突)、ORA-39083(索引重建失败)。应对策略:
- 确保目标库已创建同名目录对象(
CREATE DIRECTORY data_pump_dir AS '/u01/dump';),且GRANT READ,WRITE ON DIRECTORY给system - 用
REMAP_TABLESPACE映射源表空间名到目标端实际名,避免硬依赖原名:REMAP_TABLESPACE=users:users_tts - 若目标库已有同名用户,加
REMAP_SCHEMA防覆盖;若不想重建索引,加SKIP_UNUSABLE_INDEXES=Y - 导入后务必运行
SELECT * FROM transport_set_violations;检查隐含约束违规(如引用了不可传的类型)
真正耗时的从来不是导出导入命令本身,而是数据文件拷贝和 RMAN 转换环节。跨平台迁移时,RMAN CONVERT 占整个停机窗口 70% 以上,这部分没法省——别信“跳过校验就能快”的说法,漏掉字节序检查,挂载后第一次打开就 ORA-01122。


















