开始给用户提供的整套系统是部署在WAS服务器和DB2数据库上的,因为WAS和DB2都属于IBM收费产品,根据用户需求,为了节省这笔开销,想使用免费开源的数据库和Tomcat服务器。因而数据库选择了MariaDB。这
就涉及到,在不动系统代码的状况下,怎样直接将DB2数据库的表结构、数据、主键、索引等迁移到MariaDB上。接着这个苦差事就落到我头上了。第一次作这类型的工做,在网上找各类数据库迁移的工具,最终选择了kettle这款开源的工具,通过几天下来,终于完成了,特此记录,方便之后查阅。java
Kettle是一款国外开源的ETL工具,纯java编写,能够在Window、Linux、Unix上运行,数据抽取高效稳定。
1.新建一个job,建立两个DB链接:source、target(源数据库和目标数据库链接),在菜单中找到【复制多表向导】,点击进行相关操做:mysql
2.选择源数据库和目标数据库sql
3.选择所需迁移的表
4.编辑生成的job文件名:qy.kjb,和文件目录,编辑好后【Finish】
5.运行qy.kjb,可在test2数据库中看到成功生成迁移来的表。数据库
上述方法在数据库迁移过程当中没法把主键和索引进行迁移服务器
解决方法:在DB2的系统表中,查找到主键和索引全部的信息。而后拼接成mysql建立主键和索引的脚本
例如:
//从db2 的系统表中查询到主键信息的sqleclipse
select * from SYSCAT.KEYCOLUSE;
//拼接成mysql 建立主键的sql工具
select 'ALTER TABLE '|| Tablename ||' ADD PRIMARY KEY' || ' (' || ColumnName ||');' from SYSCAT.KEYCOLUSE where TABSCHEMA='XX';
此时会生成mysql 的执行脚本,将脚本放入到mysql 中,就能够建立全部迁移过来表结构的主键测试
索引也是同理。只不过DB2 系统表中的索引是spa
select * from syscat.indexes;
在执行迁移的时候,有些job 失败,看生成的sqlcode
句有中unknown类型。这个缘由主要是DB2的时间类型直接转到mysql中没有与之对于的类型, 因此须要
把UNKNOWN ->DATETIME。
通过测试,此类型在迁移成功后,能正常的插入数据。
刚开始研究kettle,,未完 待续。。。