环境
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
新建项目
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下
选择源库,输入数据文件名
点击Extract后列表里会生成jeewx.src,双击可单开查看,里边含有建表语句,主外键等
2、Convert
日期格式可以输入
Advanced Options
不要尝试在这里指定表空间,因为你指定了,他会去创建一个,再使用。
可以手动修改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
Import是执行insert
load是从底层装载数据文件(效率高)
这个两个选那个都行,最后看选那个错误少,就用哪个。
点击Create Scripts后,右侧会生成一堆脚本
5、Deploy to target
可以导入到本地数据库,也可以导入到远程数据库(远程数据库也可以先编目到本地)
不要选择Use your system current user ID and password
输入用户名,密码,会导入到这个用户名对应的模式下(用户名和模式是同名的)
最下面的3个
1.建表结构,主外键等
第2次导,就把这项去了
2.抽取数据
3.导入数据
6、报告
上面的链接都可以点开,
下面的红色字体报错的也可以点开,查看日志,分析解决
如果有的表没导成功,可以清空后,手工执行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时的文件路径