Oracle 数据库迁移到云
Oracle 数据库迁移到云
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
数据库迁移到云的方案[1]:
方案:
- Zero Downtime Migration (ZDM)
- Data Pump
- GoldenGate
- RMAN
- Cross-Platform Transportable
详细见:Oracle 零停机迁移方案。
2. 迁移方式选择
| 方式 | 停机时间 | 数据量 | 跨平台 |
|---|---|---|---|
| ZDM | 零 | 任意 | 是 |
| GoldenGate | 零 | 任意 | 是 |
| Data Pump | 长 | 中小 | 是 |
| RMAN | 中 | 大 | 否 |
| TTS | 中 | 大 | 是 |
3. Zero Downtime Migration (ZDM)
3.1 概述
- Oracle 官方工具
- 物理迁移
- 零停机
3.2 准备
# 1. 安装 ZDM
$ZDM_HOME/bin/zdmcli install ...
# 2. 配置源/目标
3.3 执行
# 评估
$ZDM_HOME/bin/zdmcli migrate database \
-sourcesid orcl \
-sourcenode source-host \
-targetnode target-host \
-rsp /tmp/zdm.rsp \
-eval
# 执行
$ZDM_HOME/bin/zdmcli migrate database \
-sourcesid orcl \
-sourcenode source-host \
-targetnode target-host \
-rsp /tmp/zdm.rsp
3.4 切换
- ZDM 提示切换
- 应用切换到目标
- 业务恢复
4. GoldenGate
4.1 概述
- 实时复制
- 零停机
- 异构
4.2 架构
源 → Extract → Pump → Replicat → 目标
4.3 配置
# 1. 源启用补充日志
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
# 2. Extract
ADD EXTRACT ext1, TRANLOG, BEGIN NOW
ADD EXTTRAIL ./dirdat/lt, EXTRACT ext1
# 3. Pump
ADD EXTRACT pump1, EXTTRAILSOURCE ./dirdat/lt
ADD RMTTRAIL ./dirdat/rt, EXTRACT pump1
# 4. Replicat
ADD REPLICAT rep1, EXTTRAIL ./dirdat/rt
5. Data Pump
5.1 适用
- 中小数据量
- 跨平台
- 停机可接受
5.2 导出
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=full.dmp
FULL=Y PARALLEL=8 COMPRESSION=ALL
5.3 传输
# 上传到对象存储
oci os object put --bucket-name migration --file full.dmp
# 或 scp
scp full.dmp target-host:/tmp/
5.4 导入
impdp system/pwd DIRECTORY=dpump_dir DUMPFILE=full.dmp
FULL=Y PARALLEL=8 TABLE_EXISTS_ACTION=REPLACE
详细见:Oracle Data Pump 详解。
6. RMAN 跨平台
6.1 14c+
-- 1. 备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
-- 2. CONVERT
RMAN> CONVERT DATABASE
NEW DATABASE 'orcl'
TRANSPORT SCRIPT '/tmp/transport.sql'
TO PLATFORM 'Linux x86 64-bit';
6.2 跨 Endian
-- Endian 不同的平台
RMAN> CONVERT DATAFILE '/u01/oradata/users01.dbf'
FROM PLATFORM 'Solaris[tm] OE (64-bit)'
TO PLATFORM 'Linux x86 64-bit'
FORMAT '/u01/oradata/converted/users01.dbf';
7. TTS(Transportable Tablespace)
7.1 适用
- 大数据量
- 跨平台
- 减少停机
7.2 步骤
-- 1. 自包含检查
BEGIN
DBMS_TTS.TRANSPORT_SET_CHECK('users, tools', TRUE);
END;
/
SELECT * FROM transport_set_violations;
-- 2. READ ONLY
ALTER TABLESPACE users READ ONLY;
-- 3. 导出元数据
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=tts.dmp
TRANSPORT_TABLESPACES=users TRANSPORT_FULL_CHECK=Y
-- 4. 复制数据文件到目标
-- 5. CONVERT(跨 Endian)
RMAN> CONVERT DATAFILE '...' FROM PLATFORM '...' TO PLATFORM '...' FORMAT '...';
-- 6. 导入
impdp system/pwd DIRECTORY=dpump_dir DUMPFILE=tts.dmp
TRANSPORT_DATAFILES='/u01/oradata/users01.dbf'
-- 7. READ WRITE
ALTER TABLESPACE users READ WRITE;
详细见:Oracle TTS 传输表空间。
8. 备份迁移
8.1 RMAN Backup
# 1. 备份源
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
# 2. 传输备份
scp backup-* target-host:/u01/backup/
# 3. 恢复
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
9. 迁移到 OCI Autonomous
9.1 ZDM
$ZDM_HOME/bin/zdmcli migrate database \
-target cloud \
-tdb Autonomous \
...
9.2 Data Pump
# 上传到对象存储
oci os object put --bucket-name migration --file full.dmp
# Autonomous 导入
# Console → Data Pump Import
9.3 GoldenGate
- 源 → GoldenGate Hub → Autonomous
- 实时
详细见:Oracle Cloud 部署。
10. 验证
10.1 数据完整性
-- 行数
SELECT 'EMPLOYEES', COUNT(*) FROM employees
UNION ALL
SELECT 'DEPARTMENTS', COUNT(*) FROM departments;
-- 对象数
SELECT COUNT(*) FROM dba_objects;
-- 字符集
SELECT * FROM nls_database_parameters;
10.2 业务测试
- 应用连接
- 业务流程
- 性能测试
10.3 性能对比
@?/rdbms/admin/awrddrpt.sql
详细见:Oracle 数据库升级性能评估。
11. 回滚
11.1 ZDM
# 回滚
$ZDM_HOME/bin/zdmcli migrate database -jobid <id> -rollback
11.2 GoldenGate
- 反向复制
- 切换回源
11.3 其他
- 备份恢复
- Flashback
12. 常见坑与排错
12.1 数据不一致
- 同步延迟
- 字符集
- 时区
12.2 性能问题
- 网络延迟
- I/O 差异
- 参数调整
12.3 字符集
-- 源
SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';
-- 目标
-- 必须一致
13. 最佳实践
- 测试环境验证:先
- ZDM 推荐:自动化
- GoldenGate 零停机:大型
- Data Pump 简单:中小
- TTS 大数据:跨平台
- 业务低峰:影响小
- 回滚预案:必备
- 数据验证:完整
- 性能测试:对比
- 文档化:流程
14. 参考资料
[1] Oracle Cloud Infrastructure Database Migration Guide https://docs.oracle.com/en/cloud/paas/database-migration/