Oracle TTS 传输表空间详解
Oracle TTS 传输表空间详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
TTS(Transportable Tablespace)跨库传输表空间[1]:
优势:
- 快速
- 跨平台
- 大数据迁移
详细见:Oracle TTS 传输表空间。
2. 适用场景
- 数据库迁移
- 数据仓库加载
- 跨平台
- 数据归档
3. 同平台 TTS
3.1 自包含检查
BEGIN
DBMS_TTS.TRANSPORT_SET_CHECK('users, tools', TRUE);
END;
/
SELECT * FROM transport_set_violations;
3.2 READ ONLY
ALTER TABLESPACE users READ ONLY;
ALTER TABLESPACE tools READ ONLY;
3.3 导出元数据
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=tts.dmp
TRANSPORT_TABLESPACES=users,tools
TRANSPORT_FULL_CHECK=Y
3.4 复制数据文件
scp /u01/oradata/users01.dbf target:/u01/oradata/
scp /u01/oradata/tools01.dbf target:/u01/oradata/
scp tts.dmp target:/tmp/
3.5 导入
impdp system/pwd DIRECTORY=dpump_dir DUMPFILE=tts.dmp
TRANSPORT_DATAFILES='/u01/oradata/users01.dbf','/u01/oradata/tools01.dbf'
3.6 READ WRITE
-- 源
ALTER TABLESPACE users READ WRITE;
ALTER TABLESPACE tools READ WRITE;
-- 目标
ALTER TABLESPACE users READ WRITE;
ALTER TABLESPACE tools READ WRITE;
4. 跨平台 TTS
4.1 查看 Endian
SELECT platform_id, platform_name, endian_format
FROM v$transportable_platform
ORDER BY platform_name;
SELECT platform_name FROM v$database;
4.2 同 Endian
- 直接传输
- 无需 CONVERT
- 如 Linux x86 ↔ Windows x86
4.3 跨 Endian
- 必须 CONVERT
- 如 Solaris SPARC → Linux x86
4.4 CONVERT
-- 源平台
RMAN> CONVERT TABLESPACE users
TO PLATFORM 'Linux x86 64-bit'
FORMAT '/u01/converted/%U';
-- 或目标平台
RMAN> CONVERT DATAFILE
'/u01/oradata/users01.dbf',
'/u01/oradata/tools01.dbf'
FROM PLATFORM 'Solaris[tm] OE (64-bit)'
TO PLATFORM 'Linux x86 64-bit'
DB_FILE_NAME_CONVERT
('/u01/oradata/', '/u01/converted/')
PARALLELISM 4;
详细见:Oracle 跨平台迁移。
5. XTTS(增量)
5.1 概述
- 11g+
- 减少停机
- 增量传输
5.2 步骤
1. 初始全量传输
2. 持续增量传输
3. 业务停机
4. 最后增量
5. 切换
5.3 RMAN
-- 初始
RMAN> BACKUP FOR TRANSPORT INCREMENTAL LEVEL 0
FORMAT '/u01/backup/%U'
TABLESPACE users
PLATFORM 'Linux x86 64-bit';
-- 增量
RMAN> BACKUP FOR TRANSPORT INCREMENTAL LEVEL 1
FORMAT '/u01/backup/%U'
TABLESPACE users
PLATFORM 'Linux x86 64-bit';
6. 自包含
6.1 检查内容
- 索引
- 约束
- 触发器
- 对象依赖
6.2 解决
- 包含依赖对象
- 或移除依赖
- 重试检查
7. 限制
7.1 不可传输
- SYSTEM 表空间
- SYSAUX 表空间
- Undo 表空间
- Temporary 表空间
7.2 对象
- 视图(同义词)
- 存储过程
- 同义词(依赖对象)
7.3 字符集
- 必须一致
- 或源是目标的超集
8. 完整示例
8.1 源库
-- 1. 检查
BEGIN
DBMS_TTS.TRANSPORT_SET_CHECK('users', TRUE);
END;
/
SELECT * FROM transport_set_violations;
-- 2. READ ONLY
ALTER TABLESPACE users READ ONLY;
8.2 导出
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=tts.dmp
TRANSPORT_TABLESPACES=users
TRANSPORT_FULL_CHECK=Y
8.3 传输
scp /u01/oradata/users01.dbf target:/u01/oradata/
scp tts.dmp target:/tmp/
8.4 目标库
impdp system/pwd DIRECTORY=dpump_dir DUMPFILE=tts.dmp
TRANSPORT_DATAFILES='/u01/oradata/users01.dbf'
8.5 验证
-- 1. 表空间状态
SELECT tablespace_name, status FROM dba_tablespaces;
-- 2. 数据
SELECT COUNT(*) FROM scott.employees;
-- 3. READ WRITE
ALTER TABLESPACE users READ WRITE;
8.6 源库恢复
ALTER TABLESPACE users READ WRITE;
9. 12c+ 全库传输
9.1 完整数据库
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=fdb.dmp
FULL=Y
TRANSPORTABLE=ALWAYS
VERSION=19.0
9.2 优势
- 全库传输
- 减少手动
- 跨平台
10. 性能
10.1 数据文件大小
- 文件少
- 大文件
- 复制快
10.2 网络
- 高带宽
- 压缩
- 并行
10.3 I/O
- 直接 I/O
- 异步
- 磁盘分离
11. 验证
11.1 自包含
SELECT * FROM transport_set_violations;
-- 应为空
11.2 Endian
SELECT d.platform_name, p.endian_format
FROM v$database d, v$transportable_platform p
WHERE d.platform_name = p.platform_name;
11.3 字符集
SELECT parameter, value FROM nls_database_parameters
WHERE parameter LIKE '%CHARACTERSET';
12. 常见坑与排错
12.1 ORA-29304
- 表空间不存在
- 检查名字
12.2 ORA-29341
- 自包含违反
- 解决依赖
12.3 ORA-29345
- 字符集不兼容
- 检查字符集
12.4 ORA-39123
- 平台不支持
- 检查 Endian
13. 最佳实践
- 自包含检查:必做
- READ ONLY:必须
- 跨 Endian CONVERT:必须
- 多文件并行:性能
- XTTS 增量:减少停机
- 字符集一致:避免问题
- 验证完整:质量
- 测试:可行
- 文档化:流程
- 业务低峰:影响小
14. 参考资料
[1] Oracle Database Administrator’s Guide 19c, “Transporting Tablespaces” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/transporting-data.html