暂无图片
暂无图片
7
暂无图片
暂无图片
1
暂无图片

Oracle GoldenGate 如何新增应用进程

296

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

facebook_pro_light_1920 × 1080  副本.png

前 言

有的时候,我们在使用 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
——————————————————————————
facebook_pro_light_1920 × 1080  副本.png

最后修改时间:2024-12-31 15:23:02
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

筱悦星辰
暂无图片
2月前
评论
暂无图片 0
人生充满可能,恰需要我们不断精进自己。练就解决复杂问题的实力和智慧,才能拥有面对挑战的自信和底气。
2月前
暂无图片 点赞
评论
TA的专栏
JiekeXu DBA之路
收录228篇内容
JiekeXu_MySQL 学习笔记
收录41篇内容
目录
  • 前 言
  • 一、直接新增应用进程
    • 1) 新增 kafka.props 文件
    • 2) 新增 custom.properties 文件
    • 3) 开启补充日志
    • 4) 新增应用进程
    • 5)根据 rba 启动 rep 进程
  • 二、应用进程拆分
    • 1) 停止源端投递进程,并记录其 csn 相关信息(重要)
    • 2) 停止当前应用进程,并记录其 csn 相关信息(非常重要)
    • 3) dblogin 登录到数据库
    • 4) 从老的应用进程参数配置中,将要拆分出的表删除
    • 5) 为新的应用进程进行参数配置,将拆分出的表加入
    • 6) 添加新的应用进程
    • 7) 修改目标端应用进程开始抽取点(以原来的应用进程 scn 信息为准)
    • 8) 目标端启动拆分后的两个进程并查看其状态
    • 9) 启动源端投递进程,并查看其状态