Oracle GoldenGate集成模式大事务LAG启动修复实战方案
突然客户的某个操作产生了几十倍的日志量,但是ogg extract 已经crash,并且lag 超过了11小时,启动extrace时,ogg把内存耗尽,数据库实例crash,然后ogg进程再次crash,需要读更多的日志。本质上不能“直接限制缓存大小”彻底解决,但可以通过多种手段“控制和缓解”。下面给你实战可行方案
提供综合数据库运维服务与优化方案(不限Oracle MySQL PG GaussDB GoldenDB OceanBase等), 微信/Tel:(+86)134-365-60330
突然客户的某个操作产生了几十倍的日志量,但是ogg extract 已经crash,并且lag 超过了11小时,启动extrace时,ogg把内存耗尽,数据库实例crash,然后ogg进程再次crash,需要读更多的日志。本质上不能“直接限制缓存大小”彻底解决,但可以通过多种手段“控制和缓解”。下面给你实战可行方案
今天一个客户的Goldengate的extract进程组异常中断,分析ogg日志发现日志提示ora-00916错误,如下:
OGG-00916 Column FSE cannot be used as a key column. Define a unique index for table ANBOB.TAB_XXX without this column or use the KEYCOLS parameter to correct this issue.
今天一客户的GoldenGate for bigdata, 从oracle同步到kafka时,应用端进程失败,报错如下:
2025-09-29 17:58:56 ERROR OGG-01163 Oracle GoldenGate Delivery, r_ka.prm: Bad column length (1287) specified for column XINFO in table ANBOB.T_PATH_INFO, maximum allowable length is 400
最近一个朋友在测试Oracle GoldenGate(V12)从oracle 19c到kafka同步时,extract, pump进程都正常,extract有抽取到,但是pump进程running无投递数据。在我修改pump进程从某文件的时间开始后,再次启动终于提示了错误信息:
ERROR OGG-02650 Source wildcard specification USER1.T1 does not include a catalog name, but the source table name PDB1.USER1.T1includes a catalog name.
Serial apply =使用1个apply会话应用, 但是源数据库:有多个连接和多个并发事务, 这样会存在多个生产端一个消费端,这样串行应用因为无法扩展,当源库事务量大时,应用端会出现应用慢,同步延迟增加的现象。
OGG也一直在该方向创新,以提升速度,如抽取端可以使用集成抽取,可以拆成多个抽取任务,应用端可以手动拆成多个应用进程, 和Integrated Replicat、Parallel Nonintegrated Replicat、Parallel Integrated Replicat。
在 Oracle GoldenGate 中使用集成模式时,STREAMS_POOL 起着至关重要的作用。集成进程从“STREAMS POOL”获取共享内存。STREAMS POOL 是 SGA 的内存组件之一。STREAMS_POOL_SIZE 的大小应根据数据库系统中使用的集成提取的数量来确定。我们还应该考虑在数据库中使用 STREAMS POOL 的其他进程。最近一个案例ogg异常报错,因ora-4031 streams pool不足,简单记录。
最近有个客户查看MySQL主从同步时,提示ERROR 2027(HY000):Malformed packet错误,存在slave连接失败的现象,后分析是因为该MySQL配置了oracle goldengate,以replication slave的方式抽取,仅记录提醒再次遇到该问题。
Oracle数据库有dataguard主从,MySQL有主从或MGR,Goldengate同步支持从前两种数据库做数据抽取,但是在主从切换以后需要在Goldengate做相应的修改。这里记录一下MySQL因master 需要停机维护时,OGG主动切换到slave的方法。
最近一套ogg环境反馈做了些磁盘维护后抽取进程abended, 查看ggs日志发现有提示OGG-00662 OCI ERROR ora-03113 ora-03115和OGG-02078 extract encountered a fatal error错误,启动后使用ggsci info ext xx查看RBA无变化,简单记录一下该案例。
最近处理了一起Goldengate Pump Extract进程abended的案例, 进程日志提示ERROR OGG-02171 Error reading LCR from data source和 ERROR OGG-02191 Incompatible record 104 错误,属于trail文件中的事务记录损坏, 通常是跳过文件中的错误记录,重新启动进程,环境是集成模式的goldengate 18.1。
当GoldenGate复制进程(Replicat)在目标数据库上遇到ORA-00001唯一性冲突错误时,可以采取以下常见解决方法:
2023-1-617:57:36 WARNING OGG-02544 Unhandled error (ORA-00001: unique constraint (.) violated
ORA-00001: unique constraint (
LICAT will retry in Direct mode.
在日常Goldengate日常运维中最常见的是在现有的同步进程中增加新的同步表, 这里记录简单的使用class mode典型模式时,增加新表的过程。
最近在测试oracle to postgreSQL项目中,计划使用oracle standby database做为数据库初始化的静态数据,这没有任何问题, 那是否可以从standby database捕捉变化呢?如配置ogg extract抽取进程。
Yes, you can extract the data from a Physical Standby database. There are actually two methods available in Oracle GoldenGate.,
1. Archived Log Only Mode – ALO Mode
2. Active Data Guard Mode – ADG Mode
If a table has a PK constraint or a Unique Constraint that is Non-Validated or Invalid, OGG will by default not use those keys to uniquely identify a row. It will use all columns to uniquely identify a row.
OGG 19.*默认改变原来OGG 12版本ALLOWNULLABLEKEYS为NOALLOWNULLABLEKEYS, 这样会导致在replicat时因为不考虑可为空的唯一索引做为标示键,而使用全字段组合在一起作为行的唯一标识,但是EXTRACE的源库又只有这个唯一键的附加日志,trail中也只有该唯一列更新列时,在replicat时会产生OGG-1403记录不存在,而丢失更新,insert不受影响, 同时oggerr日志中记录的是INFO OGG-06441,这样更不会引起人的注意。
Oracle 12c RAC 1个实例因硬件原因突然crash, 另一实例上的goldengate Extract 进程Lag At Chkpt 持续增加,read checkpoint并不动,开始是因为归档日志被rman备份任务备份后删除,但restore 归档日志从Recovery Checkpoint到当前确认都存在后依旧hang, 清除了BR 文件再次启动extract进程恢复正常
前几年处理过一个<当C语言的程序处理 chr(0) or ‘\0’ 时的ORA-01008 Case>故障案例, 近期又遇到一个案例是在Golden Gate同步数据时遇到的问题,发现ogg在同步时对于char类型的字段,不足指定长度时,OGG使用的是chr(0)补充, 而对于已有数据是默认chr 32(空格)补充,导致无法匹配问题。
有时出于历史原因或之前使用其它同步产品做同步,后期想改为OGG方案时但不想做原数据一致性比对,或可以接受部分数据不一致,比如目标表可能比原表少数据时,只想在replicat端增加INSERTMISSINGUPDATES参数,如果update目标记录不存在转换insert. 想法是好的?前提是要知道ogg的机制。
如果在有OGG的表上增加列,又未启用同步DDL ,操作流程不当会遇到很多麻烦, 这里记录replicat进程异常终止。
OGG-00918 Oracle GoldenGate Delivery for Oracle, rep_zwa.prm: Key column NOTE is missing from map.