- 环境及软件版本说明
系统环境: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.109 | oracledb | 作为oracle11g数据库服务器,承载源端OGG服务 |
目标端环境 | 192.168.10.110 | kafka | 承载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的第一步成功
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
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;
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启动成功
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数据库的帐号密码RMTHOST
和MGRPORT
即目标端(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;