1. 项目概述:9TB级Oracle数据库迁移挑战
这次要聊的是个硬核实战项目——用OGG 21c把9TB数据从Oracle 11g实时迁移到19c,全程图形化操作且业务零停机。做过数据库迁移的老司机都知道,这种跨大版本的海量数据迁移,就像给飞行中的飞机换引擎,稍有不慎就会导致数据不一致或服务中断。
OGG(Oracle GoldenGate)作为Oracle官方的实时数据复制工具,其21c版本在图形化操作和自动化方面有了质的飞跃。相比传统expdp/impdp逻辑导出导入方案,OGG的最大优势在于:
- 支持异构平台迁移(比如Linux到AIX)
- 允许源库和目标库版本不一致
- 提供亚秒级的数据延迟
- 最小化停机窗口(通常只需切换时的短暂停写)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与拓扑规划
2.1 硬件资源配置建议
针对9TB数据量,建议以下硬件配置(实测有效):
| 组件 | 源端(11g) | 目标端(19c) |
|---|---|---|
| CPU | 16核以上 | 32核以上 |
| 内存 | 128GB | 256GB |
| 存储 | 高速SAN存储 | NVMe SSD阵列 |
| 网络带宽 | 10Gbps专线 | 10Gbps专线 |
| OGG专用空间 | 500GB(用于trail) | 500GB(用于trail) |
特别注意:OGG进程对I/O吞吐量极其敏感,强烈建议将trail文件存放在独立的高性能磁盘上,避免与Oracle数据文件产生I/O竞争。
2.2 软件版本兼容性检查
版本组合验证清单:
- 源端Oracle 11.2.0.4(必须打PSU补丁)
- 目标端Oracle 19.15(推荐最新RU)
- OGG 21c (21.3.0.0.0)
- JDK 1.8(OGG管理服务依赖项)
关键检查点:
sql复制-- 源端检查
SELECT * FROM v$version;
SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_all FROM v$database;
-- 目标端检查
SELECT * FROM v$version;
SELECT log_mode FROM v$database;
3. 源端配置详解
3.1 数据库层面准备
必须开启的归档和补充日志:
sql复制-- 以SYSDBA执行
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER SYSTEM SET enable_goldengate_replication=true SCOPE=BOTH;
表级补充日志的特殊处理(针对LOB字段):
sql复制-- 对含LOB的表需要额外执行
BEGIN
FOR tab IN (SELECT owner, table_name FROM all_tables WHERE owner='SCHEMA_NAME') LOOP
EXECUTE IMMEDIATE 'ALTER TABLE '||tab.owner||'.'||tab.table_name||' ADD SUPPLEMENTAL LOG DATA (LOB) COLUMNS';
END LOOP;
END;
/
3.2 OGG 21c源端安装
图形化安装的关键步骤:
- 运行runInstaller选择"Oracle GoldenGate for Oracle"
- 指定$OGG_HOME路径(建议与ORACLE_HOME分离)
- 配置管理端口(默认7809)
- 部署GGSCI命令行工具
验证安装:
bash复制cd $OGG_HOME
./ggsci
> INFO ALL
3.3 抽取进程(Extract)配置
图形化配置流程:
- 登录Admin Console(http://host:7809)
- 导航至"Configuration" → "Extracts"
- 创建Integrated Extract(推荐)或Classic Extract
典型参数模板:
code复制EXTRACT EORA11
USERIDALIAS ogg11 DOMAIN admin
EXTTRAIL /ogg/trails/et
TRANLOGOPTIONS INTEGRATEDPARAMS (downstream_real_time_mine y)
TABLE SCHEMA_NAME.*;
踩坑提醒:如果源库有大量DDL操作,必须额外配置DDL捕获参数:
code复制DDL INCLUDE ALL
DDLOPTIONS REPORT
4. 目标端配置精要
4.1 数据库初始化参数
19c特有的优化参数:
sql复制ALTER SYSTEM SET db_securefile='PERMITTED' SCOPE=BOTH;
ALTER SYSTEM SET parallel_max_servers=64 SCOPE=BOTH;
ALTER SYSTEM SET streams_pool_size=8G SCOPE=BOTH;
4.2 OGG目标端部署
与源端的主要差异点:
- 选择"Oracle GoldenGate for Oracle 19c"组件
- 配置时需指定19c的ORACLE_HOME
- 建议开启微服务架构(Microservices Architecture)
4.3 复制进程(Replicat)配置
集成模式Replicat示例:
code复制REPLICAT RORA19
USERIDALIAS ogg19 DOMAIN admin
MAP SCHEMA_NAME.*, TARGET SCHEMA_NAME.*;
针对大表的优化参数:
code复制BATCHSQL OPSPERBATCH 1000
GROUPTRANSOPS 10000
MAXTRANSOPS 100000
5. 全量数据初始化方案
5.1 初始加载策略选择
针对9TB数据的推荐方案:
- 使用Oracle Data Pump导出元数据
- 并行expdp导出表数据(按表空间分区)
- OGG初始化加载与增量同步并行
关键expdp命令:
bash复制expdp system/password \
directory=DATA_PUMP_DIR \
schemas=SCHEMA_NAME \
parallel=16 \
cluster=no \
compression=ALL \
dumpfile=expdp_%U.dmp \
logfile=expdp.log
5.2 特殊数据类型处理
需要特别注意的数据类型:
- BLOB/CLOB:检查LOB存储参数一致性
- XMLType:验证XML DB组件兼容性
- SDO_GEOMETRY:确保目标端有相同SRID
- 自定义类型:提前在目标端编译
6. 增量同步配置技巧
6.1 实时变更捕获优化
高性能配置参数:
code复制EXTRACT EORA11
...
TRANLOGOPTIONS DBLOGREADER BUFSIZE 1024000
TRANLOGOPTIONS DBLOGREADER FETCHSIZE 1024000
TRANLOGOPTIONS DBLOGREADER PREFETCH 1000
6.2 网络传输优化
数据压缩配置:
code复制EXTRACT EORA11
...
RMTHOST 192.168.1.100, MGRPORT 7809, COMPRESS
RMTTRAIL /ogg/trails/rt
6.3 目标端应用优化
内存缓存设置:
code复制REPLICAT RORA19
...
CACHEMGR CACHESIZE 2G
CACHEMGR CACHEDIRECTORY /ogg/cache 20000
7. 监控与验证体系
7.1 关键监控指标
必须监控的OGG指标:
- Lag时间(必须<30秒)
- Checkpoint延迟
- 内存使用率
- Trail文件积压数
自动化监控脚本示例:
sql复制SELECT
extract_name,
status,
lag_time/60 "Lag(min)",
to_char(checkpoint_time,'YYYY-MM-DD HH24:MI:SS')
FROM
ggs_admin.extract_checkpoints;
7.2 数据一致性校验
推荐使用Oracle DBMS_COMPARISON:
sql复制BEGIN
DBMS_COMPARISON.CREATE_COMPARISON(
comparison_name => 'COMPARE_SCHEMA',
schema_name => 'SCHEMA_NAME',
object_name => '%',
dblink_name => 'SOURCE_DB');
END;
/
8. 故障处理手册
8.1 常见错误代码速查
| 错误代码 | 原因分析 | 解决方案 |
|---|---|---|
| OGG-0116 | Trail文件空间不足 | 扩大trail目录或增加文件滚动频率 |
| OGG-0129 | 网络中断 | 检查网络后AUTORESTART进程 |
| OGG-0208 | 表结构不一致 | 使用DDL同步工具修复 |
| OGG-0316 | LOB数据超限 | 调整LOB存储参数 |
8.2 性能问题排查流程
- 检查系统资源(top/vmstat/iostat)
- 分析OGG进程报告(VIEW REPORT <进程名>)
- 检查数据库AWR报告
- 调整并行度参数(THREADOPTIONS)
9. 切换方案设计
9.1 最终同步窗口操作
- 停止源库应用写入(5分钟维护窗口)
- 确认OGG延迟归零
- 执行最终差异数据同步
- 切换应用连接字符串
9.2 回退机制
必须准备的应急方案:
- 保留源库完整备份
- 记录切换时间点SCN
- 准备反向复制链路(19c→11g)
反向复制配置要点:
code复制REPLICAT RORA11
ASSUMETARGETDEFS
MAP SCHEMA_NAME.*, TARGET SCHEMA_NAME.*;
在实战中我们发现,LOB字段超过1GB的表需要特殊处理——在OGG参数文件中单独配置LOB_UPDATE_MODE=INLINE。另外对于分区表迁移,建议按分区并行初始化,可以缩短至少40%的同步时间。
