迁移 有时就是这么简单
记者采访中了解到,该系统最新的B/S结构版本中有300多个存储过程,代码量接近10万行。另外还有大量嵌入在应用程序中的SQL语句,也在1万个左右。难道在迁移过程中就没遇到兼容性问题?又是如何解决的?
“DB2 9.7能兼容95% Oracle语法,大多数情况下原来的ORACLE SQL无需改变即可使用。这一点出乎我们意料之外,也给我们的迁移工作带来惊喜。” 陈胜告诉记者。
“不过,我们还是发现了大约5%的兼容性问题,主要体现在SQL及特性用法上的迥异。相对而言,Oracle原生PLSQL的语法相对灵活点,DB2 PLSQL兼容性语法相对要严格点。”他说
为帮助其它有迁移需求的技术人员,记者将他们在迁移过程中出现问题的SQL语法列出。问题对照Oracle使用情况汇总如下:
1、 Like 语句:
DB2 :like操作的第二个表达式不能包含列名
对于程序中有这样操作的SQL语句需要进行调整
解决方法:使用locate函数,在字符串里查找子串:
fl.dm like tb.dm 需要修改为
locate(tb.dm,fl.dm,1) =1,如果两边都有%,判断条件改为 > 0
2、Having 、GroupBy 、SubSelect 语句:
DB2 规定:使用Having语句前, Group By 必须放其之前;
GroupBy 前的数据列必须要有对照的分组表达式;
在update 语句中,子查询只能返回一个列;
3、Function :
DB2 :参数中不能允许有 out 类型的参数;除表函数以外的函数体中不允许对数据 进行新增、修改、删除操作;谨慎的使用递归调用
4、Trigger
DB2 : 行级触发动作条件UPDATE 及 INSERT,必须单独使用即需要新建各自的触发器,不能写在一起;如在触发动作中有对其他表的DML操作,必须指定为AFTER触发,不能指定BEFORE前触发
“由于用的DB2 9.7的新特性,迁移工作相当的顺利,3天之内便完成了表结构移植和存储过程编译,之后主要的时间都用在功能测试和个别代码调整。”
根据陈胜的介绍,公积金管理系统总计3周时间已经形成稳定版本。移植到最新版DB29.7相比移植至DB2 9.5而言,效率有几十倍的提高。
“显然,能这样快速低成本的迁移,肯定能为我们公司赢得更多的市场时间,为我们的业务拓展了更广阔的空间,带来了更多的机遇,也使我们的产品更具有竞争力。”