欢迎来到天天文库
浏览记录
ID:15993168
大小:130.50 KB
页数:14页
时间:2018-08-07
《oracle到db2的移植挑战和问题总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Oracle到DB2的移植挑战和问题总结一、评估阶段挑战:不能很好的评估出移植所需的工作量和技术难点。主要问题:1)合作伙伴配合力度较差,很难找到合适的人员对IBM的移植工作进行支持。2)项目陈旧,难于找到熟悉系统的开发人员。3)有时刚开始接触不到要移植的系统。4)有些问题MEET2不能发现。5)制定的移植范围过大,不够明确。如何解决:1)多和系统开发人员沟通,了解系统中所有关于数据库操作的部分。2)评估的时候能访问Oracle的系统,用IDMT导出全部Oracle脚本,用MEET2进行分析。3)根据经验,检查脚本里那些IDMT查不出来的地方。4)总结出所有要修改的
2、对象,算出工作量。编写移植评估报告,确定移植范围,最好能精确到模块。二、数据库移植阶段挑战:1)当前最新版本DB29.7.3在兼容性方面还存在诸多的问题,在移植的过程中经常会碰到很多未知的问题。2)对于PL/SQL的移植,花费精力大,测试难,容易出错。3)IDMT里某个对象部署成功,不代表该对象移植成功。主要问题和修改方法:1)DB2还不支持嵌套函数和嵌套存储过程,此修改是最耗时同时最容易出问题的地方。2)DB2里对FUNCTION的支持还比较弱,虽然已经支持OUT参数,但是调用方式必须是标准的赋值操作。虽然改法简单,不容易出错,但是有可能代码里大量用到,修改工作量
3、可能会很大。3)PL/SQL的package定义里还不支持JavaFunction。这个问题需要将JavaFunction提取出来放到DB2的module里,同时为了支持OUT参数,需要将JavaFunction改成Procedure。Javafunction代码的提取,转换部署部分已经做完,因为将Function改成了Procedure,Java代码的return值要去掉,同时OUT类型参数要变成数组类型。4)DB2在部署的时候会经常碰到DB2Crash的问题。5)有些Oracle的内置包在DB2里不支持,比如DBMS_AQ,DBMS_APPLICATION_IN
4、FO,虽然有模拟Oracle的类似实现,但是功能不全,可能会有一些bug在里面。6)对于NUMBER,VARCHAR2,DATE类型,在DB2系统表里存储的时候会转成DB2的类型,因此如果代码用到了类型比较就会出问题。7)不能支持多action的trigger,需要转成多个trigger。解决方法:1)如果PL/SQL程序较多,分析出PL/SQL之间的调用关系,逐层移植2)遍历代码,优先移植那些代码里用到的PL/SQL程序包3)两阶段修改,第一阶段保证所有对象部署可以成功,第二阶段修改那些部署成功但是状态是无效的对象。三、应用移植阶段挑战:1)有些基于标准接口的行为
5、Oracle和DB2是不同的。2)应用程序里用到的SQL是经过封装或者拼接出来的。主要问题和修改方法:1)OracleOCCI接口不能兼容,需要自己根据DB2CLI模拟OracleOCCI接口。2)DB2973不兼容JDK1.4的NUMBER数据类型,需要升级到JDK1.5或以上版本3)DB2JDBC里不能使用callfunction()的命令来调用function,所有function都要封装成procedure。4)有些JDBC接口Oracle和DB2行为不同,比如executeQuery等。解决方法:1)争取原开发人员可以介入一起修改。2)总结出可以批量修改的
6、地方,进行批量修改。3)争取一套代码兼容Oracle和DB2。4)总结出核心业务,优先移植。四、测试阶段挑战:1)移植后的数据库对象难于独立测试。2)不熟悉业务和代码,IBM的人员难于对应用程序进行测试和问题定位。3)对于系统架构和性能调整不熟悉。解决方法:1)原测试人员介入协助测试和问题定位,IBM的人员负责解决定位后的问题。2)原测试人员总结出核心业务,优先测试。附录1:DB2V973主要问题修改方法总结主要修改的问题1:DB2还不支持嵌套函数和嵌套存储过程。此修改是最耗时同时最容易出问题的地方。代码如下所示:CREATEORREPLACEPACKAGEBODY
7、TESTNESTEDASPROCEDUREA2(l_inINNUMBER,l_outOUTNUMBER)ASl_rtNUMBER;Xvarchar2(10):='empty';FUNCTIONA1RETURNNUMBERASBEGINl_out:=l_out+l_in+1;RETURN1;ENDA1;BEGINl_out:=2;l_rt:=A1();DBMS_OUTPUT.PUT_LINE('l_out='
8、
9、l_out);ENDA2;ENDTESTNESTED;修改方法:将嵌套函数和过程外提,同时将子函数里用到的复函数的内部变量外提到package级。如果子函
此文档下载收益归作者所有