
想学会更多实用技巧,欢迎加入青学会MOP技术社区(实名社区)。
加入方法:公众号后台回复关键字“加入”获取小助手微信,添加后登记入会。

同时欢迎大家在评论区留言互动交流!社区会不定期举行相关的抽奖、公开分享活动。
如果你有想了解的知识点希望我们发文可以后台私信。
最近联合几个 Oracle ACE技术专家 开通了一个付费微信群,都是具有10多年金融、医疗、制造业10年以上的一线专家,坑位费399/人,无限期,目前群内近165人。加群后会有一些福利(分享各类技术文档,干货资源,问题解答等等),更有特邀嘉宾会定期在群内直播,解读AWR,快问快答等!有问题我们尽量都解答,毕竟399不能都解决所有问题。有兴趣联系微:ywu0613
内部知识库正在筹建中,不止有oracle!

正文开始
Oracle GoldenGate(OGG)作为实时数据复制的核心工具,广泛应用于异构数据库同步、容灾备份等场景。然而,其强大的功能背后隐藏着诸多配置陷阱与性能挑战。本文将结合真实案例,系统梳理 OGG 的“深坑”并提供避坑策略,助力用户高效搭建稳定可靠的数据管道。

配置陷阱:路径、字符集与参数校验
问题现象
Extract 进程无法启动,日志提示找不到 Trail 文件;或同步后目标端出现乱码。
案例分析
路径不一致:源端配置 EXTTRAIL ogg/dirdat/aa
,目标端 Pump 进程却指向/ogg/dirdat/bb
,导致数据无法传递。字符集错误:源库字符集为 ZHS16GBK
,但 OGG 未配置NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
,导致中文字段乱码。
解决方案
统一路径配置:
GGSCI> ADD EXTTRAIL ogg/dirdat/aa, EXTRACT ext1
GGSCI> ADD RMTTRAIL ogg/dirdat/aa, EXTRACT pump1字符集强制匹配:
检查源端与目标端数据库字符集:
-- Oracle
SELECT * FROM nls_database_parameters WHERE parameter LIKE '%CHARACTERSET%';
-- MySQL
SHOW VARIABLES LIKE 'character_set%';在 OGG 环境变量中显式设置:
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
版本兼容性:数据库、驱动与操作系统的三重验证
问题现象
OGG 进程启动失败,日志提示 OGG-00446 Could not find version for database
。
案例分析
OGG 21c 连接 MySQL 8.0 时,使用 mysql-connector-odbc-5.3.13
驱动报错,需升级至8.0.25
版本。Oracle 19c 数据库需使用 OGG 19c 或更高版本,低版本 OGG 可能无法解析 Redo 日志格式。
解决方案
查阅官方兼容矩阵: 访问 Oracle Certify,确认 OGG 版本与数据库、操作系统、驱动的兼容性。 驱动升级标准化: 使用 OUI(Oracle Universal Installer)自动安装推荐驱动,避免手动替换导致版本冲突。
DDL 同步:配置开关与异构陷阱
问题现象
表结构变更未同步至目标端,或同步后出现语法错误(如 Oracle 的 NUMBER
转 MySQL 的 INT
溢出)。
案例分析
OGG 默认关闭 DDL 同步功能,需手动启用 DDL
参数并配置触发器。Oracle 的 VARCHAR2(4000)
同步到 MySQL 时,若目标端为utf8mb4
编码,需转换为VARCHAR(1000)
避免长度溢出。
解决方案
启用 DDL 同步:
-- 在源端执行
GGSCI> DDL TABLE schema.tab1;配置 DDL 映射文件:
编辑
ddl_mysql_to_oracle.sql
,定义类型转换规则:MAP OracleSchema.*, TARGET MySQLSchema.*, COLMAP (USING DEFAULT);
性能瓶颈:主键缺失与批量提交优化
问题现象
Replicat 进程延迟飙升,目标端 Trail 文件堆积。
案例分析
源表无主键时,OGG 需全表扫描定位记录,导致更新操作性能下降 10 倍以上。 未启用 BATCHSQL
参数时,逐行提交事务,无法发挥数据库批量处理优势。
解决方案
强制添加主键或唯一索引:
ALTER TABLE orders ADD PRIMARY KEY (order_id);启用批量提交:
REPLICAT rep1
BATCHSQL ON
GROUPTRANSOPS 1000
数据冲突:双向同步与冲突解决策略
问题现象
双向同步中,目标端报错 ORA-00001: unique constraint violated
。
案例分析
订单表在两地同时插入相同 order_id
,导致主键冲突。未配置 HANDLECOLLISIONS
参数时,进程直接中止。
解决方案
启用冲突检测:
REPLICAT rep1
HANDLECOLLISIONS自定义冲突解决:
REPLICAT rep1
RESOLVECONFLICT (
INSERTROWEXISTS,
DEFAULT,
{MAX(created_time)}
)
运维避坑清单
GGSCI> VIEW PARAM <进程名> | ||
GGSCI> SEND REPLICAT rep1, STATUS | ||
tail -f ggserr.log |
避坑三原则
预验证:在测试环境模拟全量数据同步与 DDL 变更。 标准化:遵循 OGG 部署规范(如目录结构、命名规则)。 自动化:通过脚本监控 Trail 文件、进程状态与资源占用。
通过系统性规避上述陷阱,可显著提升 OGG 的稳定性与同步效率,让数据复制更加高效可靠。
如果您想进一步深入学习GoldenGate的知识并掌握最新的动态,来老曹的星球吧

往期文章回顾
MOP社区新闻
金仓专栏
告别繁琐!KingbaseES v9数据库一键安装-青学会&金仓专栏(1)
KingbaseES v9数据库Docker安装-青学会&金仓专栏(2)
DBA实战小技巧
实战:记一次RAC故障排查
DBA实战运维小技巧安装篇(一)Oracle 主流版本不同架构下的静默安装指南
DBA实战运维小技巧存储篇(一)根目录满了如何处理
DBA实战运维小技巧存储篇(二)打包迁移单机数据库至新存储
MOP社区投稿-内核开发
简单解析 IvorySQL 增强 Oracle xml 兼容能力的原理
简单讨论 PostgreSQL C语言拓展函数返回数据表的方式
简单分析 pg_config 程序的作用与原理
Redis 日志机制简介(一):SlowLog
Redis 日志机制简介(二):AOF 日志
Redis 日志机制简介(三):RDB 日志
pg_cron插件使用介绍
Redis 的指令表实现机制简介
pg几款源码工具介绍
Redis 事务功能简介
MOP顾问说
往期文章回顾
MOP社区新闻
金仓专栏
告别繁琐!KingbaseES v9数据库一键安装-青学会&金仓专栏(1)
KingbaseES v9数据库Docker安装-青学会&金仓专栏(2)
DBA实战小技巧
实战:记一次RAC故障排查
DBA实战运维小技巧安装篇(一)Oracle 主流版本不同架构下的静默安装指南
DBA实战运维小技巧存储篇(一)根目录满了如何处理
DBA实战运维小技巧存储篇(二)打包迁移单机数据库至新存储
MOP社区投稿-内核开发
简单解析 IvorySQL 增强 Oracle xml 兼容能力的原理
简单讨论 PostgreSQL C语言拓展函数返回数据表的方式
简单分析 pg_config 程序的作用与原理
Redis 日志机制简介(一):SlowLog
Redis 日志机制简介(二):AOF 日志
Redis 日志机制简介(三):RDB 日志
pg_cron插件使用介绍
Redis 的指令表实现机制简介
pg几款源码工具介绍
Redis 事务功能简介




