大家好,我是 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
——————————————————————————
评论
