技术开发 频道

3天完成数据库迁移的真实性调查

  迁移 有时就是这么简单

  记者采访中了解到,该系统最新的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而言,效率有几十倍的提高。

  “显然,能这样快速低成本的迁移,肯定能为我们公司赢得更多的市场时间,为我们的业务拓展了更广阔的空间,带来了更多的机遇,也使我们的产品更具有竞争力。”

0
相关文章