db2数据库迁移到mssql记录之一
一个系统,原来是在DB2上跑的,现在有需求,要求支持mssql,第一天折腾过程如下:
1、找到powerdesigner表设计文件,生成mssql的脚本,导进mssql数据库。(直接通过db2导出的脚本,根本不能在mssql上面运行)
2、导入脚本时,有个别语句报错,导致有个别表不能成功创建。处理方法是把两个不同库的表名都找出来,通过对比工具,找出没创建的表,调整建表语句,再重新创建。这时候没成功创建的表已不多,可手工逐个创建。
DB2: select tabname from syscat.TABLES where tabname like ....
Mssql: select name from sysobjects where name like ....
在操作过程,出现不少问题,如:
1、mssql的timestamp类型与db2的timestamp类型功能不一样,mssql一个表只能有一个 timestamp 列,mssql的timestamp的取值形式为:0x0000000000053CA5,db2 timestamp 对应 mssql datetime, timestamp取值形式如:2011-07-19 09:43:50.290, 把导出脚本的timestamp换成datetime。
2、DB2控制中心导出的DDL,包含很多DB2本身的东西在里面,不适合其它数据库使用。如:“RESTRICT ONUPDATE”,在mssql中会报错“消息 156,级别 15,状态 1,第 20 行 关键字 'RESTRICT' 附近有语法错误”。处理方法是手工把这些语句删除。
3、CLOB 类型转为 ntext,LONG VARGRAPHIC 类型转为 ntext。
4、主键约束名称报错:消息 2714,级别 16,状态 5,第 1 行, 数据库中已存在名为 'P_KEY_1' 的对象。消息 1750,级别 16,状态 0,第 1 行,无法创建约束。请参阅前面的错误消息。
mssql中不允许同名的主键约束名称,把P_KEY_1改为P_KEY_2,P_KEY_3之类
5、含有desc字段的语句,在导入时,报错。mssql中desc是关键字,暂时处理方法是给desc加上双引号,或是改名,如descpt之类,这个在后期运行系统时还需要测试。
通过以上操作和问题调整,基本把表从db2迁移到mssql了,接下来的还有视图、存储过程、函数等的调整。