oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

一、背景
上一篇文章(单表数据迁移)用kettle实现了一张表的数据迁移。但实际情况中,数据库会有几百,几千张表,而kettle的表输入和表输出只能选择一张表,我们不可能一个个地填写表名。这时候,我们要考虑 通过循环实现多表的数据迁移。

二、前期准备
与单表数据迁移类似

准备好Oracle和MySQL的库,Oracle到Oracle也可以,转移,只是必须提前在kettle文件夹的lib目录下放入各个数据库的依赖。
电脑可以连接Oracle和MySQL。
下载好kettle,并把Oracle和MySQL的驱动包放在kettle文件夹的lib目录下。
如果第一次使用kettle,建议先看上一篇文章 《单表数据迁移》,上一篇很详细地介绍了新建转换、新建节点、新建数据库连接等问题。

三、批量数据迁移
1.读取需要迁移的表(转换)
方法一:从数据库读取所有表

// mysql查询该数据库的所有表
select table_name from information_schema.tables where table_schema=当前数据库名 and table_type=‘base table‘;

 

点击文件——新建——转换,在左侧的 核心对象 标签下选择 输入 下的 表输入,双击添加到右侧的转换面板,再选择 作业 下的 复制记录到结果 ,双击添加到右侧的转换面板。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

接下来配置表输入,双击 表输入 的图标,橙色区域为必填项。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 


新建mysql的数据库连接,数据库连接的配置参考上一篇文章(注意是mysql的连接),新建好连接,记得测试一下是否连接成功。

SQL语句填写的就是mysql查询所有表的语句,table_schema 为你的mysql数据库名。

配置好点击下方的预览,看一下查出来的表名对不对。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 


现在已经把mysql中的表名都查出来,最后会根据这些表名查询oracle的数据库。

复制记录到结果 不需要配置。

保存这个转为“tables in mysql.ktr”。

方法二:从Excel读取所需的表
还有一种方法,是把需要迁移数据的表名写到Excel中,从Excel中读取表名。

如果mysql库和oralce库的表不一一对应,比如mysql中有的表但oracle中没有,那用第一种方法查出的表名,用于转换会报错(因为oracle找不到表)。这时候,筛选出两个库都有的表并写到Excel中,从Excel读取表更合适。

Excel写成下面的格式,读取时会把第一行的内容作为查询出来的字段名。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 


点击文件——新建——转换,在左侧的 核心对象 标签下选择 输入 下的 Excel输入,双击添加到右侧的转换面板,再选择 作业 下的 复制记录到结果 ,双击添加到右侧的转换面板。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 


接下来配置Excel输入,双击 Excel输入 的图标,按以下步骤配置。

首先是 文件 标签。 在文件或目录 那一行点击 浏览,选择上面整理好的Excel表格。再点击 增加,选中的文件 一栏就会出现路径。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 


接下来是 工作表 标签。点击下方的 获取工作表名称,双击选择记录表名的sheet1,点击确定。sheet1就出现在 要读取的工作表列表 中。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 


最后是 字段 标签。点击下面的 获取来自头部数据的字段,开始前,允许清空列的列表。把Excel中的第一行读取为字段名。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

最后点击最下方的预览记录,查看是否正确读取了表名。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

把这个转换保存为“aa.ktr”。

2.把这些表名设置成变量(转换)
新建转换,在左侧的 核心对象 标签下选择 作业 下的 从结果获取记录,双击添加到右侧的转换面板,再选择 作业 下的 设置变量 ,双击添加到右侧的转换面板。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

接下来配置这两个节点。

双击 从结果获取记录,填写字段名称和类型(获取表名时,两种方法的字段都写成了table_name,就是为了这里读取字段时可以统一)。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 


双击 设置变量,字段名称仍然是table_name,为取到的字段取一个变量名,比如“vtable”,变量活动类型如下。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 


把这个转换保存成set table name.ktr。

3.根据变量设置表输入和表输出(转换)
这个步骤和单表迁移的步骤相同,新建一个转换,添加表输入和表输出节点。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

表输入 的配置仍然是新建oracle的数据库连接,填写sql查询语句。与单表迁移不同,查询语句from后不填表名,填写上一步设置的变量名 vtable,这个变量保存了所有的表名。因为还没有把这些步骤关联起来,所以现在不能预览数据。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 


表输出 的配置仍然是新建mysql的数据库连接,但目标表需要填写与表输入一致的变量名 vtable,提交记录数量是指每插入1000条记录commit一次。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

注意:kettle中变量的写法是 ${变量名}。

把这个转换保存成insert data into mysql.ktr。

4.把以上的三个转换连接(作业)
到此为止,我们新建了是三个转换,分别是:

从Excel表读取表名并复制到结果(aa.ktr)

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

或者直接查询表名,复制到结果

 oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

 

从结果获取记录并设置成变量(set table name.ktr)

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

根据变量进行表输入和表输出(insert data into mysql.ktr)

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

接下来把这些转换连接成作业(JOB)。
第一个作业
首先把第2、3个转换结合起来。点击 文件——新建——作业,在左侧的 核心对象 标签下选择 通用,双击添加一个 start ,两个 转换 和一个 成功 到右侧的作业面板,这些作业项都可以改名字。把这个作业保存为insert into mysql.kjb。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 


点击两个转换可以修改作业项名称,点击浏览选择对应的转换。第一个转换对应 set table name.ktr,第二个转换对应 insert data into mysql.ktr。

 oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

第二个作业
接下来把第一个转换与第一个作业结合。点击 文件——新建——作业,在左侧的 核心对象 标签下选择 通用,双击添加一个 start ,一个 转换 ,一个 作业 和一个 成功 到右侧的作业面板,这些作业项都可以改名字。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

配置转换和作业,把转换对应到 tables in mysql.ktr 或者 aa.ktr。把作业对应到 insert into mysql.kjb,同时在execution那里选择 执行每一个输入行 用于循环。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 


这个作业就是最终需要的作业。

5.开始导数
点击作业面板左上角的三角形,运行这个作业。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

点击执行即可。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

执行过程如下,日志记录了迁移的过程。

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

 

 

成功会有提示,过程中出错会终止,执行完作业可以去navicat查看mysql的表。

四、步骤总结
在mysql里查找当前库下有哪些表格,或者从整理好的Excel读取,输出到结果记录
从结果记录里面每次取一行,设置成变量vtable
针对每次使用的变量值,去oracle数据源里生成对应的表输入(通过变量生成)
把变量赋给表输出的表名,其他配置不变,因为表名和字段都和源端oracle是一样的
针对每个“输出到结果记录”做循环,插入每个oracle表的数据到mysql

oracle到mysq,oracle到oraclel的多表批量数据迁移-kettle的使用

上一篇:PostgreSQL 常用函数


下一篇:Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战(详解教程)