一.同步思路
Mysql数据导入oracle中思路:首先在oracle中建一张和mysql中表中字段一样的表(oracle中的表字段要包含mysql中表的字段),然后再在oracle中建一张只存id的表,当使用kettle的job时,首先执行一个sql查询oracle中的id表的id的最大值(因为mysql中的id设置是自增长的),然后表输入的时候执行sql查询mysql中要导入的表的数据,这里的sql加上条件where id>(oracle中id表的最大值) order by id,这样做是防止下一次执行job时以前已经导入的数据不用再次导入。然后kettle会将mysql查询出来的数据插入到oracle中,同时也将id插入到oracle中的id表中.
二.使用方法
1.首先下载解压后修改D:\kettle\data-integration\simple-jndi\jdbc.properties文件
这里的hyw是msql数据库,procloud是oracle数据库,需求是将mysql中的数据转到oracle中去,驱动是需要自己下载jar包放到D:\kettle\data-integration\libswt\win64(这里电脑是64位的),不然测试连接是不会成功的。
然后在转换》》DB连接建两个数据库,一个源数据库(hyw),一个目标数据库(procloud)
2.接下来在核心对象中拖入表输入,表输出,字段选择
表输入配置的是源数据库,在表输入之前我们设置再次设置一个表输入2,用于查询目标数据中的最大值,防止下次数据导入时起冲突和增量数据。(表输入->字段选择用”复制”)
表输入2的配置(双击表输入2):
这里查询oracle中id表中的最大值,用于做下次插入标记.
表输入:
这里的问号?代表变量,然后勾选替换sql语句中的变量和执行每一行,从步骤插入数据选择上一步配置的表输入2,就可以获得表输入2中的最大值.
字段选择:
点击列映射,
Add两边数据库的字段一一对应.
表输出:
这里的目标表是oracle中的表,是需要从mysql中的表中的数据导入进来.
表输出2:
这里的表是数据导入成功时,将已经导入进的id导入到oracle中存id的表中,记录所有已经导入的id,下次再次进行时,就只用查询最大值,从>最大值开始导入。起到一个标记的作用.
到此我们再保存这个转换,文件是已.ktr结尾的。
接下来在文件》》新建》》作业来新建一个job
这里我start的时候建立了3个并行任务,并行任务的设置如下图:
然后双击转换:
选择刚才我们保存的krt文件,第一次运行会报错,第二次重复选择就行了。
由于这里的需求是mysql的三个表导入到oracle中的三张表,所以建立了3个转换,并且是并行的任务。每一个转换执行一张表。(其实也可以全部放到一个转换中).
然后保存(job文件后缀是.kjb)点击三角就可以运行这个job了
最后可以将这个作业(job)制作成一个为bat文件
然后可以在window中“任务计划程序”设置定时,每隔多少时间去将mysql中的数据导入到oracle中。
到此,数据就可以执行同步了。
若要实现在MYSQL 表1à(导入)ORACLE表2 à(执行存储过程) ORACLE表3
若要实现从表1数据同步到表2中,然后表2执行一个存储过程将数据导入到表3中,那么可以在kettle“转换”中配置一个执行存储过程(如下图):