Oracle数据同步解决方案之databus

[list][*][b]概述[/b][/list]
目前了解到基于Oracle的开源数据同步项目有yugong、databus、SymmetricDS,之前尝试了yugong,很容易上手。使用时需要注意两点:1、物化视图和回表查询对源库会产生比较大的影响;2、每一个表有一个单独的实例去处理整个流程,数据抽取、转换、入库不能分离;3、yugong设计的目的是为了去IOE,做切库使用,多次增量同步确认后即可停止增量同步。若需要持续增量同步,需要每个表提供一个线程,不支持轮询持续同步。

[list][*][b]databus介绍[/b][/list]
databus是基于SCN的数据同步项目,使用触发器、JOB更新SCN。相对于yugong,其最大的优点在于server、client分离,并提供完善的消费机制。详细可参考:
[quote][url]https://github.com/linkedin/databus[/url][/quote][quote][url]http://databus.majunwei.com/document/Connecting_Databus_to_an_Oracle_Database.html[/url][/quote][quote][url]http://blog.sina.com.cn/s/blog_6c9b83990101bbzq.html[/url][/quote]
[list][*][b]databus使用[/b][/list]
databus使用gradle作为编译工具,执行命令:gradle -Dopen_source=true assemble进行打包,打包时编译一直失败:"UTF-8不可映射字符",尝试了不少网上的的gradle对UTF-8的支持配置方案都不行。后来看了下报错信息,编码问题都集中在同一个类的注释中,就手动更改了类的注释(两个符号),成功编译。

1、创建数据库账户
./createUser.sh [db_name] [db_pwd] 192.168.11.129:1521/ORCL1 [table_space] [/mnt/u001/oracle/data/DB] > /tmp/createUser.out
2、数据库添加字段(txn)、视图、package(SYNC_ALERT、SYNC_CORE)、procedure(COMPILE_ALLOBJECTS)、trigger(before 更新txn)、序列、Jobs(J_CALL_SIGNAL、J_COALESCE_LOG)
./createSchema.sh db_name/db_pwd@192.168.11.129:1521/ORCL1 [tab、view文件位置] > /tmp/createSchema.out
重复执行会在sy$sources表和sync_core_settings表中形成重复数据,需删除。tab和view文件每个表对应一个,tablespace文件中存放表空间名

3、生成EventSchema,进入databus-util-cmdline\databus2-cmdline-tools-pkg下,执行gradle assemble,打包EventSchema生成工具解压,进入bin文件夹执行:
./dbus2-avro-schema-gen.sh -namespace com.linkedin.events.example.person -recordName [tablename] \
-viewName "sy\$person" -avroOutDir /root/databus-master/databus2-example/databus2-example-relay-pkg/schemas_registry -avroOutVersion 1 \
-javaOutDir /root/databus-master/databus2-example/databus2-example-person/src/main/java \
-database jdbc:oracle:thin:@192.168.11.129:1521:ORCL1 -userName [db_name] -password [db_pwd]
执行上述命令:生成实体类、.avsc文件

4、编写server代码:a、编写sources-person.json,每一个表对应一个json文件;b、把上面生成的avsc文件名写在index.schemas_registry中;c、server启动类

5、编写client代码:参考demo

6、编译打包:分别进入到databus2-example-client-pkg和databus2-example-relay-pkg下,运行命令:gradle -Dopen_source=true clean assemble test,将databus-master/build下databus2-example-client-pkg和databus2-example-relay-pkg下distribution文件夹下的tar包拷到linux下,解压,在bin下运行./start-example-relay.sh person和 ./start-example-client.sh person

总结:
1、需要给每一个同步的源表增加一个txn字段,demo中.tab文件中是create语句,若表存在可改为update语句
2、提供了很多脚本文件,基本上都涉及数据库操作,因此执行脚本需要在linux环境且系统支持sqlplus。目前不提供bat文件,无法再window下执行
3、client与server通讯提供http、rm,rmi默认关闭。但测试时发现client端每次启动时都报错,rmi链接被拒绝掉了,不影响使用
4、avsc、实体类需要通过脚本生成,不支持多表批量生成。还需要编写json文件。总之,window下开发不是很方便,需要重构脚本简化准备工作。

参考:[quote][url]http://blog.csdn.net/guojing505123/article/details/51361281[/url][/quote][quote][url]https://github.com/linkedin/databus/wiki/Databus-2.0-Example[/url][/quote]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值