南大通用数据技术有限公司 - 1 -
GoldenGate 部署手册
GoldenGate 部署 手册, 南大通用数据技术股份有限公司
GBase 版权所有©2004-2017,保留所有权利。
版权声明
本文档所涉及的软件著作权、版权和知识产权已依法进行了相关注册、登记,由南大通用数
据技术股份有限公司合法拥有,受《中华人民共和国著作权法》、《计算机软件保护条例》、
《知识产权保护条例》和相关国际版权条约、法律、法规以及其它知识产权法律和条约的保
护。未经授权许可,不得非法使用。
免责声明
本文档包含的南大通用公司的版权信息由南大通用公司合法拥有,受法律的保护,南大通用
公司对本文档可能涉及到的非南大通用公司的信息不承担任何责任。在法律允许的范围内,
您可以查阅,并仅能够在《中华人民共和国著作权法》规定的合法范围内复制和打印本文档。
任何单位和个人未经南大通用公司书面授权许可,不得使用、修改、再发布本文档的任何部
分和内容,否则将视为侵权,南大通用公司具有依法追究其责任的权利。
本文档中包含的信息如有更新,恕不另行通知。您对本文档的任何问题,可直接向南大通用
数据技术股份有限公司告知或查询。
未经本公司明确授予的任何权利均予保留。
通讯方式
南大通用数据技术股份有限公司
天津华苑产业区海泰发展六道 6 号海泰绿色产业基地 J 座(300384)
电话:400-013-9696 邮箱:info@gbase.cn
商标声明
是南大通用数据技术股份有限公司向中华人民共和国国家商标局申请注册的注
册商标,注册商标专用权由南大通用公司合法拥有,受法律保护。未经南大通用公司书面许
可,任何单位及个人不得以任何方式或理由对该商标的任何部分进行使用、复制、修改、传
播、抄录或与其它产品捆绑使用销售。凡侵犯南大通用公司商标权的,南大通用公司将依法
追究其法律责任。
GoldenGate 部署手册
南大通用数据技术股份有限公司 I
目 录
1 前言 ......................................................... 1
2 Goldengate 发送端 ............................................. 1
2.1 安装软件包 ........................................... 1
2.2 Oracle 配置 ........................................... 1
2.2.1 开启归档日志 ...................................... 1
2.2.2 开启附加日志 ...................................... 2
2.2.3 开启强制日志模式 .................................. 2
2.2.4 创建表空间与用户 .................................. 2
2.2.5 为用户赋权........................................ 3
2.3 Goldengate 配置 ....................................... 3
3 Goldengate 接收端 ............................................. 5
3.1 安装软件包 ........................................... 5
3.2 Kafka ................................................ 5
3.3 Goldengate 安装 ....................................... 6
3.4 JDK 配置 .............................................. 6
3.5 Goldengate 配置 ....................................... 6
4 启动 ........................................................ 10
4.1 发送端 .............................................. 10
4.2 接收端 .............................................. 10
5 异常问题处理 ................................................ 11
5.1 Goldengate 接收端的 replicat 启动异常 1 ................ 11
5.1.1 现象 ............................................ 11
5.1.2 解决办法 ........................................ 11
5.2 Goldengate 接收端的 replicat 启动异常 2 ................ 12
5.2.1 现象 ............................................ 12
5.2.2 解决办法 ........................................ 12
5.3 复制失败 ............................................ 13
5.3.1 现象 ............................................ 13
5.3.2 解决办法 ........................................ 13
5.4 ggsci 启动失败 ....................................... 13
5.4.1 现象 ............................................ 13
5.4.2 解决办法 ........................................ 14
GoldenGate 部署手册
南大通用数据技术股份有限公司 1
1 1 前言
本文档描述 Goldengate_Kafka 同步方案中,Goldengate 的部署。
Goldengate 版本
发送端:Oracle GoldenGate 12.2.0.1.1 release
接收端:OGG_BigData_12.2.0.1.1
OS:RedHat 6.2
Oracle:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
- 64bit Production
JDK:jdk-7u80 - 2 e Goldengate 发送 端
2.1 安装软件包
fbo_ggs_Linux_x64_shiphome.zip
在图形界面运行: fbo_ggs_Linux_x64_shiphome/Disk1/runInstaller
配置 oracle 和 goldengate 环境变量,添加到~/.bash_profile
export ogg_send=/home/oracle/product/goldengate
ORACLE_HOME=/opt/oracle/product/OraHome
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
2.2 e Oracle 配置
2.2.1 开启归档日志
GoldenGate是基于oracle日志变化的捕获,所以为了完整的捕获到oracle
数据库的变化,有必要将归档模式开启。
用 oracle 用户建立归档日志文件夹,以下用 /arch 为例
mkdir /arch - 南大通用数据技术股份有限公司
chown oracle:oracle /arch
SQL> alter system set log_archive_dest_1='location=/arch'
scope=both;
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;
SQL> archive log list;
2.2.2 开启附加日志
SQL> alter database add supplemental log data;
SQL> alter database add supplemental log data (ALL) columns;
SQL> alter system switch logfile;
SQL> select supplemental_log_data_min from v$database;
2.2.3 开启强制日志模式
SQL> alter database force logging;
SQL> SELECT FORCE_LOGGING FROM V$DATABASE;
2.2.4 创建表空间与用户
SQL> create tablespace data_goldengate datafile
'/home/oracle/goldengate_space' size 440m autoextend on;
SQL> create temporary tablespace temp TEMPFILE 'temp01.dbf' SIZE
500m AUTOEXTEND ON;
SQL> create user ogg identified by ogg default tablespace
data_goldengate temporary tablespace temp;
GoldenGate 部署手册
南大通用数据技术股份有限公司 3
2.2.5 为用户赋权
SQL> grant CONNECT,RESOURCE to ogg;
SQL> grant CREATE SESSION,ALTER SESSION to ogg;
SQL> grant SELECT ANY DICTIONARY,SELECT ANY TABLE to ogg;
SQL> grant CREATE TABLE,ALTER ANY TABLE to ogg;
SQL> grant unlimited tablespace to ogg;
2.3 e Goldengate 配置
连接 oracle,创建要同步的表
[oracle11g@localhost ~]$ sqlplus ogg/ogg
SQL> create table gtest(a int, b int, primary key(a));
进入 goldengate 控制台
[root@localhost goldengate]# $ogg_send/ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140727.2135.1_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Aug 7 2014 09:14:25
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2014, Oracle and/or its affiliates. All rights
reserved.
GGSCI (localhost.localdomain) 1>
创建子目录
GGSCI > create subdirs
Creating subdirectories under current directory
/home/oracle/product/goldengate
Parameter files - 南大通用数据技术股份有限公司
/home/oracle/product/goldengate/dirprm: already exists
Report files
/home/oracle/product/goldengate/dirrpt: already exists
Checkpoint files
/home/oracle/product/goldengate/dirchk: already exists
Process status files
/home/oracle/product/goldengate/dirpcs: already exists
SQL script files
/home/oracle/product/goldengate/dirsql: already exists
Database definitions files
/home/oracle/product/goldengate/dirdef: already exists
Extract data files
/home/oracle/product/goldengate/dirdat: already exists
Temporary files
/home/oracle/product/goldengate/dirtmp: already exists
Credential store files
/home/oracle/product/goldengate/dircrd: already exists
Masterkey wallet files
/home/oracle/product/goldengate/dirwlt: already exists
Dump files
/home/oracle/product/goldengate/dirdmp: already exists
创建 extract extkafka
GGSCI> add extract extkafka, tranlog, begin now
GGSCI> edit params extkafka
extract extkafka
userid ogg, password ogg (oracle 实例的用户名和密码)
rmthost 192.168.141.129, mgrport 7810 (goldengate 接收端的 IP 和端
口)
rmttrail /usr/local/ogg/dirdat/oa (goldengate 接收端的数据文件路
径)
table ogg.gtest; (定义 goldengate 输出端表名称)
创建 mgr 和 extract extkafka
GGSCI> edit param mgr
GoldenGate 部署手册
南大通用数据技术股份有限公司 5
PORT 7809
GSSCI> ADD EXTTRAIL /usr/local/ogg/dirdat/oa, EXTRACT extkafka (此
处填写 goldengate 接收端的数据文件路径)
创建 def2ka
GGSCI> edit params def2ka
defsfile /home/oracle/product/goldengate/dirdef/to_kafka.def (此
处填写$ogg_send 路径)
userid ogg,password ogg
table ogg.gtest;
生成表定义文件 to_kafka.def,并拷贝到 goldengate 接收端的 dirdef 下
$ogg_send/defgen paramfile $ogg_send/dirprm/def2ka.prm
scp $ogg_send/dirdef/to_kafka.def
root@192.168.141.129:/usr/local/ogg/dirdef - 3 e Goldengate 接收端
3.1 安装软件包
122011_ggs_Adapters_Linux_x64.zip
jdk-7u80-linux-x64.rpm
kafka_2.11-0.10.1.0.tgz
3.2 K Ka af f ka
解压 kafka_2.11-0.10.1.0.tgz
配置 kafka 路径,添加到~/.bash_profile
export kafka_home=/usr/local/kafka - 南大通用数据技术股份有限公司
3.3 e Goldengate 安装
解 压 122011_ggs_Adapters_Linux_x64.zip , 将 其 中 的
ggs_Adapters_Linux_x64.tar 再次解压并放到目标目录下
配置 goldengate 路径,添加到~/.bash_profile
export ogg_recv=/usr/local/ogg
3.4 J JK DK 配置
安装 java1.7.0
java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64.rpm
java-1.7.0-openjdk-devel-1.7.0.65-2.5.1.2.el6_5.x86_64.rpm
jdk-7u80-linux-x64.rpm
需要对原有 bin 中 java 做替换(如果没有安装 java-1.7.0)
cd /usr/bin/
rm java
ln -s /etc/alternatives/java java
添加配置
echo 'pathmunge /usr/java/jdk1.7.0_80/bin' > /etc/profile.d/jdk.sh
[root@v178 software]# vim ~/.bash_profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/java/jdk1.7.0_80/jr
e/lib/amd64/libjsig.so:/usr/java/jdk1.7.0_80/jre/lib/amd64/server/li
bjvm.so:/usr/java/jdk1.7.0_80/jre/lib/amd64/server:/usr/java/jdk1.7.
0_80/jre/lib/amd64
export JAVA_HOME=/usr/java/jdk1.7.0_80
3.5 e Goldengate 配置
进入 goldengate 控制台
GoldenGate 部署手册
南大通用数据技术股份有限公司 7
[root@v178 ogg]# $ogg_recv/ggsci
Oracle GoldenGate Command Interpreter
Version 12.2.0.1.160419
OGGCORE_12.2.0.1.0OGGBP_PLATFORMS_160430.1401
Linux, x64, 64bit (optimized), Generic on Apr 30 2016 16:21:34
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2016, Oracle and/or its affiliates. All rights
reserved.
GGSCI (v178) 1>
创建子目录
GGSCI (v178) 1> create subdirs
Creating subdirectories under current directory /usr/local/ogg
Parameter files /usr/local/ogg/dirprm: created
Report files /usr/local/ogg/dirrpt: created
Checkpoint files /usr/local/ogg/dirchk: created
Process status files /usr/local/ogg/dirpcs: created
SQL script files /usr/local/ogg/dirsql: created
Database definitions files /usr/local/ogg/dirdef: created
Extract data files /usr/local/ogg/dirdat: created
Temporary files /usr/local/ogg/dirtmp: created
Credential store files /usr/local/ogg/dircrd: created
Masterkey wallet files /usr/local/ogg/dirwlt: created
Dump files /usr/local/ogg/dirdmp: created
拷贝配置文件
cd $ogg_recv/AdapterExamples/big-data/kafka
cp * $ogg_recv/dirprm/
配置 kafka.props
vim $ogg_recv/dirprm/kafka.props 南大通用数据技术股份有限公司
gg.handlerlist = kafkahandler
gg.handler.kafkahandler.type = kafka
gg.handler.kafkahandler.KafkaProducerConfigFile =
custom_kafka_producer.properties
gg.handler.kafkahandler.TopicName = oggtopic (Kafka topic 的名字)
gg.handler.kafkahandler.format = json (用 JSON格式输出到 Kafka,
还可以是 avro_op、XML 等格式)
gg.handler.kafkahandler.SchemaTopicName = mySchemaTopic (向这个
topic 发送数据库的信息,可以不设置)
gg.handler.kafkahandler.BlockingSend = true
gg.handler.kafkahandler.includeTokens = false
gg.handler.kafkahandler.mode = tx
gg.handler.kafkahandler.format.jsonDelimiter = ,
gg.handler.kafkahandler.format.includePrimaryKeys = true (json
格式中加入主键信息)
gg.handler.kafkahandler.maxGroupSize = 100, 1Mb
gg.handler.kafkahandler.minGroupSize = 50, 500Kb
goldengate.userexit.utf8mode=true
goldengate.userexit.timestamp = utc
goldengate.userexit.writers = javawriter
javawriter.stats.display = TRUE
javawriter.stats.full = TRUE
gg.log = log4j
gg.log.level = INFO
gg.report.time = 30sec
gg.classpath=dirprm/:/usr/local/kafka/libs/* ( 此 处 应 该 填 写
$kafka_home 下 的 libs 目
录):/usr/java/jdk1.7.0_80/jre/lib:/usr/java/jdk1.7.0_80/jre/lib/rt.
jar:/usr/local/ogg(此处填写$ogg_recv 路径)
javawriter.bootoptions=-Djava.class.path=/usr/java/jdk1.7.0_80/j
re/lib:/usr/java/jdk1.7.0_80/jre/lib/rt.jar:/usr/local/ogg:/usr/loca
l/ogg/ggjava/ggjava.jar(此处填写$ogg_recv 的路径)
配置 custom_kafka_producer.properties
GoldenGate 部署手册
南大通用数据技术股份有限公司 9
vim $ogg_recv/dirprm/custom_kafka_producer.properties
bootstrap.servers=192.168.6.178:9092,192.168.6.179:9092,192.168.
6.180:9092 (Kafka Server 的 IP 和端口)
acks=all
compression.type=gzip
reconnect.backoff.ms=1000
value.serializer=org.apache.kafka.common.serialization.ByteArray
Serializer
key.serializer=org.apache.kafka.common.serialization.ByteArraySe
rializer
100KB per partition
batch.size=102400
linger.ms=10000
max.request.size=10240000
send.buffer.bytes=10240000
配置 rkafka.prm
vim $ogg_recv/dirprm/rkafka.prm
REPLICAT rkafka (对应的 replicat 名字)
-- Trail file for this example is located in "AdapterExamples/trail"
directory
-- Command to add REPLICAT
-- add replicat rkafka, exttrail AdapterExamples/trail/tr
sourcedefs /usr/local/ogg/dirdef/to_kafka.def(此处填写$ogg_recv
的路径,to_kafka.def 是从 goldengate 生产端拷贝而来的表定义信息)
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props (此
处填写对应的.props)
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 10000 (一次 kafka 消息可以合并的最大 json 事务数)
MAP ogg.gtest, TARGET bdtest.gtest; (将 goldengate 输出端表名称
和接收端表名称一一对应,可以配置多个对应关系,每个一行)
MAP ogg.ts, TARGET bdtest.ts, COLMAP(USEDEFAULTS, target_colum
n = @DATE('YYYY-MM-DD HH:MI:SS', 'YYYY-MM-DD HH:MI:SS', source_colum
- 南大通用数据技术股份有限公司
n)); (如果表中有 timestamp 和 date 字段,需要对相应的列做格式转换,
target_column 是目标表的列名,source_column 是源表的列名。source_colum
n 不能有下划线,target_column 要设为与 source_column相同)
创建 mgr 和 replicat rkafka
GGSCI> edit param mgr
PORT 7810
GGSCI> add replicat rkafka, exttrail dirdat/oa, begin now (dirdat/oa
的名称应和 goldengate 输出端配置相一致)
注意:如果有多个 topic,则需要配置多组.props 和.prm 文件,创建多个
replicat - 4 启动
需要 kafka 服务器已配置好并正常启动运行,创建好相关 topic
4.1 发送端
GGSCI> start mgr
GGSCI> start extkafka
4.2 接收端
GGSCI> start mgr
GGSCI> start rkafka
GoldenGate 部署手册
南大通用数据技术股份有限公司 11 - 5 异常问题处理
5.1 G Ge oldengate 接收端 的 t replicat 启动异常 - 1
5.1.1 现象
GGSCI (ogg.gbase.cn) 11> start replicat rkafka
Sending START request to MANAGER ...
REPLICAT RKAFKA starting
报错信息如下
2016-11-13 22:39:29 INFO OGG-00987 Oracle GoldenGate Command
Interpreter: GGSCI command (gbase): info all.
2016-11-13 22:39:29 INFO OGG-15052 Oracle GoldenGate
Delivery, rkafka.prm: Using Java class path:
ggjava/ggjava.jar:ggjava/resources/lib/optional/log4j-1.2.17.jar:ggj
ava/resources/lib/optional/slf4j-log4j12-1.7.6.jar.
2016-11-13 22:39:29 ERROR OGG-15050 Oracle GoldenGate
Delivery, rkafka.prm: Error loading Java VM runtime library: (2 No such
file or directory).
2016-11-13 22:39:29 ERROR OGG-01668 Oracle GoldenGate
Delivery, rkafka.prm: PROCESS ABENDING.
5.1.2 解决办法
修改 JAVA_HOME,没有效果
echo $JAVA_HOME
/usr/java/jdk1.7.0_80 => /usr/java/jdk1.7.0_80/jre - 南大通用数据技术股份有限公司
修改 LD_LIBRARY_PATH,没有效果。
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/java/jdk1.7.0_80/jre/lib/a
md64/libjsig.so:/usr/java/jdk1.7.0_80/jre/lib/amd64/server/libjvm.so
:/usr/java/jdk1.7.0_80/jre/lib/amd64/server:/usr/java/jdk1.7.0_80/jr
e/lib/amd64
修改.bash_profile 和 kafka.props 中的 classpath,没有效果。
vi dirprm/kafka.props
javawriter.bootoptions=-Xmx512m -Xms32m
-Djava.class.path=/usr/local/ogg: /usr/local/ogg/ggjava/ggjava.jar
按网上的说法,配置 LD_LIBRARY_PATH 即可,但通过 GGSCI 接口执行 start
replicat rkafka 仍然失败(报同样的错误)。
最后通过手工执行如下命令成功启动。
$ogg_recv/replicat paramfile $ogg_recv/dirprm/rkafka.prm
注:这是最早配置时出现的情况,按照目前的配置可以直接执行 start
rkafka。如果遇到相同问题可以关闭再重启 mgr
5.2 G Ge oldengate 接收端的 t replicat 启动异常 - 2
5.2.1 现象
ERROR OGG-15051 Java or JNI
exception:oracle.goldengate.util.GGException: Exception while
trying to send producer record to blocking kafka producer:.
5.2.2 解决办法
打开 gg.log.level=DEBUG
看到如下错误信息:
GoldenGate 部署手册
南大通用数据技术股份有限公司 13
ERROR [main] (BlockingKafkaProducer.java:65) - Exception while
trying to send producer record to blocking kafka producer:
org.apache.kafka.common.errors.RecordTooLargeException: The message
is 2110878 bytes when serialized which is larger than the maximum request
size you have configured with the max.request.size configuration.
消息大小超过了 max.request.size 的设置
在 dirprm/custom_kafka_producer.properties 设置:
max.request.size=10240000
send.buffer.bytes=10240000
待验证:据说能够支持的最大数据量是 2G-1
5.3 复制失败
5.3.1 现象
2016-11-13 23:24:50 INFO OGG-06505 Oracle GoldenGate
Delivery, rkafka.prm: MAP resolved (entry ogg.gtest): MAP
"OGG"."GTEST", TARGET ogg.gtest.
2016-11-13 23:24:50 ERROR OGG-00423 Oracle GoldenGate
Delivery, rkafka.prm: Could not find definition for OGG.GTEST.
2016-11-13 23:24:50 ERROR OGG-01668 Oracle GoldenGate
Delivery, rkafka.prm: PROCESS ABENDING.
5.3.2 解决办法
需在 rkafka.prm 中增加
sourcedefs /opt/ogg_adapter_bigdata/dirdef/to_kafka.def
5.4 i ggsci 启动 失败
5.4.1 现象
./ggsci: error while loading shared libraries: libnnz11.so: cannot
open shared object file: No such file or directory - 南大通用数据技术股份有限公司
5.4.2 解决办法
需要配置环境变量
ORACLE_HOME=/opt/oracle/product/OraHome
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
GoldenGate 部署手册
南大通用数据技术股份有限公司 15
添加新评论0 条评论