暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle GoldenGate 竟然有这么多“坑”,速来避雷!

点击上方蓝字,关注我们


想学会更多实用技巧,欢迎加入青学会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
    ,导致中文字段乱码。

解决方案

  1. 统一路径配置

    GGSCI> ADD EXTTRAIL ogg/dirdat/aa, EXTRACT ext1
    GGSCI> ADD RMTTRAIL ogg/dirdat/aa, EXTRACT pump1

  2. 字符集强制匹配

    • 检查源端与目标端数据库字符集:

      -- 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 日志格式。

解决方案

  1. 查阅官方兼容矩阵
    • 访问 Oracle Certify,确认 OGG 版本与数据库、操作系统、驱动的兼容性。
  2. 驱动升级标准化
    • 使用 OUI(Oracle Universal Installer)自动安装推荐驱动,避免手动替换导致版本冲突。

DDL 同步:配置开关与异构陷阱

问题现象
表结构变更未同步至目标端,或同步后出现语法错误(如 Oracle 的 NUMBER
 转 MySQL 的 INT
 溢出)。

案例分析

  • OGG 默认关闭 DDL 同步功能,需手动启用 DDL
     参数并配置触发器。
  • Oracle 的 VARCHAR2(4000)
     同步到 MySQL 时,若目标端为 utf8mb4
     编码,需转换为 VARCHAR(1000)
     避免长度溢出。

解决方案

  1. 启用 DDL 同步

    -- 在源端执行
    GGSCI> DDL TABLE schema.tab1;

  2. 配置 DDL 映射文件

    • 编辑 ddl_mysql_to_oracle.sql
      ,定义类型转换规则:

      MAP OracleSchema.*, TARGET MySQLSchema.*, COLMAP (USING DEFAULT);


性能瓶颈:主键缺失与批量提交优化

问题现象
Replicat 进程延迟飙升,目标端 Trail 文件堆积。

案例分析

  • 源表无主键时,OGG 需全表扫描定位记录,导致更新操作性能下降 10 倍以上。
  • 未启用 BATCHSQL
     参数时,逐行提交事务,无法发挥数据库批量处理优势。

解决方案

  1. 强制添加主键或唯一索引

    ALTER TABLE orders ADD PRIMARY KEY (order_id);

  2. 启用批量提交

    REPLICAT rep1
    BATCHSQL ON
    GROUPTRANSOPS 1000


数据冲突:双向同步与冲突解决策略

问题现象
双向同步中,目标端报错 ORA-00001: unique constraint violated

案例分析

  • 订单表在两地同时插入相同 order_id
    ,导致主键冲突。
  • 未配置 HANDLECOLLISIONS
     参数时,进程直接中止。

解决方案

  1. 启用冲突检测

    REPLICAT rep1
    HANDLECOLLISIONS

  2. 自定义冲突解决

    REPLICAT rep1
    RESOLVECONFLICT (
      INSERTROWEXISTS, 
      DEFAULT, 
      {MAX(created_time)}
    )


运维避坑清单

阶段
检查项
工具/命令
部署前
版本兼容性验证
Oracle Certify 网站
配置时
参数文件语法检查
GGSCI> VIEW PARAM <进程名>
运行时
实时延迟监控
GGSCI> SEND REPLICAT rep1, STATUS
故障排查
错误日志分析
tail -f ggserr.log

避坑三原则

  1. 预验证:在测试环境模拟全量数据同步与 DDL 变更。
  2. 标准化:遵循 OGG 部署规范(如目录结构、命名规则)。
  3. 自动化:通过脚本监控 Trail 文件、进程状态与资源占用。

通过系统性规避上述陷阱,可显著提升 OGG 的稳定性与同步效率,让数据复制更加高效可靠。

如果您想进一步深入学习GoldenGate的知识并掌握最新的动态,来老曹的星球吧




END

往期文章回顾

MOP社区新闻

  青学会MOP技术社区成立了!

  青学会专家顾问团成员介绍

金仓专栏

  告别繁琐!KingbaseES v9数据库一键安装-青学会&金仓专栏(1)

  KingbaseES v9数据库Docker安装-青学会&金仓专栏(2)

  KingbaseES数据脱敏-青学会&金仓专栏(3)

  KingbaseES后台服务管理-青学会&金仓专栏(4)

  电科金仓KES日常运维命令集锦-青学会&金仓专栏(5)

DBA实战小技巧

  推荐一款超实用的openGauss数据库安装工具!

  实战:记一次RAC故障排查
  DBA实战运维小技巧安装篇(一)Oracle 主流版本不同架构下的静默安装指南
  DBA实战运维小技巧存储篇(一)根目录满了如何处理
  DBA实战运维小技巧存储篇(二)打包迁移单机数据库至新存储

MOP社区投稿-内核开发

  浅谈 PostgreSQL GUC 模块原理

  简单解析 IvorySQL 增强 Oracle xml 兼容能力的原理

  简单讨论 PostgreSQL C语言拓展函数返回数据表的方式

  简单分析 pg_config 程序的作用与原理
  Redis 日志机制简介(一):SlowLog
  Redis 日志机制简介(二):AOF 日志
  Redis 日志机制简介(三):RDB 日志
  pg_cron插件使用介绍
  Redis 的指令表实现机制简介
  pg几款源码工具介绍
  Redis 事务功能简介

MOP顾问说

   MOP顾问说:MOP 三种主流数据库常用 SQL(一)

  MOP顾问说: 服务器内存

  MOP 顾问说:Linux Nice 值与 CPU 优先级揭秘






END

往期文章回顾

MOP社区新闻

  青学会MOP技术社区成立了!

  青学会专家顾问团成员介绍

金仓专栏

  告别繁琐!KingbaseES v9数据库一键安装-青学会&金仓专栏(1)

  KingbaseES v9数据库Docker安装-青学会&金仓专栏(2)

  KingbaseES数据脱敏-青学会&金仓专栏(3)

  KingbaseES后台服务管理-青学会&金仓专栏(4)

  电科金仓KES日常运维命令集锦-青学会&金仓专栏(5)

DBA实战小技巧

  推荐一款超实用的openGauss数据库安装工具!

  实战:记一次RAC故障排查
  DBA实战运维小技巧安装篇(一)Oracle 主流版本不同架构下的静默安装指南
  DBA实战运维小技巧存储篇(一)根目录满了如何处理
  DBA实战运维小技巧存储篇(二)打包迁移单机数据库至新存储

MOP社区投稿-内核开发

  浅谈 PostgreSQL GUC 模块原理

  简单解析 IvorySQL 增强 Oracle xml 兼容能力的原理

  简单讨论 PostgreSQL C语言拓展函数返回数据表的方式

  简单分析 pg_config 程序的作用与原理
  Redis 日志机制简介(一):SlowLog
  Redis 日志机制简介(二):AOF 日志
  Redis 日志机制简介(三):RDB 日志
  pg_cron插件使用介绍
  Redis 的指令表实现机制简介
  pg几款源码工具介绍
  Redis 事务功能简介

MOP顾问说

   MOP顾问说:MOP 三种主流数据库常用 SQL(一)

  MOP顾问说: 服务器内存

  MOP 顾问说:Linux Nice 值与 CPU 优先级揭秘


文章转载自青年数据库学习互助会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论