oracle11g通过ogg12同步数据至kafka

  • 环境及软件版本说明
系统环境:CentOS Linux release 7.7.1908 (Core)
	内核版本:3.10.0-1062.el7.x86_64
	内存大小:8G
	磁盘大小:50G
	系统镜像版本:CentOS-7-x86_64-DVD-1908.iso
软件版本:
	JDK: 1.8.0_212
	Oracle数据库:oracle11gR2-2022-01-04.tar.gz
	zookeeper: apache-zookeeper-3.5.7
	kafka: kafka_2.12-3.0.0
	源端OGG: Oracle GoldenGate 12.2.0.2.2 for Oracle on Linux x86-64
	目标端OGG: Oracle GoldenGate for Big Data 12.2.0.1.0 on Linux x86-64
  • 部署说明:
1. 准备两台虚拟机(基本信息及功能参考表格)
2. 这里部署的服务均为单实例
3. 安装源端OGG服务以及目标端OGG服务时,请按照文档操作顺序执行
类别IP地址hostname功能描述
源端环境192.168.10.109oracledb作为oracle11g数据库服务器,承载源端OGG服务
目标端环境192.168.10.110kafka承载kafka服务,zookeeper服务,以及目标端OGG服务

一、源端环境准备

(一)安装Centos系统

暂略

(二)完善基础环境

  • 以root用户完成下述操作
1. 配置网络
# vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="915c1d46-49a5-416d-8cf8-ab7607d3908e"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.10.109
GATEWAY=192.168.10.2
DNS1=192.168.10.2
2. 修改hostname
# vim /etc/hostname

oracledb
3. 修改hosts
# vim /etc/hosts

# 在文件末尾添加
192.168.10.109 oracledb
192.168.10.110 kafka
4. seliux关闭
# vim /etc/selinux/config

#设置
SELINUX=disabled
5. 依赖包安装
yum install gcc make binutils gcc-c++ compalibstdc++-33elfutils-libelf-devel elfutils-libelf-devel-static ksh libaio libaio-develnumactl-devel sysstat unixODBC unixODBC-devel pcre-devel –y
6. 关闭防火墙
# 本地测试关闭防火墙,生产环境根据具体需求调整

systemctl stop firewalld.service
systemctl disable firewalld.service
7. 创建用户和组
# 添加组
groupadd oinstall
groupadd dba

# 创建用户并绑定组
useradd -g oinstall -G dba oracle
passwd oracle  # 设置密码为oracle

id oracle  # 返回 uid=1001(oracle) gid=1001(oinstall) 组=1001(oinstall),1002(dba)
8. 修改内核参数配置文件
# vim /etc/sysctl.conf

# 在末尾添加
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 1073741824
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
9. 修改用户限制文件
# vim /etc/security/limits.conf

# 在末尾添加(具体数值的设置根据自己需求设定)
oracle    soft    nproc    2047
oracle    hard    nproc    16384
oracle    soft    nofile   1024
oracle    hard    nofile   65536
oracle    soft    stack    10240
10. 修改密码设置文件
# vim /etc/pam.d/login

# 在末尾添加
session  required  /lib64/security/pam_limits.so
session  required  pam_limits.so
11. 修改/etc/profile文件
# vim /etc/profile

# 在文件末尾添加
if [ $USER = "oracle" ];then
    if [ $SHELL = "/bin/ksh" ];then
        ulimit -p 16384
        ulimit -n 65536
    else
        ulimit -u 16384 -n 65536
    fi
fi
12. 创建Oracle安装目录和设置文件权限
mkdir -p /u01/app/oracle/product/11.2.0
mkdir /u01/app/oracle/oradata
mkdir /u01/app/oracle/inventory
mkdir /u01/app/oracle/fast_recovery_area
chown -R oracle:oinstall /u01/app
chmod -R 775 /u01/app
14. 安装JDK环境
  • 上传文件到/opt/software
  • 具体命令操作参考
# 解压到/opt/module
tar -zxvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module/

# 设置环境变量
# vim /etc/profile.d/my_env.sh
# 写入内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

# 刷新环境变量
source /etc/profile
15. 重启服务器
reboot

(三)安装Oracle11g

  • 注意:除第1步使用root用户,其余步骤均使用oracle用户
1. 上传Oracle11g安装包
  • 使用root用户执行下面操作
  • 上传文件:上传到/opt/software
  • 具体命令操作参考
# 解压
cd /opt/software
tar xvf oracle11gR2-2022-01-04.tar.gz  # 在/opt/software下得到文件夹 oracle11gR2

# 在 oracle11gR2 文件夹下有两个文件
# linux.x64_11gR2_112010_database_1of2.zip 和 linux.x64_11gR2_112010_database_2of2.zip

# 解压这两个文件
unzip linux.x64_11gR2_112010_database_1of2.zip $$ unzip linux.x64_11gR2_112010_database_2of2.zip

# 解压后,在/opt/software/oracle11gR2文件夹下得到 文件夹 database

# 将/opt/software/oracle11gR2/database 下的文件夹 response 移动到 /home/oracle 文件夹下
mv /opt/software/oracle11gR2/database /home/oracle

# 修改文件权限
chown -R oracle:oinstall /home/oracle/response
chown -R oracle:oinstall /opt/software/oracle11gR2
2. 配置oracle用户的环境变量
  • 注意:切换到oracle,命令su - oracle
  • 修改环境变量后,再执行source /etc/profile
# vim .bash_profile

# 文件末尾添加如下环境变量
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2.0
ORACLE_SID=orcl
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_BASE 
export ORACLE_HOME 
export ORACLE_SID 
export PATH

export ROACLE_PID=ora11g

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib

export LANG="zh_CN.UTF-8"
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'

# 修改环境变量后,刷新环境变量
source /etc/profile
3. 修改安装oracle数据库的配置文件
3.1 修改配置文件
# vim /home/oracle/response/db_install.rsp
# 注意:oracle.install.responseFileVersion 及 oracle.install.db.customComponents 这两个配置参数默认已赋值,不需要改动

oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=oracledb
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oracle/inventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/u01/app/oracle/product/11.2.0
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.isCustomInstall=false
oracle.install.db.customComponents=oracle.server:11.2.0.1.0,oracle.sysman.ccr:10.2.7.0.0,oracle.xdk:11.2.0.1.0,oracle.rdbms.oci:11.2.0.1.0,oracle.network:11.2.0.1.0,oracle.network.listener:11.2.0.1.0,oracle.rdbms:11.2.0.1.0,oracle.options:11.2.0.1.0,oracle.rdbms.partitioning:11.2.0.1.0,oracle.oraolap:11.2.0.1.0,oracle.rdbms.dm:11.2.0.1.0,oracle.rdbms.dv:11.2.0.1.0,orcle.rdbms.lbac:11.2.0.1.0,oracle.rdbms.rat:11.2.0.1.0
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
oracle.install.db.CLUSTER_NODES=
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=orcl
oracle.install.db.config.starterdb.SID=orcl
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=true
oracle.install.db.config.starterdb.memoryLimit=40960
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.enableSecuritySettings=true
oracle.install.db.config.starterdb.password.ALL=oracle
oracle.install.db.config.starterdb.password.SYS=
oracle.install.db.config.starterdb.password.SYSTEM=
oracle.install.db.config.starterdb.password.SYSMAN=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.control=DB_CONTROL
oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=
oracle.install.db.config.starterdb.dbcontrol.enableEmailNotification=false
oracle.install.db.config.starterdb.dbcontrol.emailAddress=
oracle.install.db.config.starterdb.dbcontrol.SMTPServer=
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.automatedBackup.osuid=
oracle.install.db.config.starterdb.automatedBackup.ospwd=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
MYORACLESUPPORT_USERNAME=
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=
3.2 执行命令静默安装oracle11
/opt/software/oracle11gR2/database/runInstaller -silent -responseFile /home/oracle/response/db_install.rsp -ignorePrereq
  • 返回如下结果,即表示静默安装oracle的第一步成功
    静默安装oracle返回的结果
3.3 切换到root用户,执行如下脚本命令
sh /u01/app/oracle/inventory/orainstRoot.sh
sh /u01/app/oracle/product/11.2.0/root.sh

# 这一步执行完成后,继续切换到oracle用户,再执行后面的步骤
su oracle
4. 静默方式配置监听
# 进入文件夹
cd /u01/app/oracle/product/11.2.0/bin

# 执行静默安装的命令
netca -silent -responseFile /home/oracle/response/netca.rsp

# 命令执行成功后,再执行如下命令,返回截图,即为表示监听成功
lsnrctl status

# 这里有个小细节,如果执行上述命令,报错:找不到命令,请看一下你在/home/oracle/.bash_prifile 配置的环境变量生效没

# 也可以执行如下命令 ,查看网络连接和监听端口,判断是否监听成功
netstat  -tunlp |grep 1521

执行lsnrctl status响应结果截图
监听端口

5. 静默方式创建数据库,并创建对应的实例对象
5.1 修改/home/oracle/response/dbca.rsp配置文件
# 注意:RESPONSEFILE_VERSION这个配置参数不要修改
# 字段含义自行查阅

[GENERAL]
RESPONSEFILE_VERSION = "11.2.0"
OPERATION_TYPE = "createDatabase"
[CREATEDATABASE]
GDBNAME = "orcl"
SID = "orcl"
TEMPLATENAME = "General_Purpose.dbc"
SYSPASSWORD = "oracle"
SYSTEMPASSWORD = "oracle"
DATAFILEDESTINATION = /u01/app/oracle/oradata
RECOVERYAREADESTINATION=/u01/app/oracle/fast_recovery_area
CHARACTERSET = "AL32UTF8"
TOTALMEMORY = "13200"
[createTemplateFromDB]
SOURCEDB = "oracledb:1521:orcl"
SYSDBAUSERNAME = "system"
SYSDBAPASSWORD = "oracle"
TEMPLATENAME = "General_Purpose.dbc"
[createCloneTemplate]
SOURCEDB = "orcl"
SYSDBAUSERNAME = "sys"
SYSDBAPASSWORD = "oracle"
TEMPLATENAME = "General_Purpose.dbc"
[DELETEDATABASE]
SOURCEDB = "orcl"
SYSDBAUSERNAME = "sys"
SYSDBAPASSWORD = "oracle"
[generateScripts]
TEMPLATENAME = "General_Purpose.dbc"
GDBNAME = "orcl"
[CONFIGUREDATABASE]
SOURCEDB = "orcl"
SYSDBAUSERNAME = "sys"
SYSDBAPASSWORD = "oracle"
SYSMANPASSWORD = "oracle"
DBSNMPPASSWORD = "oracle"
[ADDINSTANCE]
DB_UNIQUE_NAME = "orcl11g.us.oracle.com"
NODELIST=
SYSDBAUSERNAME = "sys"
[DELETEINSTANCE]
DB_UNIQUE_NAME = "orcl11g.us.oracle.com"
INSTANCENAME = "orcl11g"
SYSDBAUSERNAME = "sys"
5.2 静默创建数据库
# 执行`cd`命令,进入执行文件夹
cd /u01/app/oracle/product/11.2.0/bin

# 执行安装命令
# 这一步安装时间会稍微长一点,会有进度显示,达到100%,且无报错
dbca -silent -responseFile /home/oracle/response/dbca.rsp

# 再执行如下命令
cd ~
sqlplus / as sysdba

# 再执行如下命令,返回如截图所示,即为表示oracle11g安装成功
select status from v$instance;

Oracle数据库启动

5.3 解锁用户(不一定需要执行)
SQL> alter user sys account unlock;
SQL> alter user system account unlock;
SQL> commit;

二、目标端环境准备

(一)安装Centos系统

暂略

(二)完善基础环境

  • 以root用户完成下述操作
1. 配置网络
# vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="915c1d46-49a5-416d-8cf8-ab7607d3908e"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.10.110
GATEWAY=192.168.10.2
DNS1=192.168.10.2
2. 修改hostname
# vim /etc/hostname

kafka
3. 修改hosts
# vim /etc/hosts

# 在文件末尾添加
192.168.10.109 oracledb
192.168.10.110 kafka
4. seliux关闭
# vim /etc/selinux/config

#设置
SELINUX=disabled
5. 关闭防火墙
# 本地测试关闭防火墙,生产环境根据具体需求调整

systemctl stop firewalld.service
systemctl disable firewalld.service
6. 安装JDK环境
  • 上传文件到/opt/software
  • 具体命令操作参考
# 解压到/opt/module
tar -zxvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module/

# 设置环境变量
# vim /etc/profile.d/my_env.sh
# 写入内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

# 刷新环境变量
source /etc/profile
7. 重启服务器
reboot

(三)安装目标端kafka服务

  • 这里的zookeeper及kafka服务均为单节点部署
  • 上传文件到/opt/software
1. 安装zookeeper服务
  • 具体操作命令参考如下
# 注意:如下命令跑通,表示zookeeper安装成功

# 1. 文件解压
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/

# 2. 该文件夹名(在/opt/module下)
mv apache-zookeeper-3.5.7-bin zookeeper-3.5.7

# 3. 配置环境变量
# vim /etc/profile.d/my_env.sh
# ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.5.7
export PATH=$PATH:$ZOOKEEPER_HOME/bin

# 退出vim
# 4. 刷新环境变量
source /etc/profile

# 5. 修改配置文件
# 进入目录
cd /opt/module/zookeeper-3.5.7/conf
# 修改配置文件名字
mv zoo_sample.cfg zoo.cfg
# vim zoo.cfg
# 修改如下配置
dataDir=/opt/module/zookeeper-3.5.7/zkData

# 6. 创建文件夹
mkdir /opt/module/zookeeper-3.5.7/zkData

# 退出vim

# 7. 启动zookeeper
cd /opt/module/zookeeper-3.5.7
bin/zkServer.sh start
# 查看zookeeper启动状态
bin/zkServer.sh status

# 8. 启动客户端
bin/zkCli.sh
# 退出客户端
quit
2. 安装kafka服务
  • 具体操作命令参考如下
2.1 处理安装包

# 1. 文件解压
tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/

# 2. 该文件夹名(在/opt/module下)
mv kafka_2.12-3.0.0 kafka
2.2 修改配置文件
  • 修改 server.properties配置文件
cd /opt/module/kafka/config

# vim server.properties
#具体配置参考如下
broker.id=0
listeners=PLAINTEXT://kafka:9092
host.name=kafka
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/opt/module/kafka/logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=kafka:2181
zookeeper.connection.timeout.ms=18000
auto.create.topics.enable=false
delete.topic.enable=true
group.initial.rebalance.delay.ms=0
  • 修改zookeeper.properties
cd /opt/module/kafka/config

# vim zookeeper.properties
# 具体配置参考如下
dataDir=/opt/module/kafka/datas
clientPort=2181
maxClientCnxns=0
admin.enableServer=false

# 创建文件夹`datas`
mkdir /opt/module/kafka/datas
  • 配置环境变量
# vim vim /etc/profile.d/my_env.sh
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$PATH:$KAFKA_HOME/bin

# 刷新使环境变量生效
source /etc/profile
3. 启动kafka服务
3.1 先验证zookeeper服务是否启动
sh /opt/module/zookeeper-3.5.7/bin/zkServer.sh status

# 返回截图所示即为zookeeper启动成功

zookeeper启动状态

3.2 启动kafka服务
/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties

# 查看日志文件,无报错即表示kafka服务启动成功
vim /opt/module/kafka/logs/server.log

# 也可以通过如下几组命令判断kafka是否可以正常使用
# 查看当前服务器中的所有topic
bin/kafka-topics.sh --bootstrap-server kafka:9092 --list

# 创建一个主题名为first的topic
bin/kafka-topics.sh --bootstrap-server kafka:9092 --create --replication-factor 1 --partitions 1 --topic first

# 查看Topic的详情
bin/kafka-topics.sh --bootstrap-server kafka:9092 --describe --topic first

# 生产者发送消息
bin/kafka-console-producer.sh --broker-list kafka:9092 --topic first
# > hello, kafka

# 消费者从头开始消费消息
bin/kafka-console-consumer.sh --bootstrap-server kafka:9092 --from-beginning --topic first
# hello, kafka

三、OGG安装与配置

  • 注意:这里会在源端和目标端同时安装和配置
  • 注意:Oracle GoldenGate在一下会简称OGG

(一)下载并上传OGG相关的安装包

1. 下载安装包
  • 打开网址 https://edelivery.oracle.com/osdc/faces/SoftwareDelivery,搜索框输入Oracle GolenGate,点击第一个选项
    在这里插入图片描述
  • 再点击这两个
    在这里插入图片描述
  • 点击右上角的View Items,Continue下载文件
    在这里插入图片描述
    在这里插入图片描述
2. 上传安装包
  • 上传Oracle GoldenGate 12.2.0.2.0对应的安装包到源端服务器
  • 上传Oracle GoldenGate for Big Data 12.2.0.1.0对应的安装包到目标端服务器

(二)源端OGG安装包处理

1. 解压安装包
  • 使用root用户进行操作
  • 具体操作命令参考如下
# 使用root用户进行操作
# 创建ogg文件夹
mkdir /u01/app/ogg
chown -R oracle:oinstall /u01/app/ogg/
cd /u01/app/ogg
mv /opt/software/V861007-01.zip ./
unzip V861007-01.zip
2. 安装OGG
  • 使用oracle用户进行操作
  • 具体操作命令参考如下
2.1 配置环境变量
# vim ~/.bash_profile

# 在末尾添加
export OGG_HOME=/u01/app/ogg
export PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$OGG_HOME:$PATH

# 使环境变量生效
source ~/.bash_profile
2.2 修改oggcore.rsp配置文件
cd /u01/app/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response

# vim oggcore.rsp
# oracle.install.responseFileVersion 这个配置项不需要修改

oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v12_1_2
INSTALL_OPTION=ORA11g
SOFTWARE_LOCATION=/u01/app/ogg
START_MANAGER=
MANAGER_PORT=
DATABASE_LOCATION=/u01/app/oracle/product/11.2.0
INVENTORY_LOCATION=/u01/app/oracle/inventory
UNIX_GROUP_NAME=oinstall
2.3 查看安装 OGG所需要的依赖是否都存在
cd /u01/app/ogg/
# 执行依赖检测命令
ldd ggsci

# 正确的返回结果(无 not found)
linux-vdso.so.1 =>  (0x00007ffc34948000)
librt.so.1 => /lib64/librt.so.1 (0x00007fcf1f908000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fcf1f704000)
libgglog.so => /u01/app/ogg/./libgglog.so (0x00007fcf1f301000)
libggrepo.so => /u01/app/ogg/./libggrepo.so (0x00007fcf1f08b000)
libdb-6.1.so => /u01/app/ogg/./libdb-6.1.so (0x00007fcf1eca7000)
libggperf.so => /u01/app/ogg/./libggperf.so (0x00007fcf1ea77000)
libggparam.so => /u01/app/ogg/./libggparam.so (0x00007fcf1d8eb000)
libicui18n.so.56 => /u01/app/ogg/./libicui18n.so.56 (0x00007fcf1d44c000)
libicuuc.so.56 => /u01/app/ogg/./libicuuc.so.56 (0x00007fcf1d07c000)
libicudata.so.56 => /u01/app/ogg/./libicudata.so.56 (0x00007fcf1b219000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fcf1affd000)
libxerces-c-3.1.so => /u01/app/ogg/./libxerces-c-3.1.so (0x00007fcf1a97d000)
libantlr3c.so => /u01/app/ogg/./libantlr3c.so (0x00007fcf1a764000)
libnnz11.so => /u01/app/oracle/product/11.2.0/lib/libnnz11.so (0x00007fcf1a39c000)
libclntsh.so.11.1 => /u01/app/oracle/product/11.2.0/lib/libclntsh.so.11.1 (0x00007fcf17d71000)
libggnnzitp.so => /u01/app/ogg/./libggnnzitp.so (0x00007fcf17629000)
libm.so.6 => /lib64/libm.so.6 (0x00007fcf17327000)
libc.so.6 => /lib64/libc.so.6 (0x00007fcf16f59000)
/lib64/ld-linux-x86-64.so.2 (0x00007fcf1fb10000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fcf16d3f000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fcf16a37000)
libaio.so.1 => /lib64/libaio.so.1 (0x00007fcf16835000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fcf1661f000)
  • 下面是有问题的返回结果
  • 错误原因是:环境变量LD_LIBRARY_PATH未正确配置或未加载
  • 环境变量LD_LIBRARY_PATH的配置参考:export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
  • 环境变量LD_LIBRARY_PATH未加载的解决办法:source ~/.bash_profile
    在这里插入图片描述
2.4 静默安装OGG
cd /u01/app/ogg/fbo_ggs_Linux_x64_shiphome/Disk1
export DISPLAY=oracledb:0.0

# 执行安装ogg的命令
./runInstaller -silent -nowait -responseFile /u01/app/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp
2.5 创建目录
  • 此步骤操作完成后源端ogg算是安装完成
cd /u01/app/ogg
# 执行如下命令
ggsci

# 再创建目录
GGSCI (master) 1> create subdirs

(二)目标端OGG安装包处理

  • 使用root用户进行操作
1. 解压安装包
  • 具体操作命令参考如下
# 使用root用户进行操作
# 创建ogg文件夹
mkdir -p /u01/app/ogg
cd /u01/app/ogg
mv /opt/software/V100447-01.zip ./
unzip V861007-01.zip

tar xvf ggs_Adapters_Linux_x64.tar
2. 配置环境变量
# vim /etc/profile.d/my_env.sh

# 在文件末尾添加
#ogg
export OGG_HOME=/u01/app/ogg
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 /etc/profile
3. 静默安装OGG
3.1 查看安装ogg所需的依赖是否都存在
cd /u01/app/ogg
ldd ggsci

# 返回的正确结果
linux-vdso.so.1 =>  (0x00007fff1c1fa000)
librt.so.1 => /lib64/librt.so.1 (0x00007fa4bd5b2000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fa4bd3ae000)
libgglog.so => /u01/app/ogg/./libgglog.so (0x00007fa4bcf4d000)
libggrepo.so => /u01/app/ogg/./libggrepo.so (0x00007fa4bcccb000)
libdb-6.1.so => /u01/app/ogg/./libdb-6.1.so (0x00007fa4bc8e7000)
libggperf.so => /u01/app/ogg/./libggperf.so (0x00007fa4bc6b2000)
libggparam.so => /u01/app/ogg/./libggparam.so (0x00007fa4bb500000)
libicui18n.so.48 => /u01/app/ogg/./libicui18n.so.48 (0x00007fa4bb111000)
libicuuc.so.48 => /u01/app/ogg/./libicuuc.so.48 (0x00007fa4bad90000)
libicudata.so.48 => /u01/app/ogg/./libicudata.so.48 (0x00007fa4b95cb000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa4b93af000)
libxerces-c.so.28 => /u01/app/ogg/./libxerces-c.so.28 (0x00007fa4b8de9000)
libantlr3c.so => /u01/app/ogg/./libantlr3c.so (0x00007fa4b8bd0000)
libggnnzitp.so => /u01/app/ogg/./libggnnzitp.so (0x00007fa4b80f2000)
libm.so.6 => /lib64/libm.so.6 (0x00007fa4b7df0000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa4b7a22000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa4bd7ba000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fa4b771b000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fa4b7505000)
  • 若上述返回的结果中包含 not found,则表示缺少相关的依赖包
    • 错误原因有两个:环境变量LD_LIBRARY_PATH未正确配置或未加载
    • 具体解决办法,参考源端的相关操作
3.2 创建目录
  • 此步骤操作完成后目标端ogg算是安装完成
cd /u01/app/ogg
# 执行如下命令
ggsci

# 再创建目录
GGSCI (master) 1> create subdirs

四、源端OGG配置

  • 切换到oracle用户进行如下操作

(一)Oracle相关配置进一步完善

1. 开启oracle归档模式
# 连接oracle数据库
sqlplus / as sysdba

SQL> archive log list 
#Database log mode	       No Archive Mode
#Automatic archival	       Disabled
#Archive destination	       USE_DB_RECOVERY_FILE_DEST
#Oldest online log sequence     22
#Current log sequence	       24

# 如果是Disabled,则执行如下SQL命令开启归档模式
#立即关闭数据库
SQL> shutdown immediate
#启动实例并加载数据库
SQL> startup mount
#更改数据库为归档模式
SQL> alter database archivelog
#打开数据库
SQL> alter database open
#启用自动归档
SQL> alter system archive log star

SQL> archive log list 
#Database log mode	       Archive Mode
#Automatic archival	       Enabled
#Archive destination	       USE_DB_RECOVERY_FILE_DEST
#Oldest online log sequence     22
#Next log sequence to archive   24
#Current log sequence	       24

# Enabled表示已开启归档模式
2. 开启oracle强制日志和附加日志
# 连接oracle数据库
sqlplus / as sysdba

# 查看是否开启
SQL> select force_logging, supplemental_log_data_min from v$database;
# 返回,表示未开启
#FORCE_ SUPPLEMENTAL_LOG
#------ ----------------
#NO     NO

#强制日志
SQL> alter database force logging;
#附加日志
SQL> alter database add supplemental log data;

# 再次查看是否开启
SQL> select force_logging, supplemental_log_data_min from v$database;
# 返回均为YES,表示已开启
#FORCE_ SUPPLEMENTAL_LOG
#------ ----------------
#YES     YES
3. 在数据库中创建ogg用户
# 连接oracle数据库
sqlplus / as sysdba

# 可以通过此命令查看当前的表空间和位置
SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;
# 这里会返回一个路径地址:如/u01/app/oracle/oradata/orcl/users01.dbf

# 创建名称为ogg_data的表空间
SQL> create tablespace ogg_data datafile '/u01/app/oracle/oradata/orcl/ogg01.dbf' size 1000M autoextend on;

# 在表空间ogg_data 创建用户ogg,密码也为ogg
SQL> create user ogg identified by ogg default tablespace ogg_data;
# 给ogg用户赋权
SQL> grant connect,resource,dba,create table,create sequence to ogg;
4. 给ogg用户创建student表
# 连接oracle数据库
sqlplus / as sysdba

# 使用ogg连接
SQL> conn ogg/ogg;

# 创建student表
SQL> CREATE TABLE "OGG"."student" 
(
	"sid" NUMBER(8,0), 
	"sname" VARCHAR2(14), 
	"sex" VARCHAR2(13), 
	"class" VARCHAR2(20), 
	 PRIMARY KEY ("sid")
)

# 查看ogg用户的全部表表明
SQL> select table_name from all_tables where owner='OGG';

(二)源端OGG配置

1. 配置mgr
1.1 配置mgr
# 连接ggsci
cd /u01/app/ogg
ggsci

# 配置mgr
GGSCI (master) 1> edit params mgr
# 写入如下内容
PORT 7809
DYNAMICPORTLIST 7810-7909
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
  • 参数解释
    • PORT即mgr的默认监听端口;
    • DYNAMICPORTLIST动态端口列表,当指定的mgr端口不可用时,会在这个端口列表中选择一个,最大指定范围为256个;
    • AUTORESTART重启参数设置表示重启所有EXTRACT进程,最多5次,每次间隔3分钟;
    • PURGEOLDEXTRACTS即TRAIL文件的定期清理
1.2 查看mgr状态
GGSCI (master) 3> start mgr
Manager started.

GGSCI (master) 4> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                           

GGSCI (master) 5> sh netstat -ntpl | grep 7809
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp6       0      0 :::7809                 :::*                    LISTEN      13666/./mgr         
  • 如果 MANAGER = STOPPED,执行view report mgr查看报错信息
2. 添加复制表transdata
GGSCI (master) 6> dblogin userid ogg,password ogg
Successfully logged into database.

GGSCI (master as ogg@ORCL) 7> add trandata "OGG"."student"

# 如果需要添加整个库,可以使用 add trandata "OGG".*

# 查看是否复制成功
GGSCI (master as ogg@ORCL) 8> info trandata "OGG"."student"
# 返回如下结果表示成功
#Logging of supplemental redo log data is enabled for table OGG.STUDENT.
#Columns supplementally logged for table OGG.STUDENT: ID.
#Prepared CSN for table OGG.STUDENT: 220132
3. 配置Extract进程
3.1 配置Extract进程
GGSCI (master as ogg@ORCL) 9> edit params extkaf01

# 添加如下内容
EXTRACT extkaf01
DYNAMICRESOLUTION
SETENV (NLS_LANG= "AMERICAN_AMERICA.AL32UTF8")
SETENV (ORACLE_SID = "orcl")
USERID ogg, PASSWORD ogg
EXTTRAIL /u01/app/ogg/dirdat/to
GETUPDATEBEFORES
NOCOMPRESSDELETES
NOCOMPRESSUPDATES
TABLE "OGG"."student";
  • 字段参数解释
    • 第一行指定extract进程名称,注意不能超过8个字符(ERROR: Invalid group name (must be at most 8 characters).);
    • DYNAMICRESOLUTION 动态解析;
    • SETENV设置数据库环境变量,SID注意大小写;
    • userid ggs,password ggs即OGG连接Oracle数据库的帐号密码;
    • EXTTRAIL定义trail文件的保存位置以及文件名,注意这里文件名只能是2个字母,其余部分OGG会补齐;
    • TABLE即复制表的表名,支持*通配,必须以 ; 结尾;
3.2 添加extract进程
GGSCI (master  as ogg@ORCL) 10> add extract extkaf01,tranlog,begin now
# 返回
EXTRACT added.
3.3 添加trail文件的定义与extract进程绑定
GGSCI (master as ogg@ORCL) 11> add exttrail /u01/app/ogg/dirdat/to,extract extkaf01
# 返回
EXTTRAIL added.
4. 配置Pump进程
4.1 配置Pump进程
GGSCI (master  as ogg@ORCL) 12> edit param pukaf01

# 添加如下内容
EXTRACT pukaf01
PASSTHRU
DYNAMICRESOLUTION
userid ogg,password ogg
RMTHOST 192.168.10.110 MGRPORT 7809
RMTTRAIL  /u01/app/ogg/dirdat/to
TABLE "OGG"."student";
  • 字段参数解释
    • 第一行指定extract进程名称;
    • PASSTHRU即禁止OGG与Oracle交互,我们这里使用pump逻辑传输,禁止即可;
    • DYNAMICRESOLUTION动态解析;
    • userid ogg,password ogg即OGG连接Oracle数据库的帐号密码
    • RMTHOSTMGRPORT即目标端(kafka)OGG的mgr服务的地址以及监听端口;
    • RMTTRAIL即目标端trail文件存储位置以及名称;
    • TABLE 配置表名
4.2 将本地trail文件和目标端的trail文件绑定到extract进程
GGSCI (master as ogg@ORCL) 13> add extract pukaf01,exttrailsource /u01/app/ogg/dirdat/to
EXTRACT added.

GGSCI (master as ogg@ORCL) 14> add rmttrail /u01/app/ogg/dirdat/to,extract pukaf01
RMTTRAIL added.
5. 配置define文件
5.1 配置define文件
GGSCI (master as ogg@ORCL) 15> edit param ogg_test

# 添加如下配置内容
defsfile /u01/app/ogg/dirdef/OGG.student
userid ogg,password ogg
table "OGG"."student";
5.2 生成表映射文件
  • 新打开窗口,切换到oracle用户下,进入OGG_HOME目录下,执行如下命令
[oracle@master ogg]$ ./defgen paramfile dirprm/ogg_test.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 11g on Dec 06 2023 14:27:47
 
Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.

                    Starting at 2021-04-21 10:28:43
***********************************************************************

Operating System Version:
Linux
Version #1 SMP Fri Dec 18 16:34:56 UTC 2020, Release 3.10.0-1160.11.1.el7.x86_64
Node: mirror-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: 26393

***********************************************************************
**            Running with the following parameters                  **
***********************************************************************
defsfile /u01/app/ogg/dirdef/OGG.student
userid ogg,password ***
table test_ogg.test_ogg;
Retrieving definition for OGG.student.


Definitions generated for 1 table in /u01/app/ogg/dirdef/OGG.student.
5.3 将生成的映射文件发送到目标端
  • 将生成的映射文件OGG.student发送到目标端kafka机器ogg目录下的dirdef里
scp -r /u01/app/ogg/dirdef/OGG.student root@192.168.10.110:/u01/app/ogg/dirdef/

五、目标端OGG配置

(一)源端OGG配置

1. 配置mgr
cd /u01/app/ogg
ggsci

GGSCI (kafka) 2> edit param mgr

# 添加如下内容
PORT 7809
DYNAMICPORTLIST 7810-7909
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
2. 添加checkpoint
GGSCI (kafka) 1> edit param ./GLOBALS

# 添加如下内容
CHECKPOINTTABLE OGG.checkpoint
3. 配置replicate进程
GGSCI (kafka) 2> edit param rekaf01

# 添加如下内容
REPLICAT rekaf01
sourcedefs/u01/app/ogg/dirdef/OGG.student
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka01.props
REPORTCOUNT EVERY 1 MINUTES, RATE 
GROUPTRANSOPS 10000
MAP "OGG"."student", TARGET "OGG"."student";
  • 字段参数解释
    • REPLICATE 定义rep进程名称;
    • sourcedefs 是在源端服务器上做的表映射文件;
    • TARGETDB LIBFILE即定义kafka一些适配性的库文件以及配置文件,配置文件位于OGG主目录下的dirprm/kafka01.props (需要自己编辑生成);
    • REPORTCOUNT即复制任务的报告生成频率;
    • GROUPTRANSOPS为以事务传输时,事务合并的单位,减少IO操作;
    • MAP即源端与目标端的映射关系;
4. 配置kafka
cd /u01/app/ogg/dirprm

# vim kafka01.props
#handler类型
gg.handlerlist=kafkahandler
gg.handler.kafkahandler.type=kafka
#kafka相关配置
gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer_01.properties
#kafka的topic
gg.handler.kafkahandler.topicName=test_oracle_ogg_kafka_01
#传输文件的格式,支持json,xml等
gg.handler.kafkahandler.format=json
#OGG for Big Data中传输模式,即op为一次SQL传输一次,tx为一次事务传输一次
gg.handler.kafkahandler.mode=op
gg.classpath=dirprm/:/opt/module/kafka/libs/*:/u01/app/ogg/:/u01/app/ogg/lib/*
5. 配置custom_kafka_producer_01.properties
#kafka 地址
bootstrap.servers=kafka: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=102400
linger.ms=10000
6. 添加trail文件到replicate进程
GGSCI (kafka) 2> add replicat rekaf01 exttrail /u01/app/ogg/dirdat/to,checkpointtable OGG.checkpoint
# 返回
REPLICAT added.

六、 测试

(一)启动源端、目标端所有进程

  • 注意:在源端和目标端的OGG命令行下使用start [进程名]的形式启动所有进程;
  • 注意:启动顺序按照源mgr——目标mgr——源extract——源pump——目标replicate来完成;
  • 注意:全部需要在$OGG_HOME目录下执行ggsci进入ogg命令行;注意启动ggsci必须是在$OGG_HOME目录下!!!
  • 注意:注意启动的用户!!!源端是oracle用户,目标端这里是root用户;
1. 源端启动命令
su oracle
cd /u01/app/ogg
ggsci

# 执行如下命令
GGSCI (master) 1> start mgr   # 启动源mgr
GGSCI (master) 2> start extkaf01  # 启动源extract
GGSCI (master) 3> start pukaf01  # 启动源pump
2. 目标端启动命令
cd /u01/app/ogg
ggsci

# 执行如下命令
GGSCI (master) 1> start mgr
GGSCI (master) 2> start rekaf01
3. 查看启动状态
  • 在源端和目标端执行info all命令
cd /u01/app/ogg
ggsci

# 执行如下命令
GGSCI (kafka) 1> info all

# 源端返回结果
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                           
EXTRACT     RUNNING     EXTKAF01    00:00:00      00:00:02    
EXTRACT     RUNNING     PUKAF01     00:00:00      00:00:07  

# 目标端返回结果
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                           
REPLICAT    RUNNING     REKAF01     00:00:00      00:00:00 

# status 为 RUNNING 表示源端和目标端的进程均正常启动

(二)数据写入测试

1. 目标端kafka监听主题test_oracle_ogg_kafka_01
cd /opt/module/kafka

# 执行命令
bin/kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic test_oracle_ogg_kafka_01
2. 源端操作数据
2.1 写入数据
# 连接到oracle数据
sqlplus / as sysdba
SQL> conn ogg/ogg;
SQL> INSERT INTO "OGG"."student" ("sid", "sname", "sex", "class") VALUES (1001, 'zhangsan', 'Male', '1'); 
SQL> INSERT INTO "OGG"."student" ("sid", "sname", "sex", "class") VALUES (1002, 'lisi', 'Male', '2'); 
SQL> INSERT INTO "OGG"."student" ("sid", "sname", "sex", "class") VALUES (1003, 'wangwu', 'Male', '1'); 
SQL> commit;
2.2 更新数据
SQL> UPDATE "OGG"."student"  SET "sname" = 'zhangsan1', "sex" = 'WoMale',"class" = '1'  WHERE "sid" = 1001;
SQL> commit;
2.3 删除数据
SQL> DELETE FROM OGG.student WHERE sid = 1003;
SQL> commit;
3. 查看目标端同步的数据

在这里插入图片描述

七、参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值