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

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

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

[复制链接]
跳转到指定楼层
楼主
发表于 2022-8-31 09:39:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 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中的容器表示的是多租户体系结构中的数据、元数据的集合。


可以看到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架构

上述例子中,CDB包含了5个容器:
  • 系统容器(整个CDB)
  • CDB$ROOT
  • PDB$SEED
  • hrpdb
  • salespdb
每个PDB有自己对应的应用,而且不同的PDB使用不同的管理员账户。而SYS用户可以管理CDB$ROOT以及每一个PDB。而在物理结构上,还是有数据库实例、以及数据温恩建的。
带有应用容器的CDB架构

  • 可以看到,上图中有两个容器: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架构部署模式

  • 单向同步
  • 双向同步(Failover)
  • 点对点(负载均衡、HA)
  • 广播数据分发
  • 合并(数据仓库、存储、集市)
  • 级联(弹性、数据库分层)
OGG经典架构组件

流程解析:
  • 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端。
ggsci
ggsci是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的吞吐量最高。
Collector
Collector由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
上传安装包
[AppleScript] 纯文本查看 复制代码
[oracle@ha-node1 ~]$ 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


安装

[AppleScript] 纯文本查看 复制代码
# 安装预安装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
配置环境变量

[AppleScript] 纯文本查看 复制代码
#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
[AppleScript] 纯文本查看 复制代码
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;
客户端连接


部署Kafka集群
为了能够测试Ogg和Kafka整合。需要先部署好Kafka集群。
创建Kafka用户

# 在所有
useradd kafka
上传解压

[AppleScript] 纯文本查看 复制代码
[kafka@ha-node1 ~]$ ll
总用量 60824
-rw-r--r-- 1 kafka kafka 62283588 3月  15 10:16 kafka_2.12-2.4.0.tgz

# 解压
[kafka@ha-node1 ~]$ tar xvzf kafka_2.12-2.4.0.tgz -C /opt/


配置Kafka

[AppleScript] 纯文本查看 复制代码
# 第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

分发到每个节点
[AppleScript] 纯文本查看 复制代码
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

[AppleScript] 纯文本查看 复制代码
# vim /opt/kafka_2.12-2.4.0/config/server.properties
# 第21行
broker.id=1/2/3/4


创建超链接

[AppleScript] 纯文本查看 复制代码
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集群

[AppleScript] 纯文本查看 复制代码
# 先启动ZK
su zookeeper
start-all.sh

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

[AppleScript] 纯文本查看 复制代码
su - ogg

[ogg@ha-node1 ~]$ 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
编辑参数
[AppleScript] 纯文本查看 复制代码
cd /home/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response
vim oggcore.rsp

# 修改第37行
INSTALL_OPTION=ORA19c
# 修改第41行
SOFTWARE_LOCATION=/opt/ogg/source_endpoint
安装
[AppleScript] 纯文本查看 复制代码
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环境变量
[AppleScript] 纯文本查看 复制代码
# 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

[AppleScript] 纯文本查看 复制代码
[ogg@ha-node1 source_endpoint]$ cd /opt/ogg/source_endpoint
[ogg@ha-node1 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模式

[AppleScript] 纯文本查看 复制代码
# 当前是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

手动打开

[AppleScript] 纯文本查看 复制代码
# 立即关闭数据库
shutdown immediate
# 启动实例并加载数据库,但不打开
startup mount
# 更改数据库为归档模式
alter database archivelog;
# 打开数据库
alter database open;
# 启用自动归档
alter system archive log start;
再次查看Archive模式
[AppleScript] 纯文本查看 复制代码
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打开日志相关

[AppleScript] 纯文本查看 复制代码
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;
再次查看:
[AppleScript] 纯文本查看 复制代码
SQL> select force_logging, supplemental_log_data_min from v$database;

FORCE_LOGGING
------------------------------------------------------------------------------
SUPPLEMENTAL_LOG
----------------
YES
YES

Oracle创建用于复制的用户

[AppleScript] 纯文本查看 复制代码
su - oracle
# 在/data目录创建ogg文件夹(ORCLCDB为实例名)
mkdir -p /data/ogg/ORCLCDB

创建全局用户

[AppleScript] 纯文本查看 复制代码
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数据库

[AppleScript] 纯文本查看 复制代码
show pdbs;

    CON_ID CON_NAME           OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
     2 PDB$SEED           READ ONLY  NO
     3 ORCLPDB1           MOUNTED
执行以下命令:
alter pluggable database ORCLPDB1 open;

alter session set container=ORCLPDB1;
commit;
OGG初始化

[AppleScript] 纯文本查看 复制代码
ggsci
create subdirs
---------------------------------------
[ogg@ha-node1 lib]$ 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创建测试表

[AppleScript] 纯文本查看 复制代码
su oracle
sqlplus / as sysdba;

alter session set "_ORACLE_SCRIPT"=true
create user test_ogg  identified 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目标端。
上传解压

[AppleScript] 纯文本查看 复制代码
su - ogg

[ogg@ha-node1 ~]$ 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

配置环境变量
[AppleScript] 纯文本查看 复制代码
# 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命令
[AppleScript] 纯文本查看 复制代码
[ogg@ha-node2 ~]$ 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源端配置
[ha-node1]
配置ogg全局变量

[AppleScript] 纯文本查看 复制代码
# 进入到ogg中
su - ogg

ggsci

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

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

# 添加
oggschema ogg
配置管理器
[AppleScript] 纯文本查看 复制代码
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
显示信息如下:
[AppleScript] 纯文本查看 复制代码
GGSCI (ha-node1 as ogg@ORCLCDB/CDB$ROOT) 8> info trandata CDB$ROOT.test_ogg.test_ogg

2021-03-15 15:06:57  INFO    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进程

[AppleScript] 纯文本查看 复制代码
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:33  INFO    OGG-02003  Extract 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进程

[AppleScript] 纯文本查看 复制代码
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进程
[AppleScript] 纯文本查看 复制代码
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命令行执行:


[AppleScript] 纯文本查看 复制代码
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
若执行成功,显示如下:
[AppleScript] 纯文本查看 复制代码
[ogg@ha-node1 source_endpoint]$ ./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目标端配置
[ha-node2]
启动Kafka集群修改trail文件权限

chown oggracle /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

edit  param  ./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 Chkpt  Time 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> [ogg@ha-node1 source_endpoint]$ 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
安装错误排查[FATAL] [INS-75012] Oracle GoldenGate静默安装失败
报错信息:
[AppleScript] 纯文本查看 复制代码
[FATAL] [INS-75012] 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.


解决办法:
[AppleScript] 纯文本查看 复制代码
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.
报错信息:
[AppleScript] 纯文本查看 复制代码
2021-03-15T15:58:28.563+0800  ERROR   OGG-06220  Oracle GoldenGate Capture for Oracle, extkafka.prm:  Classic Extract does not support multitenant container databases.
2021-03-15T15:58:28.563+0800  ERROR   OGG-01668  Oracle GoldenGate Capture for Oracle, extkafka.prm:  PROCESS ABENDING.

解决办法:
# 需要使用register extract extkafka database container(ORCLPDB1);# 注册extkafka到ORCLPDB1
参考文档:

楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-4-26 07:01

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表