欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle数据同步解决方案之databus

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

  • databus介绍
databus是基于SCN的数据同步项目,使用触发器、JOB更新SCN。相对于yugong,其最大的优点在于server、client分离,并提供完善的消费机制。详细可参考:
引用
引用
引用

  • databus使用
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下开发不是很方便,需要重构脚本简化准备工作。

参考:
引用
引用
相关标签: oracle