Oracle Golden Gate 使用小结:Windows下的Oracle – Linux下Kafka的数据同步

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BAStriver/article/details/84976550

1.首先,需要先了解OGG的基本概念:ogg概念与机制

2.这篇小结里的源端是Windows下的Oracle(192.168.88.37),目标端是Linux下的Kafka(10.53.127.126)

3.那么到官网下这两个安装包吧:OGG官网

下这两个,别看错了:

1) Oracle GoldenGate 12.2.0.2.3 for Oracle on Windows (64 bit) (327 MB)Oracle GoldenGate 12.2.0.2.3 for Oracle on Windows (64 bit) (327 MB)

2) Oracle GoldenGate for Big Data 12.3.2.1.1 on Linux x86-64 (91 MB)

4.安装好了Oracle的机器上,解压安装包,然后安装,点击setup,如图(源端和目标端都要安装哟):

5. 好了,安装好了之后,设置环境变量,先查看services.msc的Oracle服务如图:

然后设置:

ORACLE_HOME=D:\oracle\product\11.2.0\dbhome_1
ORACLE_SID=ORCL

如图: 

6.源端和目标端的JDK要保证能正常使用,接下来打开Oracle归档模式,总体效果图:

注: 先确保没有别的数据库操作进行中,否则会很卡。

1)打开sqlplus.exe,登录sys账号。

2)之后,打开归档模式,这里值得注意的是,登录Oracle的sys(超级管理员)时,你当前的用户一定要是administrator,其他账号即使是administrator组也不行。执行以下命令先确保Oracle没有执行什么业务先,因为可能需要好几分钟才可以改好。

SQL> archive log list;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;

3)忘记了sys密码吗,那看下图:

这里参考:https://www.cnblogs.com/jiangxinnju/p/7928029.html

 4)在源端打开force logging,输入:

SQL> alter database force logging;

SQL> select force_logging from v$database;

FOR
---
YES

5)在源端打开supplemental log,输入:

SQL> alter database add supplemental log data;

Database altered.


SQL> alter system switch logfile;
 
System altered.

6)在源端关闭回收站,输入:

SQL> alter system set recyclebin=off;

System altered.

如果不行,就输入:

SQL> alter system set recyclebin=off deferred;

7.源端创建ogg的用户:ggs,就用上面登录过的sys账号登录来创建并且授权吧,输入:

SQL> create user ggs identified by 123456 default tablespace users temporary tablespace temp;
SQL> grant connect ,resource,unlimited tablespace to ggs;
SQL> grant execute on utl_file to ggs;
SQL> grant select any dictionary,select any table to ggs;
SQL> grant alter any table to ggs;
SQL> grant flashback any table to ggs;
SQL> grant execute on dbms_flashback to ggs;

8.创建t_ogg表,输入:

SQL> create table t_ogg(id number primary key,text_name varchar2(10));

9.源端 ,去到ogg安装目录下,打开ggsci.exe,输入(自动创建需要用到的文件夹):

create subdirs

然后登录ggs账号,并且添加表级的trandata,输入:

GGSCI (WIN-sjrh38) 5> dblogin userid ggs,password 123456
Successfully logged into database.

GGSCI (WIN-sjrh38 as ggs@orcl) 6> add trandata ggs.demo

Logging of supplemental redo data enabled for table GGS.DEMO.
TRANDATA for scheduling columns has been added on table 'GGS.DEMO'.
TRANDATA for instantiation CSN has been added on table 'GGS.DEMO'.

10.在目标端编辑GLOBAL文件,输入:

edit params ./GLOBALS  -- 自动创建文件,写入后保存就行

dblogin userid ggs,password 123456  -- 登录

checkpointtable ggs.checkpoint   -- 添加这句进去

11.目标端添加checkpoint,ggsci.exe输入:

add checkpointtable ggs.checkpoint

12.配置源端mgr管理进程,输入:

GGSCI (WIN-sjrh38) 72> edit params mgr

文件写入:

port 7500
dynamicportlist 7501-7505
autorestart extract *,waitminutes 2,retries 5

然后输入:start mgr 启动mgr进程 

13.配置源端extract抽取进程,输入:

GGSCI (WIN-sjrh38) 73> edit params ext2hd

文件写入:

extract ext2hd
dynamicresolution
SETENV (ORACLE_SID = "orcl")
SETENV (NLS_LANG = "american_america.AL32UTF8")
userid ggs,password 123456
exttrail D:\oracleGoldenGate12\install\dirdat\tc
table ggs.t_ogg;

然后添加并启动ext2hd进程,输入:

add extract ext2hd,tranlog,begin now

add exttrail D:\oracleGoldenGate12\install\dirdat\tc,extract ext2hd

 14.配置源端的push2hd进程,输入:

GGSCI (WIN-sjrh38) 74> edit params push2hd

文件写入:

extract push2hd
passthru
dynamicresolution
userid ggs,password 123456
rmthost 10.53.127.216 mgrport 7890
rmttrail /opt/tools/ogg/dirdat/tc
table ggs.t_ogg;

然后添加push2hd进程,输入(先不启动push2hd先):

add extract push2hd,exttrailsource D:\oracleGoldenGate12\install\dirdat\tc -- 源端

add rmttrail /opt/tools/ogg/dirdat/tc,extract push2hd -- 目标端

 15.配置define文件(生成被监听表的结构描述文件),在ggsci输入:edit params tcloud,并且写入:

defsfile D:\oracleGoldenGate12\install\dirdef\ggs.t_ogg
userid ggs, password 123456
table ggs.t_ogg;

16.在ogg根目录按住shift+右键选择“在此处打开powershell”,并且输入:

defgen.exe paramfile D:\oracleGoldenGate12\install\dirprm\ggs.prm

17.将dirdef里ggs.t_ogg这个文件拷贝到目标端的OGG主目录下的dirdef目录即可。

18.目标端  解压安装包到/opt/tools/ogg后,cd 到根目录,输入:./ggsci 进入ogg命令行

19.创建项目文件夹,在ggsci中输入:

create subdirs

20.在目标端ggsci输入:edit params mgr ,并且写入:

PORT 7890
PURGEOLDEXTRACTS /opt/tools/ogg/dirdat/*, usecheckpoints, minkeepdays 7
AUTORESTART REPLICAT *,RETRIES 5,WAITMINUTES 1

21.在目标端ggsci输入:edit params oratest ,并且写入:

REPLICAT oratest
SETENV (NLS_LANG= SIMPLIFIED CHINESE_CHINA.AL32UTF8)
TARGETDB LIBFILE libggjava.so SET property=dirprm/oratest.props
DDL INCLUDE ALL
GROUPTRANSOPS 500
MAXTRANSOPS 1000
MAP ggs.t_ogg, TARGET ggs.t_ogg;

其中,dirprm/oratest.props主要是配置kafka和ogg依赖包路径、topic、数据格式,

MAP 和 TARGET 的ggs.t_ogg要和源端配置的监听表名一致。

22.在根目录新建kafka-jars然后放入四个jar:

kafka-clients-0.10.0-kafka-2.1.2.jar , lz4-1.3.0.jar , slf4j-api-1.7.21.jar , snappy-java-1.1.2.6.jar

23.在目标端ggsci输入:

add replicat oratest exttrail, /opt/tools/ogg/dirdat/tc,checkpointtable ggs.checkpoint

24.退出目标端ggsci后,输入:vim dirprm/oratest.props 。 写入:

#输入以下内容并保存
gg.handlerlist = kafkahandler
gg.handler.kafkahandler.type = kafka
gg.handler.kafkahandler.KafkaProducerConfigFile = kafka_producer.properties
##需要和2.4.3 DBus相关配置中数据源设置的Topic相同
gg.handler.kafkahandler.topicMappingTemplate = oratest
gg.handler.kafkahandler.keyMappingTemplate = ${NULL}
##需要和2.4.3 DBus相关配置中数据源设置的SchemaTopic相同
gg.handler.kafkahandler.schemaTopicName = oratest_schema
gg.handler.kafkahandler.format = json
gg.handler.kafkahandler.mode = tx
gg.log = log4j
gg.log.level = INFO
gg.report.time = 30sec
gg.classpath = dirprm/:kafka-jars/*:
javawriter.bootoptions = -Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar

详细参数参考:https://docs.oracle.com/goldengate/bd1221/gg-bd/GADBD/GUID-2561CA12-9BAC-454B-A2E3-2D36C5C60EE5.htm#GADBD460 

25.目标端输入:vim kafka_producer.properties 。 写入:

#输入以下内容并保存
bootstrap.servers=bigdata02:9092,bigdata04:9092,bigdata05:9092
acks=all
#compression.type=snappy
compression.type=gzip
#compression.type=lz4
reconnect.backoff.ms=1000
key.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
value.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
batch.size=5242880
#batch.size=1048576
linger.ms=1000
max.request.size = 10485760

26.在目标端ggsci输入:start mgr

27.在目标端ggsci输入:start oratest 或者退出ggsci输入:./replicat paramfile dirprm/oratest.prm

28.把源端的push2hd启动,ggsci输入:start push2hd

29.测试:在t_ogg表插入数据。

1)如果mgr没有stop就直接断开连接了,那么端口会被一直占用导致mgr不能重启,可以输入:netstat -anp | grep mgr 找到mgr的进程号,并且输入:kill -9 ***

2)查看错误日志打开 根目录的 ggserr.log

3)如果Oracle连接错误显示归档日志已满,使用sqlplus登录sys,输入:alter system set db_recovery_file_dest_size = 30G

4)如果没设置好kafka.props的gg.classpath很有可能会出现:NoSuchMethodError、ClassNotFound等Jar包冲突的问题,所以记得别全部kafka包都导进去,导入上面说的四个就可以了

5)如果设置了kafka.props的gg.handler.kafkahandler.format = json 报错,确保compression.type=gzip

6)遇到:Unable to set property on handler 'kafkahandler' (oracle.goldengate.handler.kafka.KafkaHandler). Failed to set property: TopicName:="test_ogg" ......  那应该是设置:gg.handler.kafkahandler.topicMappingTemplate=test_ogg ,而不是gg.handler.kafkahandler.topicName=test_ogg

7)遇到:ERROR OGG-15050 Error loading Java VM runtime library(2 no such file or directory 。 那应该是找不到类库(配置好环境变量之后,OGG的mgr进程没有重启,导致的)

8)遇到:启动目标端的oratest.prm报错找不到依赖包的问题的话,那你一定把目标端装在了Windows下了吧,别折腾了,反正我弄了一个星期弄不出来,你如果有解决方案的话可以留言下你的博客或者一些建议哦,没有的话还是老老实实装在Linux吧

9)遇到:ERROR OG-15051 Java or JNI exception,应该是没有使用ogg for big data包里面自带的kafka.props,尝试复制/tools/ogg/AdapterExamples/big-data/kafka里的配置文件模板吧

10)遇到Oracle归档日志已满,要删除可以参考:https://blog.csdn.net/QQ578473688/article/details/77800906?utm_source=blogxgwz3

详细文档可下载:https://download.csdn.net/download/bastriver/10846400

源端配置参考:https://www.jianshu.com/p/b1e1fb623f15

目标端配置参考:https://bridata.github.io/DBus/install-oracle-source.html#kafka

猜你喜欢

转载自blog.csdn.net/BAStriver/article/details/84976550