大家好,我是 JiekeXu,江湖人称“强哥”,青学会 MOP 技术社区主席,荣获 Oracle ACE Pro 称号,墨天轮 MVP,墨天轮年度“墨力之星”,拥有 Oracle OCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及 PCA、PCTA、OBCA、OGCA、金仓KCA、KCP 等众多国产数据库认证证书,今天和大家一起来看看 OGG 如何新增应用进程,欢迎关注我的微信公众号“JiekeXu DBA之路”,然后点击右上方三个点“设为星标”置顶,更多干货文章才能第一时间推送,谢谢!

前 言
有的时候,我们在使用 OGG 的过程中,需要维护数据正常同步,减少同步延迟,其中有一个手段就是拆分应用进程。下面则介绍了如何新增应用进程以及如何拆分应用进程。
一、直接新增应用进程
说明:OGG 目标端使用异构非结构化的 ogg for big data,将 Oracle 增量数据同步到 kafka 即可,操作相对而言比较简单,新增进程使用相同的 trail 文件和配置文件。
版本如下:
[oracle@JiekeXu soft]$ ./ggsci
Oracle GoldenGate for Big Data
Version 12.3.2.1.1 (Build 005)
Oracle GoldenGate Command Interpreter
Version 12.3.0.1.2 OGGCORE_OGGADP.12.3.0.1.2_PLATFORMS_180712.2305
Linux, x64, 64bit (optimized), Generic on Jul 13 2018 00:46:09
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2018, Oracle and/or its affiliates. All rights reserved.
GGSCI (JiekeXu) 1>
1) 新增 kafka.props 文件
[oracle@jiekexu dirprm]$ more kafka_prod_smsj.props
gg.handlerlist=kafkahandler
gg.handler.kafkahandler.type=kafka
gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer_smsj.properties
gg.handler.kafkahandler.format=json
gg.handler.kafkahandler.mode=op
gg.handler.kafkahandler.format.includePrimaryKeys=true
gg.classpath=dirprm/:/home/oracle/kafka/libs/*:/goldengate/:/goldengate/lib/*
gg.handler.kafkahandler.BlockingSend=false
gg.handler.kafkahandler.topicMappingTemplate=ORACLE_JIEKEDB.${schemaName}.${tableName}
gg.handler.kafkahandler.keyMappingTemplate=${primaryKeys}
[oracle@jiekexu dirprm]$ pwd
/goldengate/dirprm
2) 新增 custom.properties 文件
[oracle@jiekexu dirprm]$ more custom_kafka_producer_smsj.properties
bootstrap.servers=192.168.40.143:9092,192.168.40.144:9092,192.168.40.145:9092
acks=1
compression.type=gzip
reconnect.backoff.ms=1000
value.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
key.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
batch.size=1048576
linger.ms=0
max.request.size = 50240000
send.buffer.bytes = 50240000
3) 开启补充日志
--源库执行以下 SQL, 开启所有列补充日志,注意 ORA-00054 错误
ALTER TABLE CC_SZ.T_CI_RN_PROGRESS ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER TABLE CC_SZ.T_CI_RN_CORP_AUTH_TEMP ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER TABLE CC_CM.T_CI_RN_PROGRESS ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER TABLE CC_CM.T_CI_RN_CORP_AUTH_TEMP ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER TABLE CC_OU.T_CI_RN_PROGRESS ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER TABLE CC_OU.T_CI_RN_CORP_AUTH_TEMP ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
4) 新增应用进程
cd /goldengate/
ggsci
--编辑 rep03 参数文件
edit params rep03
REPLICAT rep03
sourcedefs /goldengate/dirdef/goldengate.def
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka_prod_smsj.props
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 10000
GETUPDATEBEFORES
HANDLECOLLISIONS
REPLACEBADCHARdd SUBSTITUTE ? FORCECHECK
map CC_SZ.T_CI_RN_PROGRESS,target CC_SZ.T_CI_RN_PROGRESS;
map CC_SZ.T_CI_RN_CORP_AUTH_TEMP,target CC_SZ.T_CI_RN_CORP_AUTH_TEMP;
map CC_CM.T_CI_RN_PROGRESS,target CC_CM.T_CI_RN_PROGRESS;
map CC_CM.T_CI_RN_CORP_AUTH_TEMP,target CC_CM.T_CI_RN_CORP_AUTH_TEMP;
map CC_OU.T_CI_RN_PROGRESS,target CC_OU.T_CI_RN_PROGRESS;
map CC_OU.T_CI_RN_CORP_AUTH_TEMP,target CC_OU.T_CI_RN_CORP_AUTH_TEMP;
add replicat rep03,exttrail /goldengate/dirdat/xu nodbcheckpoint
5)根据 rba 启动 rep 进程
su - oracle
cd /goldengate/
./ggsci
info all
GGSCI (jiekexu) 2> info rep01
REPLICAT REP01 Last Started 2024-08-03 09:47 Status RUNNING
Checkpoint Lag 00:00:05 (updated 00:00:06 ago)
Process ID 11910
Log Read Checkpoint File /goldengate/dirdat/xu000010920 <<=== 这里查到的 seqno
2024-10-18 17:21:15.001673 RBA 415934041 <<=== 这里查到的 RBA
info all
启动新应用进程
alter rep rep03 extseqno 10920 extrba 415934041 <<=== 上面查到的 RBA
start rep03 with NOFILTERDUPTRANSACTIONS
start rep03
info all
info rep03
--查看日志
view report rep03
如果你使用的 OGG 版本比较低,可能还需要将 goldengate.def 表定义文件传输到目标端。在新版本的 OGG 的 trail 文件中已经包含了表结构定义文件,故不需要传输,否则在源端需要编辑 test_ogg.prm 文件,重新生 成 goldengate.def 表定义文件,然后传输到目标端。
vi /goldengate/ogg19c/dirprm/test_ogg.prm
--添加到文件末尾
table CC_SZ.T_CI_RN_PROGRESS;
table CC_SZ.T_CI_RN_CORP_AUTH_TEMP;
table CC_CM.T_CI_RN_PROGRESS;
table CC_CM.T_CI_RN_CORP_AUTH_TEMP;
table CC_CM.T_CI_CORP_STATE;
table CC_OU.T_CI_RN_PROGRESS;
table CC_OU.T_CI_RN_CORP_AUTH_TEMP;
--重新生成 /goldengate/ogg19c/dirdef/goldengate.def 表定义文件
/goldengate/ogg19c/defgen paramfile /goldengate/ogg19c/dirprm/test_ogg.prm
scp /goldengate/ogg19c/dirdef/goldengate.def 192.168.40.60:/goldengate/dirdef/goldengate.def
二、应用进程拆分
说明:OGG 目标端使用同构的数据库 Oracle 19c,操作相对而言比较简单,新增进程使用相同的 trail 文件。
JiekeXu:/ogg(ogg)$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054_FBO
Linux, x64, 64bit (optimized), Oracle 19c on Oct 17 2019 21:16:29
Operating system character set identified as US-ASCII.
Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.
GGSCI (JiekeXu) 1>
1) 停止源端投递进程,并记录其 csn 相关信息(重要)
GGSCI> stop DPEU1
Sending STOP request to EXTRACT DPEU1 ...
Request processed.
GGSCI> info DPEU1
EXTRACT DPEU1 Last Started 2024-11-29 09:39 Status STOPPED
Checkpoint Lag 00:00:00 (updated 00:01:00 ago)
Log Read Checkpoint File /goldengate/ogg19c/dirdat/xq000034285
2024-12-25 22:10:52.000000 RBA 49975777
2) 停止当前应用进程,并记录其 csn 相关信息(非常重要)
GGSCI> stop REP03
Sending STOP request to REPLICAT REP03 ...
STOP request pending end-of-transaction (11 records so far).
GGSCI> info REP03
REPLICAT REP03 Last Started 2024-11-22 15:45 Status STOPPED
Checkpoint Lag 00:00:06 (updated 00:00:31 ago)
Log Read Checkpoint File /goldengate/ogg19c/dirdat/xu000001247
2024-12-25 22:30:31.681604 RBA 231517782
3) dblogin 登录到数据库
--ogg12c 以上版本配置 wallet 免密了直接密文登录
GGSCI> dblogin USERIDALIAS alias_ogg
Successfully logged into database.
--或者直接明文登录
GGSCI>dblogin USERID ogg, password "oGg_2MT7"
4) 从老的应用进程参数配置中,将要拆分出的表删除
GGSCI> edit params REP03
GGSCI> view params REP03
REPLICAT rep03
setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid ogg@OGG, password oGg_2MT7
REPORT AT 08:59
REPORTCOUNT EVERY 30 MINUTES, RATE
CACHEMGR CACHESIZE 2048MB, CACHEDIRECTORY /goldengate/ogg19c/dirtmp
REPERROR DEFAULT, ABEND
--REPERROR DEFAULT, DISCARD
DISCARDFILE /goldengate/ogg19c/dirrpt/rep03.dsc, APPEND, MEGABYTES 1024
DISCARDROLLOVER AT 3:00
GETTRUNCATES
ALLOWNOOPUPDATES
APPLYNOOPUPDATES
DBOPTIONS DEFERREFCONST
DBOPTIONS SUPPRESSTRIGGERS
DDL INCLUDE MAPPED
DDLOPTIONS REPORT
MAP ODS_R.T_CREDIT,target ODS_R.T_CREDIT;
MAP ODS_R.T_CI_CORP,target ODS_R.T_CI_CORP;
--MAP ODS_R.T_CI_RN_CORP,target ODS_R.T_CI_RN_CORP;
5) 为新的应用进程进行参数配置,将拆分出的表加入
GGSCI> edit params REP03_N
REPLICAT REP03_N
setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid ogg@OGG, password oGg_2MT7
REPORT AT 08:59
REPORTCOUNT EVERY 30 MINUTES, RATE
CACHEMGR CACHESIZE 2048MB, CACHEDIRECTORY /goldengate/ogg19c/dirtmp
REPERROR DEFAULT, ABEND
--REPERROR DEFAULT, DISCARD
DISCARDFILE /goldengate/ogg19c/dirrpt/rep03_n.dsc, APPEND, MEGABYTES 1024
DISCARDROLLOVER AT 3:00
GETTRUNCATES
ALLOWNOOPUPDATES
APPLYNOOPUPDATES
DBOPTIONS DEFERREFCONST
DBOPTIONS SUPPRESSTRIGGERS
DDL INCLUDE MAPPED
DDLOPTIONS REPORT
MAP ODS_R.T_CREDIT,target ODS_R.T_CREDIT;
MAP ODS_R.T_CI_CORP,target ODS_R.T_CI_CORP;
MAP ODS_R.T_CI_RN_CORP,target ODS_R.T_CI_RN_CORP;
6) 添加新的应用进程
当目标端是数据库时,可以添加检查点表,但当目标端是 kafka 等非数据库时,则不需要检查点表。
GGSCI (JiekeXu as ogg@ogg) 4> add checkpointtable ogg.rep03_n_ckpt
Successfully created checkpoint table ogg.rep1_ckpt.
使用数据库检查点时,Oracle GoldenGate 在执行 ADD CHECKPOINTTABLE 命令时会在数据库中创建一个用户自定义名称的检查点表 ,或者用户可以使用脚本 chkpt_db_create.sql 创建表(其中 db 是数据库类型的缩写,脚本支持)。
有两个表:主检查点表和自动创建的辅助检查点表。辅助表,称为 事务表,带有附加的主检查点表的名称_lox。每个 Replicat 或协调 Replicat 的每个线程都使用检查点表中的一行来存储其进度信息。
在检查点时间,通常有一些事务(在总共n 个事务中)已应用,其余事务仍在处理中。例如,如果 Replicat 正在处理一组从 CSN1 到 CSN3的n 个事务。CSN1 是高水位线,CSN3 是低水位线。任何 CSN 高于高水位线的交易尚未处理,任何 CSN 低于低水位线的交易已被处理。已完成的交易存储在LOG_CMPLT_XID 检查点表的列。这些事务的任何溢出都存储在该表LOG_CMPLT_XID 列中的事务表(辅助检查点表)中。
目前,Replicat(或协调 Replicat 的每个 Replicat 线程)串行(非并行)应用事务;因此,高水位线( LOG_CSN表中的值)始终与低水位线(LOG_CMPLT_CSN表中的值)相同,并且通常LOG_CMPLT_XID列中只有一个事务 ID。唯一的例外是当有多个事务共享同一个 CSN 时。
GGSCI> add replicat rep03_n integrated,exttrail /goldengate/ogg19c/dirdat/xu, checkpointtable ogg.rep03_n_ckpt
7) 修改目标端应用进程开始抽取点(以原来的应用进程 scn 信息为准)
GGSCI > alter rep03_n,extseqno 1247,extrba 231517782
8) 目标端启动拆分后的两个进程并查看其状态
GGSCI > start REP03*
GGSCI > info REP03*
GGSCI > info all
9) 启动源端投递进程,并查看其状态
GGSCI > start DPEU1
GGSCI > info DPEU1
GGSCI > info all
全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
——————————————————————————





