Oracle 跨平台迁移
Oracle 跨平台迁移
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
跨平台迁移方案[1]:
场景:
- Solaris → Linux
- Windows → Linux
- Big Endian → Little Endian
详细见:Oracle 零停机迁移方案。
2. 平台支持
2.1 查看
SELECT platform_id, platform_name, endian_format
FROM v$transportable_platform
ORDER BY platform_name;
-- 当前平台
SELECT platform_name FROM v$database;
2.2 Endian
| Endian | 平台 |
|---|---|
| Little | Linux x86, Windows |
| Big | Solaris SPARC, AIX, HP-UX |
3. 迁移方式
3.1 同 Endian
- RMAN Backup/Restore
- TTS
- Active Duplicate
3.2 跨 Endian
- TTS + CONVERT
- Data Pump
- GoldenGate
4. RMAN CONVERT
4.1 概述
- 10g+
- 同 Endian 直接
- 跨 Endian CONVERT
4.2 步骤
-- 1. OPEN READ ONLY
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;
-- 2. 检查
RMAN> RUN {
SET NEWNAME FOR DATAFILE 1 TO '/u01/oradata/system01.dbf';
...
CONVERT DATABASE
NEW DATABASE 'orcl'
TRANSPORT SCRIPT '/tmp/transport.sql'
TO PLATFORM 'Linux x86 64-bit';
}
-- 3. 复制文件到目标
-- 4. 执行 transport.sql
5. TTS 跨 Endian
5.1 检查自包含
BEGIN
DBMS_TTS.TRANSPORT_SET_CHECK('users, tools, indexes', TRUE);
END;
/
SELECT * FROM transport_set_violations;
5.2 READ ONLY
ALTER TABLESPACE users READ ONLY;
ALTER TABLESPACE tools READ ONLY;
5.3 导出元数据
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=tts.dmp
TRANSPORT_TABLESPACES=users,tools
TRANSPORT_FULL_CHECK=Y
5.4 CONVERT 数据文件
# 源平台
RMAN> CONVERT DATAFILE
'/u01/oradata/users01.dbf',
'/u01/oradata/tools01.dbf'
TO PLATFORM 'Linux x86 64-bit'
FROM PLATFORM 'Solaris[tm] OE (64-bit)'
DB_FILE_NAME_CONVERT
('/u01/oradata/', '/u01/converted/')
PARALLELISM 4;
5.5 复制到目标
scp /u01/converted/*.dbf target-host:/u01/oradata/
scp tts.dmp target-host:/tmp/
5.6 导入
impdp system/pwd DIRECTORY=dpump_dir DUMPFILE=tts.dmp
TRANSPORT_DATAFILES='/u01/oradata/users01.dbf','/u01/oradata/tools01.dbf'
5.7 READ WRITE
ALTER TABLESPACE users READ WRITE;
ALTER TABLESPACE tools READ WRITE;
详细见:Oracle TTS 传输表空间。
6. Data Pump
6.1 适用
- 跨平台
- 跨版本
- 选择性
6.2 导出
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=full.dmp
FULL=Y PARALLEL=8 COMPRESSION=ALL
6.3 传输
scp full.dmp target-host:/tmp/
6.4 导入
impdp system/pwd DIRECTORY=dpump_dir DUMPFILE=full.dmp
FULL=Y PARALLEL=8
详细见:Oracle Data Pump 详解。
7. GoldenGate 跨平台
7.1 概述
- 实时
- 零停机
- 异构
7.2 架构
源 (Solaris) → Extract → Pump → Replicat → 目标 (Linux)
8. XTTS(Cross-Platform TTS)
8.1 11g RMAN
# 1. 增量备份
RMAN> BACKUP FOR TRANSPORT INCREMENTAL LEVEL 0
FORMAT '/u01/backup/%U'
TABLESPACE users;
# 2. 传输
# 3. 应用
# 4. 增量
# 5. 切换
8.2 12c+
RMAN> BACKUP FOR TRANSPORT INCREMENTAL LEVEL 0
FORMAT '/u01/backup/%U'
TABLESPACE users
PLATFORM 'Linux x86 64-bit';
9. 验证
9.1 字符集
SELECT * FROM nls_database_parameters
WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
9.2 数据
-- 行数对比
SELECT 'EMPLOYEES' AS tab, COUNT(*) FROM employees
UNION ALL
SELECT 'DEPARTMENTS', COUNT(*) FROM departments;
-- 对象
SELECT COUNT(*) FROM dba_objects;
9.3 字节序
-- 确认平台
SELECT platform_name FROM v$database;
10. 字符集注意
10.1 一致
- 源和目标字符集一致
- 推荐 AL32UTF8
10.2 转换
- Data Pump 自动转换
- TTS 必须一致
11. 常见坑与排错
11.1 Endian 不支持
- 检查 v$transportable_platform
- 跨 Endian 必须 CONVERT
11.2 字符集不一致
-- TTS 必须一致
-- Data Pump 自动转换
11.3 自包含违反
-- 检查
SELECT * FROM transport_set_violations;
-- 解决
-- - 包含依赖
-- - 移除依赖
12. 最佳实践
- 平台支持验证:前提
- 同 Endian 直接:简单
- 跨 Endian CONVERT:必须
- TTS 大数据:高效
- XTTS 增量:减少停机
- Data Pump 简单:中小
- GoldenGate 零停机:大型
- 字符集一致:避免问题
- 验证完整性:业务
- 文档化:流程
13. 参考资料
[1] Oracle Database Backup and Recovery User’s Guide 19c, “Cross-Platform” https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/