利用kettle实现oracle到mysql数据库增量同步方案(自创)

时间:2024-03-15 07:29:41

 近期涉及一个BI项目初期阶段,构建数据仓库时遇到不少问题,主要问题,来源已下几个方面:

     1 不同业务数据放在不同类型的数据库(oracle和mysql的,excel等等)。

     2 源端数据库种类不同,表结构创建语句与设计不一,导致不好同步问题。

     3 源端数据库只提供只读状态,无法对源端做起停和写操作。

     4 源数据库中没有定义和更新时间字段无法做到增量同步。

     于是纠结与选什么类型的同步方案。

   其实方案很多,比如oracle中sqldevelop中的sqlload,也尝试使用mysql的mysqldump,python,OGG,可以说只有实践才知道各有缺点。详细请看https://www.cnblogs.com/andy6/p/6959028.html。就知道  为什么选择kettle当做选择方案?

下面具体介绍如何使用kettle实现oracle到mysql增量同步,也是做一个总结。

1 选择服务(cpu,磁盘空间,内存尽量好点,安装 Ubuntu,下载安装kettle软件,安装mysql。kettle安装和mysql安装很简单,  注意的是安装完kettle需要的lib打oracle和mysql的jar包。否则无法远程连接数据库。配置主机网卡,保证网络通畅。

2 打开kettle,新建事务,增加控件文本文件输入,复制记录到结果:文件输入打开其实就是你需要同步的文本文件,文本文件中的内容就是你需要同步的表名称。这里需要把表名称赋值给一个字段值。 利用kettle实现oracle到mysql数据库增量同步方案(自创)

利用kettle实现oracle到mysql数据库增量同步方案(自创)利用kettle实现oracle到mysql数据库增量同步方案(自创)

3 获取到结果后,我们需求把结果赋值给一个变量。做好分开事务编写。并定义变量名称。适用于整个循环。

利用kettle实现oracle到mysql数据库增量同步方案(自创)利用kettle实现oracle到mysql数据库增量同步方案(自创)

4 新建事务,创建各个数据库链接,创建表输入和表输出。注意表输入和表输出变量的运用和提交次数。

(我这里是因为中间数据仓库用的mysql,因为每张表几乎没有时间字段,如果有编辑时间字段,建议新增变量,以时间作为增量同步的时间戳,所以在oracle端为每张表创建了增量物化视图。每张表增量同步的只同步生产业务表的不等于自身增量物化视图的数据,以表的伪列rowid作为增量的唯一标示和判断是否是增量的条件。每张表同步完后,会定制任务重新立即刷新增量物化视图,这样循环,就会做到增量同步的效果,又不会有数据缺损,之前也做过全量数据同步,时间是增量同步的几十倍,可见数据量大了,只有利用增量同步效果才是最佳。)

1 创建数据库链接

利用kettle实现oracle到mysql数据库增量同步方案(自创)2 创建表输入输出。利用kettle实现oracle到mysql数据库增量同步方案(自创)利用kettle实现oracle到mysql数据库增量同步方案(自创)

4 在oracle端创建增量物化视图,这里需要先创建物化视图日志,在创建增量物化视图,mysql端类似oracle的表结构。mysql

端创建相同的表结构时会遇到很多问题。(1 同步数据产生乱码问题, mysql数据库链接出增加utf8利用kettle实现oracle到mysql数据库增量同步方案(自创)

2 批量创建表语句这里使用了网上给的fnc_table_to_mysql函数,批量生产mysql端的建表语句,但是结构差强人意,需要自己调整才能在mysql端创建,问题有oraclenumber在mysql端往往不能定义int,必须是bigint 长度问题。varchar问题等,遇到具体问题,需要查看kettle的报错日志解决。)

5 数据库链接建好之后,在mysql端创建相同表结构后,接下来常见job.我这里job都是运用之前创建好的事务,最后一个是刷新物化增量物化视图用的, 意思就是向mysql每次同步完增量数据后,继续刷新oracle增量物化视图,这样才不会产生时间差数据未同步问题。


利用kettle实现oracle到mysql数据库增量同步方案(自创)

6 新建job,制定自动化任务。把第一个事务和后面创建的job进行组合成一个自动化流程,这里注意无法一个jOB实现所有功能,因为有个变量循环问题。可以定义每10分中刷新一次,或者每天刷新一次。这里看具体需求。

利用kettle实现oracle到mysql数据库增量同步方案(自创)

利用kettle实现oracle到mysql数据库增量同步方案(自创)

7 mysql到mysql的数据同步。

建议federated引擎表。可以远程实时访问数据。这里具体操作不做陈述。类似与oracle dblink,但是有很大的不同。

利用kettle实现oracle到mysql数据库增量同步方案(自创)

8 这样数据仓库搭建完毕,既能实时访问远程只读mysql对其性能无影响,又能访问oracle,并在自己的数据库构建数据仓库模型。

利用kettle实现oracle到mysql数据库增量同步方案(自创)