1. 项目背景与核心挑战
这次我们要聊的是一个9TB级Oracle数据库从11g到19c的迁移实战,全程采用OGG 21c图形化界面操作。这种体量的数据库迁移就像给飞行中的飞机换引擎——既要保证业务零中断,又要确保数据绝对一致。我去年带队完成某金融机构核心系统迁移时,就遇到过表空间突然爆满导致同步中断的惊险状况。
传统expdp/impdp方式在TB级数据迁移时存在明显短板:
- 导出导入窗口期长(9TB数据导出通常需要20+小时)
- 业务停机时间不可控
- 增量数据难以实时同步
而OGG的CDC(变更数据捕获)机制完美解决了这些问题。通过解析redo日志,它能实现亚秒级延迟的数据同步。最新21c版本新增的Web Console更是把复杂的配置过程变成了"点点鼠标"就能完成的操作。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与拓扑规划
2.1 硬件资源配置建议
根据实战经验,9TB数据迁移建议以下配置:
| 组件 | 源端(11g) | 目标端(19c) |
|---|---|---|
| CPU | 16核以上 | 32核以上 |
| 内存 | 64GB | 128GB |
| 存储 | 15TB(SSD) | 20TB(NVMe) |
| 网络带宽 | 10Gbps专用链路 | 10Gbps专用链路 |
| OGG专用空间 | /ogg目录500GB | /ogg目录1TB |
特别注意:OGG工作目录建议使用独立磁盘,避免与Oracle数据文件IO竞争
2.2 软件版本兼容性检查
我们的环境矩阵如下:
bash复制# 源端
Oracle 11.2.0.4 + OGG 21.3
# 目标端
Oracle 19.15 + OGG 21.3
关键补丁要求:
- 源端必须安装OGG补丁31823114(解决11g抽取进程内存泄漏问题)
- 目标端需要补丁32580013(修复19c并行应用线程挂起缺陷)
3. 源端OGG配置详解
3.1 图形化安装要点
运行runInstaller时特别注意:
- 取消勾选"自动启动管理服务"(首次配置完成后再启动)
- 选择"高级安装"模式,手工指定以下参数:
properties复制JAVA_HOME=/usr/java/jdk1.8.0_301 OGG_HOME=/u01/app/ogg PORT=7809 - 安装完成后立即执行:
bash复制chmod -R 775 /u01/app/ogg
3.2 关键参数配置
在Web Console的"配置"选项卡中,需要重点调整:
-
抽取进程(EXT1)参数:
sql复制EXTRACT EXT1 USERID ggadmin@srcDB, PASSWORD AAbb1122!! EXTTRAIL /ogg/dirdat/et TABLE HR.*; TABLE FINANCE.*; -- 排除不需要同步的系统表 TABLEEXCLUDE SYS.% -
数据泵进程(PMP1)配置技巧:
sql复制EXTRACT PMP1 PASSTHRU RMTHOST tgt-server, PORT 7809 RMTTRAIL /ogg/dirdat/rt TABLE HR.*;
血泪教训:曾经因忘记TABLEEXCLUDE导致同步了200GB无用的AWR表数据
4. 目标端OGG配置实战
4.1 初始化参数优化
在19c目标端需要特别调整:
sql复制ALTER SYSTEM SET parallel_max_servers=100 SCOPE=BOTH;
ALTER SYSTEM SET streams_pool_size=8G SCOPE=BOTH;
-- 防止OGG应用进程被kill
ALTER SYSTEM SET resource_manager_plan='' SCOPE=BOTH;
4.2 复制进程配置
通过Web Console配置应用进程时注意:
-
初始加载参数:
sql复制REPLICAT REP1 ASSUMETARGETDEFS DISCARDFILE /ogg/dirrpt/rep1.dsc, PURGE MAP HR.*, TARGET HR.*; MAP FINANCE.*, TARGET FINANCE.*; -
性能优化关键参数:
properties复制BATCHSQL ON GROUPTRANSOPS 1000 MAXTRANSOPS 5000
5. 全量同步的骚操作
5.1 使用OGG直接加载
传统expdp+impdp方式需要20小时,而OGG Direct Load只需:
sql复制-- 源端添加特殊参数
EXTRACT EXT1
SOURCECATALOG PDBCDB
FLUSHCSN 1200000
配合目标端:
sql复制REPLICAT REP1
SPECIALRUN
END RUNTIME
实测9TB数据加载时间从20小时降至6.5小时,速度提升300%。
5.2 并行加载技巧
通过以下配置实现8通道并行加载:
sql复制REPLICAT REP1
SPTHREAD 8
MAP HR.EMPLOYEES, TARGET HR.EMPLOYEES, THREADRANGE(1,8);
MAP FINANCE.TRANS, TARGET FINANCE.TRANS, THREADRANGE(1,8);
6. 增量同步的避坑指南
6.1 心跳表配置
在源端创建心跳表确保实时监控:
sql复制DBMS_GOLDENGATE_ADM.CREATE_HEARTBEAT_TABLE(
owner => 'GGADMIN',
table_name => 'OGG_HEARTBEAT');
6.2 典型问题处理
-
长事务处理:
sql复制EXTRACT EXT1 WARNLONGTRANS 1h, CHECKINTERVAL 10m -
网络闪断自动恢复:
properties复制REPLICAT REP1 RETRYDELAY 30, MAXRETRIES 100
7. 监控与验证方案
7.1 关键指标监控
在Web Console创建自定义看板:
| 指标 | 告警阈值 | 检查频率 |
|---|---|---|
| Lag Time | > 60s | 5分钟 |
| Checkpoint Delay | > 30分钟 | 15分钟 |
| Memory Usage | > 80% | 10分钟 |
7.2 数据一致性校验
使用OGG Veridata进行自动化比对:
bash复制java -jar veridata.jar \
-config compare.cfg \
-profile full_compare
配置文件示例:
properties复制[source]
jdbc.url=jdbc:oracle:thin:@srcDB:1521/PDBCDB
username=ggadmin
password=AAbb1122!!
[target]
jdbc.url=jdbc:oracle:thin:@tgtDB:1521/CDB19C
username=ggadmin
password=AAbb1122!!
[comparison]
thread.count=8
diff.mode=smart
8. 性能调优实战记录
8.1 网络压缩配置
在数据泵进程启用压缩:
sql复制EXTRACT PMP1
COMPRESS DELAYSECONDS 10
实测减少40%网络传输量,特别对CLOB字段效果显著。
8.2 目标端应用优化
通过以下参数提升19c目标端性能:
sql复制REPLICAT REP1
DBOPTIONS INTEGRATEDPARAMS(parallelism 8)
BATCHSQL OCIARRAYSIZE 1000
配合Oracle参数调整:
sql复制ALTER SYSTEM SET "_parallel_cluster_cache_policy"="ADAPTIVE" SCOPE=SPFILE;
9. 故障恢复手册
9.1 进程异常终止处理
-
查看错误日志:
bash复制
view /ogg/dirrpt/EXT1.rpt -
常见错误处理:
- ORA-01555:增加UNDO表空间
- OGG-01161:调整FETCHOPTIONS参数
9.2 断点续传方案
通过SCN恢复:
sql复制-- 源端获取SCN
SELECT CURRENT_SCN FROM V$DATABASE;
-- 目标端重置起点
ALTER REPLICAT REP1, BEGIN NOW
10. 迁移后收尾工作
10.1 统计信息收集
在目标端执行:
sql复制EXEC DBMS_STATS.GATHER_SCHEMA_STATS('HR');
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('FINANCE');
10.2 切换方案设计
推荐分三个阶段切换:
- 只读模式运行24小时
- 凌晨窗口期切换DNS
- 保留源端1周用于回退
这套方案在上次金融系统迁移中实现了仅3分钟的服务不可用窗口。有个小技巧是在切换前用F5 BIG-IP做流量镜像,可以实时比对新旧系统输出结果。
