一、背景
上一篇文章(单表数据迁移)用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';
点击文件——新建——转换,在左侧的 核心对象 标签下选择 输入 下的 表输入,双击添加到右侧的转换面板,再选择 作业 下的 复制记录到结果 ,双击添加到右侧的转换面板。
接下来配置表输入,双击 表输入 的图标,橙色区域为必填项。如果是两个库表结构一致,导入所有表,可用语句
select table_name from user_tables //
且千万不要在语句后面加分号,会报错。如果只有部分表结构一致且要导入,可用语句来过滤掉源数据库没有的表,否则就会报错。
select table_name from user_tables where table_name!='T_XZQH' and table_name !='BASE_BUSINESS_INFO'
新建mysql的数据库连接,数据库连接的配置参考上一篇文章(注意是mysql的连接),新建好连接,记得测试一下是否连接成功。
SQL语句填写的就是mysql查询所有表的语句,table_schema 为你的mysql数据库名。
配置好点击下方的预览,看一下查出来的表名对不对。