Oracle 数据库零停机迁移详解
Oracle 数据库零停机迁移详解
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
零停机迁移方案汇总[1]:
详细见:Oracle 零停机迁移方案对比。
2. 方案对比
2.1 GoldenGate
- 实时复制
- 跨平台
- 零停机
- 复杂
2.2 Data Guard
- 物理/逻辑备库
- 同平台
- 几乎零停机
- Switchover
2.3 ZDM
- Oracle Cloud
- 自动化
- 在线迁移
- 简单
2.4 XStream
- GoldenGate 底层
- 集成
- 零停机
3. GoldenGate 迁移
3.1 流程
1. 初始装载(Data Pump / TTS)
2. 启动 Extract(源端)
3. 启动 Replicat(目标)
4. 追平数据
5. 验证
6. 切换应用
7. 停止源端
3.2 初始装载
# Data Pump
expdp scott/tiger DIRECTORY=dp DUMPFILE=full.dmp FULL=Y
impdp scott/tiger DIRECTORY=dp DUMPFILE=full.dmp FULL=Y
详细见:Oracle Data Pump 全集。
3.3 启动复制
# 源端 Extract
> ADD EXTRACT ext1, TRANLOG, BEGIN NOW
> ADD EXTTRAIL ./dirdat/lt, EXTRACT ext1
> START EXTRACT ext1
# 目标 Replicat
> ADD REPLICAT rep1, EXTTRAIL ./dirdat/rt
> START REPLICAT rep1
详细见:Oracle GoldenGate 全集。
3.4 切换
1. 停止源应用
2. 等待 Replicat 完成
3. 验证数据
4. 切换应用到目标
5. 启动应用
4. Data Guard 迁移
4.1 物理 Switchover
-- 主库
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
-- 备库
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE OPEN;
4.2 跨平台
- 物理:相同平台
- 逻辑:不同平台(限制)
- 转换:RMAN CONVERT
详细见:Oracle Data Guard Switchover 与 Failover 详解。
4.3 流程
1. 建立备库
2. 同步
3. Switchover
4. 应用切换
5. 完成迁移
5. ZDM(Zero Downtime Migration)
5.1 概念
- Oracle Cloud 工具
- 自动化迁移到 OCI
- 在线
- 物理 + 增量同步
5.2 流程
1. 准备 ZDM
2. 全量备份
3. 增量同步
4. 切换
5. 完成
5.3 命令
$ZDM_HOME/bin/zdmcli migrate database \
-sourcedb prod \
-targethome /u01/app/oracle/product/19c \
-backupuser user@target \
-rsp response.rsp
6. 跨平台迁移
6.1 RMAN CONVERT
# 源平台
RMAN> CONVERT DATABASE
NEW DATABASE 'prod'
TRANSPORT SCRIPT '/tmp/transport.sql'
TO PLATFORM 'Linux x86 64-bit'
DB_FILE_NAME_CONVERT ('/u01/oradata', '/tmp/conv');
详细见:Oracle 跨平台迁移。
6.2 TTS
-- 检查平台
SELECT platform_name FROM v$transportable_platform;
-- 自包含
EXEC DBMS_TTS.TRANSPORT_SET_CHECK('USERS, TOOLS', TRUE);
-- 导出
expdp system/password DUMPFILE=tts.dmp DIRECTORY=dp
TRANSPORT_TABLESPACES=users,tools
-- 转换
RMAN> CONVERT TABLESPACE users TO PLATFORM 'Linux x86 64-bit'
FORMAT '/tmp/users_%U.dbf';
详细见:Oracle TTS 传输表空间详解。
7. 在线重定义
7.1 概念
- 在线修改表结构
- 几乎零停机
- DBMS_REDEFINITION
7.2 流程
-- 检查可重定义
EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('SCOTT', 'EMP');
-- 开始
EXEC DBMS_REDEFINITION.START_REDEF_TABLE(
'SCOTT', 'EMP', 'EMP_NEW');
-- 同步
EXEC DBMS_REDEFINITION.SYNC_INTERIM_TABLE('SCOTT', 'EMP');
-- 完成
EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('SCOTT', 'EMP', 'EMP_NEW');
详细见:Oracle 在线重定义详解。
8. 迁移到云
8.1 方法
- ZDM:自动化
- Data Pump:简单
- GoldenGate:实时
- Backup to Cloud:备份恢复
8.2 OCI
- Autonomous Database
- DB System
- Exadata Cloud
详细见:Oracle 数据库迁移到云。
9. 验证
9.1 数据校验
-- 行数
SELECT COUNT(*) FROM employees;
-- 数据
SELECT DBMS_CRYPTO.HASH(...) FROM ...;
-- 表对比
SELECT table_name, num_rows FROM user_tables;
9.2 性能
-- 执行计划
EXPLAIN PLAN FOR ...;
-- 性能对比
SELECT sql_id, elapsed_time FROM v$sql;
9.3 业务
- 应用测试
- 业务流程
- 报表对比
10. 回退
10.1 计划
- 回退方案
- 时间窗口
- 责任人
10.2 GoldenGate
- 反向复制
- 应用回退
10.3 Data Guard
- Switchover 回切
- Flashback
11. 应用切换
11.1 服务名
- TNS 切换
- 连接池
- 应用配置
11.2 DNS
- DNS 切换
- TTL
- 监控
11.3 验证
- 连接测试
- 业务测试
- 监控
12. 常见坑与排错
12.1 数据不一致
- 校验
- 重新同步
12.2 性能差
- 索引
- 统计
- 内存
12.3 切换失败
- 回退
- 修复
- 重试
13. 最佳实践
- 测试:演练
- 备份:迁移前
- 校验:数据
- 回退:预案
- 监控:迁移过程
- 文档:流程
- 团队:协同
- 时间窗口:合理
- 验证:业务
- 复盘:总结
14. 参考资料
[1] Oracle Database Migration Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/upgrd/