最具影响力的数字化技术在线社区

168主编 发表于 2022-8-31 09:39:18

Oracle 19c + Oracle Golden Gate 19c CDC实时数据采集实战

本帖最后由 168主编 于 2022-8-31 10:00 编辑


[*]架构

[*]Oracle 19c多租户架构
[*]Oracle Golden Gate架构

[*]部署规划
[*]Oracle

[*]创建Oracle用户
[*]上传安装包
[*]安装
[*]配置Oracle
[*]配置环境变量
[*]启动Oracle
[*]修改管理员密码
[*]客户端连接

[*]部署Kafka集群

[*]创建Kafka用户
[*]上传解压
[*]配置Kafka
[*]分发到每个节点
[*]挨个修改每个节点的broker id
[*]创建超链接
[*]启动Kafka集群
[*]简单测试

[*]Ogg for Oracle源端安装

[*]创建ogg用户
[*]上传安装包
[*]编辑参数
[*]安装
[*]配置ogg环境变量
[*]创建库连接
[*]测试ogg
[*]配置oracle
[*]OGG初始化
[*]Oracle创建测试表

[*]Ogg for BigData目标端安装

[*]上传解压
[*]配置环境变量
[*]测试ggsci命令
[*]初始化目录

[*]Ogg源端配置

[*]配置ogg全局变量
[*]配置管理器
[*]添加复制表
[*]配置extract进程
[*]配置pump进程
[*]配置define文件

[*]Ogg目标端配置

[*]启动Kafka集群
[*]修改trail文件权限
[*]配置管理器mgr
[*]配置checkpoint
[*]配置replicate进程
[*]配置kafka.props
[*]添加trail文件到replicate进程

[*]测试

[*]启动所有进程
[*]查看进程状态
[*]测试同步更新效果

架构Oracle 19c多租户架构关于多租户架构从Oracle 12c开始,Oracle数据库开始基于多租户架构构建。也就是标志着,Oracle 12c是一个用作多租户的容器数据库(CDB——Container Database Base)。而一个CDB可以包含0个、1个或者多个客户创建的可插拔的数据库(PDB)。PDB是schema、schema object、以及非schema对象的一组集合。而这也意味着,Oracle 12c之前的Oracle数据库都是non-CDB的。关于CDB中的容器这里所说的容器(container)和Docker中的容器是不太一样的。而我们之前所熟悉的概念是:一个DB Server,有若干个Database。而CDB中的容器表示的是多租户体系结构中的数据、元数据的集合。
https://pic2.zhimg.com/80/v2-65e7d8532d328619dbc4c87fd9210f41_720w.jpg
可以看到CDB架构可以包含很多的容器:
[*]系统容器
系统容器包含了和CDB、以及所有的PDB。它本身是CDB的逻辑容器。
[*]Root的容器(我们一般称它为root)
如果仔细看上面的图,可以发现,所有的PDB(可插拔的数据库)的根容器都是Root(也就是CDB$ROOT)。我们也可以看到CDB架构看起来就是一颗多叉树,可以是有若干层。而ROOT容器中就需要包含整套架构的schema对象,也就是说CDB$ROOT需要有自己的数据字典、以及用户。
[*]应用程序容器
一个应用程序容器仅由一个Application root组成,并且PDB插入到该root目录中。前面我们说到,系统容器包含CDB根目录和CDB中的所有PDB,而Application container仅包含PDB。应用程序根目录属于CDB根目录,不属于其他容器。
[*]用户创建的PDB
PDB包含一组特定功能所需的数据和代码。例如,PDB可以支持特定的应用程序,例如:HR管理系统或CRM系统等。创建CDB时,是没有任何PDB的,需要我们自己根据业务需求添加PDB。
PDB属于一个应用程序容器。如果PDB属于应用程序容器,则它是Application PDB。例如,cust1_pdb和cust2_pdb应用程序PDB属于saas_sales_ac应用程序容器,在这种情况下,它们不属于任何其他应用程序容器。Application seed是一个可选的Application PDB,它是用户创建的PDB模板,能够让我们快速创建新的Appliation PDB。
[*]唯一的Seed PDB
Seed PDB是CDB用来创建新的PDB模板。Seed PDB名为PDB$SEED。我们无法在PDB$SEED中添加或修改对象。
没有应用容器的CDB架构
https://pic2.zhimg.com/80/v2-aae1aa3adaa9a1e8ea54eb4b79f17949_720w.jpg
上述例子中,CDB包含了5个容器:
[*]系统容器(整个CDB)
[*]CDB$ROOT
[*]PDB$SEED
[*]hrpdb
[*]salespdb
每个PDB有自己对应的应用,而且不同的PDB使用不同的管理员账户。而SYS用户可以管理CDB$ROOT以及每一个PDB。而在物理结构上,还是有数据库实例、以及数据温恩建的。带有应用容器的CDB架构
https://pic4.zhimg.com/80/v2-7b151b93b005cceb829df6abb9714513_720w.jpg

[*]可以看到,上图中有两个容器:CDB$ROOT、以及一个名为saas_sales_ac的应用容器。
[*]CDB$ROOT容器中插入Lee一个hrpdb
[*]saas_sales_ac容器插入了cust1_pdb、以及cust2_pdb
[*]角色有以下几类:

[*]CDB Administrator:整个CDB的管理员(系统容器管理员)
[*]Application Container Administrator:应用容器管理员
[*]Application PDB Administrator:应用PDB管理员
[*]PDB Administrator for hrpdb:hrpdb的管理员。
现在我们可以明显看到Oracle数据库对多租户的支持了。Oracle对数据库管理员角色进行重定义。Oracle Golden Gate架构部署模式
https://pic4.zhimg.com/80/v2-7d7ce08a2ba050dbf48864569fc1aaff_720w.jpg

[*]单向同步
[*]双向同步(Failover)
[*]点对点(负载均衡、HA)
[*]广播数据分发
[*]合并(数据仓库、存储、集市)
[*]级联(弹性、数据库分层)
OGG经典架构组件
https://pic4.zhimg.com/80/v2-78c6b3e73fef69a75126b18467e25077_720w.jpg
流程解析:
[*]Extract过程

[*]Extract进程source解析操作,并写入到Trail文件中
[*]Data Pump从Trail文件中读取操作数据,并通过网络发送

[*]Replicat过程

[*]Collector接收Data Pump发送过来的数据,并写入到Trail文件
[*]Replicat读取Trail文件,并将数据写入到Target端
大家可以看到,Trail是核心数据文件,而整个过程其实还是经典的:source - transform -sink 模式。和Flume的流程有点类似。Extract进程负责对接source阶段,采集数据操作以及变更,Data Pump进程可以负责数据的转换与分发,而Replicat进程可以将数据下沉到Target端。ggsciggsci是ogg的软件命令界面。我们可以使用ggsci配置各个组件。Manager进程
[*]OGG的控制进程,每个OGG端都需要运行Manager,然后在运行Extract或者Replicat进程
[*]在执行Extract(提取)和Replicat(复制)时,Manager进程必须保持运行,它会负责资源管理工作
[*]一个Manager进程可以控制多个Extract和Replicat进程
功能:
[*]启动Ogg
[*]启动动态进程
[*]维护进程端口号
[*]根据保留策略清楚trail file
[*]创建event、error或者threshold(阈值)报告
Data Pump配置了Data Pump(数据泵),在数据提取过程(Extract)会将所有的操作写入到源端数据库上的trail file中。Data Pump读取trail文件,并将数据通过网络发送到目标端数据库上的目标trail文件。Data Pump可以执行数据过滤、映射、以及转换工作。可以根据需要来配置Data Pump:
[*]执行数据操作:将Data Pump配置为执行数据过滤、映射和转换。
[*]不执行任何数据操作:直通模式,将数据原样发送。这种方式Data Pump的吞吐量最高。
CollectorCollector由Manager进程启动,在target端后台运行。它将事务数据重新组合到目标的trail中。当Manager接收到来自Extract进程的连接请求时,Collector绑定到可用的端口上,并将端口号发送给Manager以分配给请求的Extract进程。Collector接收Extract发送的捕获数据,将数据写入到远程的trail文件。每个Extract都有一个Collector,当关联的Extract终止时,Collector也会自动终止。部署规划| 角色/节点 | ha-node1 | ha-node2 | ha-node3 | ha-node4 | ha-node5 | | --------------- | -------- | -------- | -------- | -------- | -------- | | oracle | √ | | | | | | ogg for oracle | √ | | | | | | ogg for bigdata | | √ | | | |Oracle创建Oracle用户useradd oracle
上传安装包$ ll
总用量 2631532
-rw-r--r-- 1 root   root   2694664264 3月12 12:34 oracle-database-ee-19c-1.0-1.x86_64.rpm
-rw-r--r-- 1 oracle oracle      18204 3月15 09:11 oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

安装
# 安装预安装rpm(安装Oracle所需依赖)
sudo yum install -y oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

# 安装oracle
sudo yum localinstall -y oracle-database-ee-19c-1.0-1.x86_64.rpm配置Oracle
sudo /etc/init.d/oracledb_ORCLCDB-19c configure
配置环境变量
#vim .bashrc

export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export PATH=$PATH:/opt/oracle/product/19c/dbhome_1/bin
export ORACLE_SID=ORCLCDB
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"

启动Oracle
su oracle

sqlplus / as sysdba
# 启动服务
startup
# 退出命令窗口
exit

cd $ORACLE_HOME/bin   #定位到bin目录
lsnrctl start#启动监听

修改管理员密码
alter user sys identified by 123456;alter user system identified by 123456;
客户端连接
https://pic4.zhimg.com/80/v2-369f3719236cd8334fe2a8cf9d145557_720w.jpg
部署Kafka集群为了能够测试Ogg和Kafka整合。需要先部署好Kafka集群。创建Kafka用户
# 在所有
useradd kafka
上传解压
$ ll
总用量 60824
-rw-r--r-- 1 kafka kafka 62283588 3月15 10:16 kafka_2.12-2.4.0.tgz

# 解压
$ tar xvzf kafka_2.12-2.4.0.tgz -C /opt/

配置Kafka
# 第21行
broker.id=0
# 第60行
log.dirs=/data/kafka-logs
# 第123行
zookeeper.connect=ha-node1:2181,ha-node2:2181,ha-node3:2181,ha-node4:2181,ha-node5:2181
分发到每个节点
scp -r /opt/kafka_2.12-2.4.0 ha-node1:/opt; \
scp -r /opt/kafka_2.12-2.4.0 ha-node2:/opt; \
scp -r /opt/kafka_2.12-2.4.0 ha-node3:/opt; \
scp -r /opt/kafka_2.12-2.4.0 ha-node4:/opt; \
scp -r /opt/kafka_2.12-2.4.0 ha-node5:/opt

# 修改权限
ssh ha-node1 "chown -R kafka:kafka /opt/kafka_2.12-2.4.0 "; \
ssh ha-node2 "chown -R kafka:kafka /opt/kafka_2.12-2.4.0 "; \
ssh ha-node3 "chown -R kafka:kafka /opt/kafka_2.12-2.4.0 "; \
ssh ha-node4 "chown -R kafka:kafka /opt/kafka_2.12-2.4.0 "; \
ssh ha-node5 "chown -R kafka:kafka /opt/kafka_2.12-2.4.0 "

挨个修改每个节点的broker id
# vim /opt/kafka_2.12-2.4.0/config/server.properties
# 第21行
broker.id=1/2/3/4

创建超链接
ssh ha-node1 "ln -s /opt/kafka_2.12-2.4.0 /opt/kafka"; \
ssh ha-node2 "ln -s /opt/kafka_2.12-2.4.0 /opt/kafka"; \
ssh ha-node3 "ln -s /opt/kafka_2.12-2.4.0 /opt/kafka"; \
ssh ha-node4 "ln -s /opt/kafka_2.12-2.4.0 /opt/kafka"; \
ssh ha-node5 "ln -s /opt/kafka_2.12-2.4.0 /opt/kafka"
启动Kafka集群
# 先启动ZK
su zookeeper
start-all.sh

# 在所有节点执行
su kafka
cd /opt/kafka
nohup bin/kafka-server-start.sh config/server.properties &简单测试
bin/kafka-topics.sh --list --bootstrap-server ha-node1:9092Ogg for Oracle源端
安装创建ogg用户
useradd ogg -g oracle
上传安装包
su - ogg

$ ll
总用量 641700
-rw-r--r-- 1 root root 556240981 3月15 11:51 191004_fbo_ggs_Linux_x64_shiphome.zip

# 解压ZIP包
unzip 191004_fbo_ggs_Linux_x64_shiphome.zip

cd /home/ogg/fbo_ggs_Linux_x64_shiphome/Disk1编辑参数
cd /home/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response
vim oggcore.rsp

# 修改第37行
INSTALL_OPTION=ORA19c
# 修改第41行
SOFTWARE_LOCATION=/opt/ogg/source_endpoint安装
cd /home/ogg/fbo_ggs_Linux_x64_shiphome/Disk1
/home/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/runInstaller -silent -nowait -responseFile /home/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp配置ogg环境变量
# vim ~/.bashrc

export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export ORACLE_SID=ORCLCDB
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export OGG_HOME=/opt/ogg/source_endpoint
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export PATH=$OGG_HOME:$PATH
export PATH=$PATH:/opt/oracle/product/19c/dbhome_1/bin

# source /etc/profile创建库连接
ln -s $ORACLE_HOME/lib/libnnz19.so /opt/ogg/source_endpoint/libnnz19.so
测试ogg
$ cd /opt/ogg/source_endpoint
$ ldd ggsci
    linux-vdso.so.1 =>(0x00007fffa2f8a000)
    librt.so.1 => /lib64/librt.so.1 (0x00007f84d1612000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f84d140e000)
    libgglog.so => /opt/ogg/source_endpoint/./libgglog.so (0x00007f84d10a8000)
    libggutil.so => /opt/ogg/source_endpoint/./libggutil.so (0x00007f84d0e8c000)
    libggrepo.so => /opt/ogg/source_endpoint/./libggrepo.so (0x00007f84d0bd2000)
    libdb-6.1.so => /opt/ogg/source_endpoint/./libdb-6.1.so (0x00007f84d07bc000)
    liblmdb.so => /opt/ogg/source_endpoint/./liblmdb.so (0x00007f84d05a7000)
    libggperf.so => /opt/ogg/source_endpoint/./libggperf.so (0x00007f84d0375000)
    libggparam.so => /opt/ogg/source_endpoint/./libggparam.so (0x00007f84cec5c000)
    libicui18n.so.62 => /opt/ogg/source_endpoint/./libicui18n.so.62 (0x00007f84ce777000)
    libicuuc.so.62 => /opt/ogg/source_endpoint/./libicuuc.so.62 (0x00007f84ce376000)
    libicudata.so.62 => /opt/ogg/source_endpoint/./libicudata.so.62 (0x00007f84cc35e000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f84cc142000)
    libxerces-c-3.2.so => /opt/ogg/source_endpoint/./libxerces-c-3.2.so (0x00007f84cbace000)
    libantlr3c.so => /opt/ogg/source_endpoint/./libantlr3c.so (0x00007f84cb8b3000)
    libnnz19.so => not found
    libclntsh.so.19.1 => not found
    libclntshcore.so.19.1 => not found
    libggnnzitp.so => /opt/ogg/source_endpoint/./libggnnzitp.so (0x00007f84cad9c000)
    libstdc++.so.6 => /opt/ogg/source_endpoint/./libstdc++.so.6 (0x00007f84caa05000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f84ca703000)
    libgcc_s.so.1 => /opt/ogg/source_endpoint/./libgcc_s.so.1 (0x00007f84ca4ed000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f84ca11f000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f84d221e000)
    libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f84c9f05000)

配置oracle登录
su - oraclesqlplus / as sysdba
查看是否为Archive模式
# 当前是disabled
SQL> archive log list
Database log mode          No Archive Mode
Automatic archival         Disabled
Archive destination      /opt/oracle/product/19c/dbhome_1/dbs/arch
Oldest online log sequence   4
Current log sequence         6
手动打开
# 立即关闭数据库
shutdown immediate
# 启动实例并加载数据库,但不打开
startup mount
# 更改数据库为归档模式
alter database archivelog;
# 打开数据库
alter database open;
# 启用自动归档
alter system archive log start;再次查看Archive模式
SQL> archive log list
Database log mode          Archive Mode
Automatic archival         Enabled
Archive destination      /opt/oracle/product/19c/dbhome_1/dbs/arch
Oldest online log sequence   4
Next log sequence to archive   6
Current log sequence         6
Oracle打开日志相关
SQL> select force_logging, supplemental_log_data_min from v$database;

FORCE_LOGGING
------------------------------------------------------------------------------
SUPPLEMENTAL_LOG
----------------
NO
NO当前为NO,通过以下命令修改:alter database force logging;
alter database add supplemental log data;
再次查看:SQL> select force_logging, supplemental_log_data_min from v$database;

FORCE_LOGGING
------------------------------------------------------------------------------
SUPPLEMENTAL_LOG
----------------
YES
YES
Oracle创建用于复制的用户
su - oracle
# 在/data目录创建ogg文件夹(ORCLCDB为实例名)
mkdir -p /data/ogg/ORCLCDB
创建全局用户
sqlplus / as sysdba

create user ogg identified by 123456 default tablespace oggtbs;
exec dbms_goldengate_auth.grant_admin_privilege('ogg',container=>'all');
grant dba to ogg container=all;开启ogg replication
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE;
打开PDB数据库
show pdbs;

    CON_ID CON_NAME         OPEN MODERESTRICTED
---------- ------------------------------ ---------- ----------
   2 PDB$SEED         READ ONLYNO
   3 ORCLPDB1         MOUNTED执行以下命令:alter pluggable database ORCLPDB1 open;
alter session set container=ORCLPDB1;
commit;
OGG初始化
ggsci
create subdirs
---------------------------------------
$ 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 UTF-8.

Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.



GGSCI (ha-node1) 1> create subdirs

Creating subdirectories under current directory /opt/oracle/product/19c/dbhome_1/lib

Parameter file               /opt/ogg/source_endpoint/dirprm: created.
Report file                  /opt/ogg/source_endpoint/dirrpt: created.
Checkpoint file                /opt/ogg/source_endpoint/dirchk: created.
Process status files         /opt/ogg/source_endpoint/dirpcs: created.
SQL script files               /opt/ogg/source_endpoint/dirsql: created.
Database definitions files   /opt/ogg/source_endpoint/dirdef: created.
Extract data files             /opt/ogg/source_endpoint/dirdat: created.
Temporary files                /opt/ogg/source_endpoint/dirtmp: created.
Credential store files         /opt/ogg/source_endpoint/dircrd: created.
Masterkey wallet files         /opt/ogg/source_endpoint/dirwlt: created.
Dump files                     /opt/ogg/source_endpoint/dirdmp: created.

Oracle创建测试表
su oracle
sqlplus / as sysdba;

alter session set "_ORACLE_SCRIPT"=true
create user test_oggidentified by 123456 default tablespace users;
grant dba to test_ogg;
# ctrl+d退出sqlplus

sqlplus
test_gg/123456

# 创建表
create table test_ogg(id int ,name varchar(20),primary key(id));

Ogg for BigData目标端安装在ha-node2节点上安装Ogg for BigData目标端。上传解压
su - ogg

$ ll | grep OGG_BigData
-rw-r--r-- 1 root root   100855044 3月15 11:30 OGG_BigData_Linux_x64_19.1.0.0.5.zip

# 解压zip包
unzip OGG_BigData_Linux_x64_19.1.0.0.5.zip

# 解压tar包
mkdir -p /opt/ogg/target_endpoint
tar -xvf OGG_BigData_Linux_x64_19.1.0.0.5.tar -C /opt/ogg/target_endpoint
配置环境变量
# vim ~/.bashrc

export OGG_HOME=/opt/ogg/target_endpoint
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server:$JAVA_HOME/jre/lib/amd64/libjsig.so:$JAVA_HOME/jre/lib/amd64/server/libjvm.so:$OGG_HOME/lib
export PATH=$OGG_HOME:$PATH

# source ~/.bashrc测试ggsci命令
$ ggsci

Oracle GoldenGate Command Interpreter
Version 19.1.0.0.200714 OGGCORE_19.1.0.0.0OGGBP_PLATFORMS_200628.2141
Linux, x64, 64bit (optimized), Generic on Jun 28 2020 23:01:58
Operating system character set identified as UTF-8.

Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.



GGSCI (ha-node2) 1>初始化目录
ggscicreate subdirs
Ogg源端配置
配置ogg全局变量
# 进入到ogg中
su - ogg

ggsci

# 以ogg用户登录到oracle
dblogin userid ogg password 123456

# 编辑全局变量
edit param ./globals

# 添加
oggschema ogg配置管理器
edit param mgr

PORT 7809
DYNAMICPORTLIST 7810-7909
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
添加复制表
add trandata CDB$ROOT.test_ogg.test_ogginfo trandata CDB$ROOT.test_ogg.test_ogg
显示信息如下:GGSCI (ha-node1 as ogg@ORCLCDB/CDB$ROOT) 8> info trandata CDB$ROOT.test_ogg.test_ogg

2021-03-15 15:06:57INFO    OGG-10471***** Oracle Goldengate support information on table TEST_OGG.TEST_OGG *****
Oracle Goldengate support native capture on table TEST_OGG.TEST_OGG.
Oracle Goldengate marked following column as key columns on table TEST_OGG.TEST_OGG: ID.

Logging of supplemental redo log data is enabled for table CDB$ROOT.TEST_OGG.TEST_OGG.

Columns supplementally logged for table CDB$ROOT.TEST_OGG.TEST_OGG: "ID".

Prepared CSN for table CDB$ROOT.TEST_OGG.TEST_OGG: 2291122

配置extract进程
edit param extkafka

extract extkafka
dynamicresolution
DDL INCLUDE MAPPED
SETENV (ORACLE_SID = "ORCLCDB")
SETENV (NLS_LANG = "american_america.AL32UTF8")
userid ogg,password 123456
exttrail /opt/ogg/source_endpoint/dirdat/to
sourceCatalog CDB$ROOT
table test_ogg.test_ogg说明:
[*]第一行指定extract进程名称
[*]dynamicresolution——动态解析
[*]SETENV设置环境变量,分别设置了Oracle数据库以及字符集
[*]userid ggs,password ggs——GG连接Oracle数据库的帐号密码
[*]exttrail——定义trail文件的保存位置以及文件名,注意这里文件名只能是2个字母,其余部分OGG会补齐;
[*]table——复制表的表名,支持*通配,必须以;结尾
添加extract进程register extract extkafka database container(ORCLPDB1);2021-03-15 17:55:33INFO    OGG-02003Extract EXTKAFKA successfully registered with database at SCN 2319414.ADD EXTRACT extkafka,INTEGRATED TRANLOG,BEGIN NOW# 删除extkafka进程# delete extract extkafka # extract进程绑定trail文件add exttrail /opt/ogg/source_endpoint/dirdat/to,extract extkafka
配置pump进程
edit param pukafka

extract pukafka
passthru
dynamicresolution
userid ogg,password 123456
rmthost ha-node2 mgrport 7809
rmttrail /opt/ogg/target_endpoint/dirdat/to
sourceCatalog CDB$ROOT
table test_ogg.*;说明:
[*]第一行指定extract进程名称
[*]passthru——禁止OGG与Oracle交互,这里使用pump逻辑传输,故禁止即可
[*]dynamicresolution——动态解析
[*]userid ogg,password ogg——OGG连接Oracle数据库的帐号密码
[*]rmthost和mgrhost——目标端(kafka)OGG的mgr服务的地址以及监听端口(目标端为ha-node2)
[*]rmttrail——目标端trail文件存储位置以及名称(注意修改目标端的trail文件目录)
将本地trail文件和目标端trail绑定到extract进程add extract pukafka,exttrailsource /opt/ogg/source_endpoint/dirdat/to
# 删除pukafka进程
# delete pukafka

add rmttrail /opt/ogg/target_endpoint/dirdat/to,extract pukafka

配置define文件Oracle与MySQL,Hadoop集群(HDFS,Hive,kafka等)等之间数据传输可以定义为异构数据类型的传输,故需要定义表之间的关系映射,在OGG命令行执行:

edit param test_ogg

defsfile /opt/ogg/source_endpoint/dirdef/test_ogg.test_ogg
userid ogg, password 123456
sourceCatalog CDB$ROOT
table test_ogg.test_ogg;
在ogg的HOME目录执行以下:cd /opt/ogg/source_endpoint./defgen paramfile dirprm/test_ogg.prm
若执行成功,显示如下:$ ./defgen paramfile dirprm/test_ogg.prm

***********************************************************************
      Oracle GoldenGate Table Definition Generator for Oracle
      Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054
   Linux, x64, 64bit (optimized), Oracle 19c on Oct 17 2019 15:32:20

Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.

                  Starting at 2021-03-15 16:09:21
***********************************************************************

Operating System Version:
Linux
Version #1 SMP Wed Aug 7 18:08:02 UTC 2019, Release 3.10.0-1062.el7.x86_64
Node: ha-node1
Machine: x86_64
                         soft limit   hard limit
Address Space Size   :    unlimited    unlimited
Heap Size            :    unlimited    unlimited
File Size            :    unlimited    unlimited
CPU Time             :    unlimited    unlimited

Process id: 19127

***********************************************************************
**            Running with the following parameters                  **
***********************************************************************
defsfile /opt/ogg/source_endpoint/dirdef/test_ogg.test_ogg
userid ogg, password ***
table PDB$ROOT.test_ogg.test_ogg;
Could not find table PDB$ROOT.test_ogg.test_ogg.


Definitions generated for 0 tables in /opt/ogg/source_endpoint/dirdef/test_ogg.test_ogg.
将生成的/opt/ogg/source_endpoint/dirdef/test_ogg.test_ogg发送到目标端ogg目录下的dirdef。scp -r /opt/ogg/source_endpoint/dirdef/test_ogg.test_ogg root@ha-node2:/opt/ogg/target_endpoint/dirdef/
Ogg目标端配置启动Kafka集群修改trail文件权限
chown ogg:oracle /opt/ogg/target_endpoint/dirdef/test_ogg.test_ogg
配置管理器mgr
ggsciedit param mgrPORT 7809DYNAMICPORTLIST 7810-7909AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
配置checkpoint
editparam./GLOBALSCHECKPOINTTABLE ogg.checkpoint
配置replicate进程
edit param rekafkaREPLICAT rekafkasourcedefs /opt/ogg/target_endpoint/dirdef/test_ogg.test_oggTARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.propsREPORTCOUNT EVERY 1 MINUTES, RATE GROUPTRANSOPS 10000MAP CDB$ROOT.test_ogg.test_ogg, TARGET CDB$ROOT.test_ogg.test_ogg;
说明:
[*]REPLICATE rekafka定义rep进程名称
[*]sourcedefs——即在在源服务器上做的表映射文件(前面通过scp已经复制到target_endpoint目录)
[*]TARGETDB LIBFILE——定义kafka一些适配性的库文件以及配置文件,配置文件位于OGG主目录下的dirprm/kafka.props
[*]REPORTCOUNT——复制任务的报告生成频率
[*]GROUPTRANSOPS——以事务传输时,事务合并的单位,减少IO操作;
[*]MAP——即源端与目标端的映射关系
配置kafka.props
cd /opt/ogg/target_endpoint/dirprm/vim kafka.props#handler类型gg.handlerlist=kafkahandler gg.handler.kafkahandler.type=kafka# kafka相关配置gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties # kafka的topic名称,无需手动创建gg.handler.kafkahandler.topicMappingTemplate=ogg_test_ogg# 传输文件的格式,支持json,xml等gg.handler.kafkahandler.format=json# OGG for Big Data中传输模式,即op为一次SQL传输一次,tx为一次事务传输一次gg.handler.kafkahandler.mode=opgg.classpath=dirprm/:/opt/kafka/libs/*:/opt/ogg/target_endpoint:/opt/ogg/target_endpoint/lib/*
注意删除上面中的中文注释。配置Kafka属性:# vim custom_kafka_producer.propertiesbootstrap.servers=ha-node1:9092,ha-node2:9092,ha-node3:9092,ha-node4:9092,ha-node5:9092acks=1compression.type=gzipreconnect.backoff.ms=1000value.serializer=org.apache.kafka.common.serialization.ByteArraySerializerkey.serializer=org.apache.kafka.common.serialization.ByteArraySerializerbatch.size=102400linger.ms=10000
添加trail文件到replicate进程ggsciadd replicat rekafka exttrail /opt/ogg/target_endpoint/dirdat/to,checkpointtable ogg.checkpoint
测试启动所有进程源端切换到ha-node1
su - oggcd /opt/ogg/source_endpointggscistart mgrstart extkafkastart pukafka# 停止stop mgrstop extkafkastop pukafka
目标端切换到ha-node2
ggscistart mgrstart rekafka
查看进程状态源端ggsciinfo all
目标端ggsciinfo all------------GGSCI (ha-node2) 1> info allProgram   Status      Group       Lag at ChkptTime Since ChkptMANAGER   RUNNING                                           REPLICAT    RUNNING   REKAFKA   00:00:00      00:00:03
注意:
如果发现状态是STOPPING,则可以在ogg的HOMT目录查看日志文件。less ggserr.log
测试同步更新效果执行以下SQL语句insert into test_ogg.test_ogg values(1,'test');commit;update test_ogg.test_ogg set name='zhangsan' where id=1;commit;delete test_ogg.test_ogg where id=1;commit;
查看trail文件状态源端:GGSCI (ha-node1) 6> $ ls -l /opt/ogg/source_endpoint/dirdat/to*-rw-r----- 1 ogg oracle 2185 3月15 18:02 /opt/ogg/source_endpoint/dirdat/to000000000
目标端:/opt/ogg/target_endpoint/dirdat/to*-rw-r----- 1 root root 1504 May 23 10:31 /opt/ogg/dirdat/to000000
查看Kafka topic和消息bin/kafka-topics.sh --list --bootstrap-server ha-node1:9092bin/kafka-console-consumer.sh --bootstrap-server ha-node1:9092 --topic ogg_test_ogg --from-beginning
安装错误排查 Oracle GoldenGate静默安装失败报错信息: Software Location specified is already an existing Oracle home and does not contain the selected Oracle GoldenGate install type.
   原因: Software Location specified is found registered in the central inventory already and does not contain the selected Oracle GoldenGate install type.
   操作: Specify an empty directory or an Oracle home containing the selected Oracle GoldenGate install type.

解决办法: vim /opt/oracle/oraInventory/ContentsXML/inventory.xml
# 删除下面这一行
<HOME NAME="OraHome2" LOC="/opt/ogg/source_endpoint" TYPE="O" IDX="2"/>
Classic Extract does not support multitenant container databases.报错信息:2021-03-15T15:58:28.563+0800ERROR   OGG-06220Oracle GoldenGate Capture for Oracle, extkafka.prm:Classic Extract does not support multitenant container databases.
2021-03-15T15:58:28.563+0800ERROR   OGG-01668Oracle GoldenGate Capture for Oracle, extkafka.prm:PROCESS ABENDING.
解决办法:# 需要使用register extract extkafka database container(ORCLPDB1);# 注册extkafka到ORCLPDB1
参考文档: https://docs.oracle.com/en/middleware/goldengate/core/19.1/index.html https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/introduction-oracle-goldengate.htm https://docs.oracle.com/en/database/oracle/oracle-database/19/index.html
页: [1]
查看完整版本: Oracle 19c + Oracle Golden Gate 19c CDC实时数据采集实战