用kettle 进行数据库的迁移--DB2 迁移到 mysql

一、前言

开始给用户提供的整套系统是部署在WAS服务器和DB2数据库上的,由于WAS和DB2都属于IBM收费产品,根据用户需求,为了节省这笔开销,想使用免费开源的数据库和Tomcat服务器。于是数据库选择了MariaDB。这
就涉及到,在不动系统代码的情况下,怎样直接将DB2数据库的表结构、数据、主键、索引等迁移到MariaDB上。接着这个苦差事就落到我头上了。第一次做这类型的工作,在网上找各种数据库迁移的工具,最终选择了kettle这款开源的工具,经过几天下来,终于完成了,特此记录,方便以后查阅。

二、kettle 的使用

Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。
1.新建一个job,创建两个DB连接:source、target(源数据库和目标数据库连接),在菜单中找到【复制多表向导】,点击进行相关操作:

2.选择源数据库和目标数据库

3.选择所需迁移的表
4.编辑生成的job文件名:qy.kjb,和文件目录,编辑好后【Finish】
5.运行qy.kjb,可在test2数据库中看到成功生成迁移来的表。

三、在使用过程中遇到的问题

  • 上述方法在数据库迁移过程中无法把主键和索引进行迁移

解决方法:在DB2的系统表中,查找到主键和索引所有的信息。然后拼接成mysql创建主键和索引的脚本
例如:
//从db2 的系统表中查询到主键信息的sql

select * from SYSCAT.KEYCOLUSE;

//拼接成mysql 创建主键的sql

select 'ALTER TABLE '|| Tablename ||' ADD PRIMARY KEY' || ' (' || ColumnName ||');'  from SYSCAT.KEYCOLUSE where TABSCHEMA='XX'; 

此时会生成mysql 的执行脚本,将脚本放入到mysql 中,就可以创建所有迁移过来表结构的主键

索引也是同理。只不过DB2 系统表中的索引是

select * from syscat.indexes;
  • 在执行迁移的时候,有些job 失败,看生成的sql

句有中unknown类型。这个原因主要是DB2的时间类型直接转到mysql中没有与之对于的类型, 所以需要

把UNKNOWN ->DATETIME。
经过测试,此类型在迁移成功后,能正常的插入数据。

四、如果想更好的利用kettle可以将kettle的源码导入到eclipse中部署启动,这是纯java代码开发的开源工具。非常有研究价值!

刚开始研究kettle,,未完 待续。。。

你可能感兴趣的:(kettle,迁移,db2,mysql)