最近需要oracle数据库迁移数据到mysql数据库,用到了kettle spoon 工具,发现工具真的是很强大,好用,单表,多表都可以迁移,下面给大家分享一下使用的过程情况,仅供参考。
工具介绍
kettle spoon是Java语言编写,以图形化的界面来管理数据,并允许在不同数据库间迁移数据。
spoon软件解压后可直接运行,会自动检查Java环境,因此需要提前配置好环境。下面是本机的运行环境:
JDK版本: 1.8
spoon版本:pdi-ce-8.2.0
软件的运行需要添加Java的数据库驱动包,在软件lib文件夹下,添加数据库驱动。
mysql-connector-java-5.0.8-bin.jar
ojdbc6.jar
打开解压后的文件夹,找到并打开spoon.bat,进入spoon软件的界面。如下图所示。
双击转换,可以新建一个转换,设置操作数据库的控件。首先需要做以下两步。
第一步 新建DB连接
DB连接右击,新建DB连接,以当前的需求为例,需要分别建立oracle和mysql两个数据库的连接。
第二步 数据库连接
配置数据库的连接信息,数据库名称,账号,密码等,可以测试连接是否成功。下面是oracle数据库的连接。
改变编码方式(重要)
更改目标数据的编码方式,统一为utf8编码方式,否则会出现乱码。mysql数据库的连接的选项里,添加characterEncoding 设置编码方式为utf8。
数据的迁移可以分为单表的迁移和多表的迁移,两者的处理过程不同,下面将分别介绍。
1 单表迁移
在核心对象,输入下找到表输入,拖动到工作区,同样在输出下,找到表输出,拖动到工作区。在表输入控件右键,按住shift键添加表输入到表输出的传输线。
双击表输入,设置相关的参数。选择数据库连接,这里源数据库是oracle,下面是SQL查询语句,如迁移A1表的数据。
在输出表控件上双击,设置参数,数据库连接,这里是mysql数据库,点击浏览并选择需要迁移的目标表a1。
点击三角符号–运行,弹出执行转换的窗口,默认设置,直接点击run,就开始数据的迁移。
下一步提示,文件已经改变,是否保存?选择是,并当前的作业保存在指定的区域。
程序运行,在控制台可以看到打印的日志信息
打开mysql数据库,双击查看对应的表,可以发现数据已经迁移过来了,这里需要注意的是设置数据库的编码方式。
2 多表迁移
单表的数据迁移比较简单,对多张表的批量迁移,需要将需要处理的数据库的表名存储到文件中,如data.txt,注意:一个表名一行,不要有空格。需要在第一行为其起一个别名,如ORCLDATA。
多表数据的批量迁移主要有三个步骤,分别如下所示:
1)数据输入
在输入选项中添加文本文件输入控件,作业选项中添加复制记录到结果控件。本步骤的作用是从文本中读取表的信息,复制到结果集中。
双击文本文件输入,设计相关参数。浏览方式选中文本文件,并添加到当前的目录下,如下图所示。
在字段标签下,添加文本文件中起的别名ORCLDATA,数据类型为String,点击确定即可。
最后将其保存为数据输入.ktr,ktr是kettle的格式文件,可以用spoon直接打开,方便之后的操作。
2)数据转换
在表输出选项中分别添加从结果获取记录控件,设置变量控件,再次添加表输入控件和表输出控件,并用数据传输线进行连接,结果如下图所示。
双击从结果获取记录控件,设置字段名称,类型等参数。字段名称填写别名ORCLDATA,类型选择String类型。参考如下图所示。
双击设置变量,设置字段名称,变量名,变量活动类型,这里将字段名称和变量名设置为一样,也可以不同,变量活动类型选择vaild in the parent job,点击确定。
双击表输入,设置参数。选择源数据库,SQL语句,这里是oracle数据库,SQL语句需要填入参数形式的变量名。
同样,双击表输出,设置参数属性。选择目标数据库,目标表使用变量${别名},提交记录数量,就是每次处理多少条数据。勾选使用批量插入。
最后将当前设置保存为数据转换.ktr,ktr是kettle的格式文件,可以用spoon直接打开。
3)执行脚本
在核心对象下,通用选项下,分别添加Start控件,转换控件1,转换控件2和成功控件,并用传输线连接,结果如下。
双击转换1,选择执行文件的路径,这里需要选择的是数据输入.ktr文件,自动生成文件相对的路径。设置结果参考下图。
同样设置转换1的参数,选中数据转换.ktr文件,结果如下图所示。
注意还需要设置命名参数,并勾选两个设置,复制上一步结果到命名参数,将所有参数值传递到子转换,命名参数和流列名都设置为了ORCLDATA。结果如下图所示。
完成以上的设置,最后,点击run开始执行数据迁移,根据表中数据的多少决定其执行的快慢,可到数据库中查看数据的导入情况。
注:执行过程中,可能会出现问题,如表结构的字段设置不够,可根据实际的需要调整。若执行出现问题可在下面留言。
博客参考
【1】https://blog.csdn.net/wuzhangweiss/article/details/78408029