马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据
您需要 登录 才可以下载或查看,没有帐号?立即注册
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目标端安装
- 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进程source解析操作,并写入到Trail文件中
- Data Pump从Trail文件中读取操作数据,并通过网络发送
- 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
上传安装包[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
参考文档:
|