环境

Win7 x64

MySQL:5.5 (jeewxV2.1)

DB2:9.7

 

迁移主要是迁移表和表数据,

推荐使用迁移工具生成建表语句,建好表后,再执行导出的insert语句插入数据,因为工具导入数据可能会遇到这样那样的问题

如果导出的sql是多个,可以用以下命令合成一个

copy *.sql all.sql 也可以把这句话放到bat批处理文件里

 

插入数据前先禁用所有外键,插入后再启用

 

禁用约束基本语法:
ALTER TABLE 表名称 ALTER FOREIGN KEY 约束名称 NOT ENFORCED
启用约束基本语法:
ALTER TABLE 表名称 ALTER FOREIGN KEY 约束名称  ENFORCED

(这些语句可以在后面的报告(日志)里找到)

 

介绍

IBM Migration Toolkit 是IBM官方出的迁移工具,支持多种源数据库迁移到DB2或Informix

源数据库:Sybase、SQL Server、Oracle、Informix、MySQL

目标数据库:DB2、Informix

 

下载

介绍及下载地址

http://www.ibm.com/developerworks/cn/data/downloads/migration/

MKT是个java程序,有windows版和linux版

如果你没有IBM账号,请到此处下载


 

安装

我安装到了D:\MTK,

 

准备

1、因为我是64位环境,需要使用64位jdk,否则可能会报错,配置环境变量

2、把mysql驱动mysql-connector-java-5.1.24-bin.jar放到%JAVA_HOME%\jre\lib\ext下

3、迁移时不支持timestamp on update CURRENT_TIMESTAMP,需要on update CURRENT_TIMESTAMP先去掉,迁移后再在目标上加,源库上也别忘了还原。

源表:weixin_group、weixin_huodong需要调整

4、db2建库脚本,pagesize我选的是32K,16K的也可以

db2 CREATE DATABASE jeewx AUTOMATIC STORAGE YES  ON 'D:\' DBPATH ON 'D:\' USING CODESET UTF-8 TERRITORY CN COLLATE USING UCA500R1_LZH PAGESIZE 32768

 

运行

菜单 IBM Migration Toolkit 2.0 -- Toolkit

运行后cmd窗口会报一个错,不影响使用

java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.String

dump迁移数据效率 mysql mysql 迁移工具_db2


 新建项目

dump迁移数据效率 mysql mysql 迁移工具_MKT_02


 

1.Specify Source

Extract 导出源库结构

要是odbc,需要下载安装mysql的odbc驱动,但是似乎没有64位的,用不了odbc

选择 Native driver information -- Use native JDBC dirver

需要把mysql驱动mysql-connector-java-5.1.24-bin.jar放到%JAVA_HOME%\jre\lib\ext下

dump迁移数据效率 mysql mysql 迁移工具_迁移工具_03

 

选择源库,输入数据文件名

dump迁移数据效率 mysql mysql 迁移工具_mysql_04

 

点击Extract后列表里会生成jeewx.src,双击可单开查看,里边含有建表语句,主外键等

 

2、Convert

日期格式可以输入

dump迁移数据效率 mysql mysql 迁移工具_db2_05


 Advanced Options

dump迁移数据效率 mysql mysql 迁移工具_mysql_06


不要尝试在这里指定表空间,因为你指定了,他会去创建一个,再使用。

可以手动修改jeewx.db2文件指定表空间

语法:

CREATE TABLE JEEWX.TEST  (
		  A CHAR(1) )   
    IN jeewx_data
    INDEX IN jeewx_idx;

使用UE正则替换
%)!$
替换为
)
IN jeewx_data
INDEX IN jeewx_idx!

 

点击Global Type Mapping可查看编辑类型映射,一般默认的就行

左侧的jeewx.src是源库的建表语句,右侧convert后生成的是目标库的建表语句jeewx.db2

双击jeewx.db2可查看编辑

 

3、Refine

可查看Convert的报告,要是有错误需要调整,警告和消息可以忽略。

 

4、Generate Data Transfer Scripts

dump迁移数据效率 mysql mysql 迁移工具_迁移工具_07


 

Import是执行insert

load是从底层装载数据文件(效率高)

这个两个选那个都行,最后看选那个错误少,就用哪个。
 

点击Create Scripts后,右侧会生成一堆脚本

 

5、Deploy to target

dump迁移数据效率 mysql mysql 迁移工具_dump迁移数据效率 mysql_08


 

可以导入到本地数据库,也可以导入到远程数据库(远程数据库也可以先编目到本地)

不要选择Use your system current user ID and password

输入用户名,密码,会导入到这个用户名对应的模式下(用户名和模式是同名的)

最下面的3个

1.建表结构,主外键等

第2次导,就把这项去了

2.抽取数据

3.导入数据

 

6、报告

dump迁移数据效率 mysql mysql 迁移工具_MKT_09

上面的链接都可以点开,

下面的红色字体报错的也可以点开,查看日志,分析解决

 

如果有的表没导成功,可以清空后,手工执行insert

如weixin_texttemplate表content字段需要调大

truncate WEIXIN_TEXTTEMPLATE immediate;

 

修改TIMESTAMP默认值

ALTER TABLE WEIXIN_GROUP ALTER COLUMN ADDTIME SET WITH DEFAULT CURRENT_TIMESTAMP ;
ALTER TABLE weixin_huodong ALTER COLUMN endtime SET WITH DEFAULT CURRENT_TIMESTAMP ;

 

部分报错的解决方法

The connection to the DB2 database jeewx failed.
[jcc][10389][12245][3.57.82] 装入本机库 db2jcct2, java.lang.UnsatisfiedLinkError: D:\Program Files\IBM\SQLLIB\BIN\db2jcct2.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform 时产生故障: ERRORCODE=-4472, SQLSTATE=null
用64位jdk

SQL3126N  远程客户机需要文件和目录的绝对路径。
1.改用db2move import命令导入
2.如果使用"db2 load from"的话load的数据文件一定要是db2远程服务器上的保存的文件才能load,否则会报错,"SQL3126N  远程客户机需要文件和目录的绝对路径"
而messages文件则是保存再本地的。
3.如果你想要load本地的数据文件到远程db2服务器,可以使用"db2 load client from",这样就可以把本地的数据文件load至远程服务器了。(这个没试过)
4.可以把数据文件拷贝的远程服务器上,再改变load时的文件路径