http://www.javayou.com (收藏,设为首页)
当你不能再拥有时,你唯一能做的,就是让自己不要忘记 (手机请访问 http://3g.dlog.cn/javayou)

使用3大数据库开发时的问题

2004年12月24日(Friday) 12点53分 作者: 本站原创.梁夏峰 天气: 心情: 挺好

在使用过的三大数据库Informix、DB2、Oracle中,因为涉及到不同的项目,所以都接触过,其中在开发使用中,出现不少最让人记忆深刻的问题,基本上都和数据库的不同实现特性有关,但一不小心还是让你深陷重围,下面举例一二,供大家参考:

Informix:

最大的问题出现在大数据量操作的时候会出现异常: "could not do a physical order read to fetch next row",查询Error Message手册和其他手册都查不到解决方法,无从下手,具体表现在大数据量操作数据库的时候,容易出现,最后终于在一个数据库论坛找到解决问题所在。

一方面可以在隔离级别的选择上进行改动(但并不彻底),另一方面则是因为Informix默认锁等待时间为0,即在操作(update、delete等)数据库的时候,如遇到其他操作也在使用同一张表的情况时,则不等待和返回异常。

最简单的解决方法就是每次在获取新的(注意是新的,原有的连接也无妨,但影响效率)数据库连接时,首先执行设置连接的锁等待时间的Sql:

SET LOCK MODE TO WAIT 10 (意思是设置锁等待时间为10ms),

这样基本解决问题,不再出现异常情况。

Oracle:

在Informix环境下开发的项目系统,割接到Oracle应用系统的时候,经过一段时间运行,出现 "ORA-01000: maximum open cursors exceeded" 的错误,表示 cursors 已经用完,无法继续数据库操作,主要原因是由于在一个进程打开的游标数超过设定值。

查询资料后发现,单纯增大cursors值并不是彻底解决的方法,主要还是在于应用系统的代码问题,大都因为在循环内使用了preparedStatement或createStatement,每执行一条创建意味着在Oracle中增加使用一个Cursor。

解决方法:executeQuery、executeUpdate等操作后立即释放资源,或把创建statement或preparedStatement的方法移出循环,避免不必要的Cursor使用情况,这样做带来的操作效率可以提高至少10倍,在preparedStatement时更是如此。

DB2:

程序运行时,报出连接数超过最大限制!

初一看,以为DB2的版本不对口所以有限制,可怎么的也是Enterprise版啊,于是翻箱倒柜,找到主要还是数据库的配置参数设置问题。 默认DB2的应用程序连接数设置都不高,需要根据应用手工自行调整,在控制中心-数据库-选择相应数据库-右键,选择配置-应用程序-最大活动应用程序数,注释为:指定可同时连接到数据库的最大(本地和远程)应用程序数(1-5000),

更改加大同时连接数据库的参数值即可。

标签: 数据库 
评论者: 刘冬 2004-12-24 13:05 (Friday)

在JDBC中尽量还是使用PreparedStatement,对于循环执行同一个语句时应该把准备语句prepareStatement这条语句放到循环外,这样可以大大的提升执行的效率至少十倍。当然了,这取决于执行语句的次数。

评论者: 刘冬 2004-12-24 13:15 (Friday)
对于Informix数据库的解决办法,我觉得不漂亮。在程序中执行那个语句,这样移植到其他数据库的时候就无法使用。
评论者: 梁夏峰 2004-12-24 13:44 (Friday)
对于Informix这个问题,由于开发数据库的实现不统一,所以还是Informix的特性所限,包括我们在配置Was数据源的时候,都需要特别给Informix指定一个特别的参数:informixLockModeWait (或类似),当然,移植到其他数据库时,就需要在数据连接池中处理掉了,如前面说的设置informixLockModeWait等。    
评论者: 陈令江 2004-12-24 13:54 (Friday)
真羡慕你们,可以有时间研究一下技术,我是每天从头忙到尾。
评论者: 刘冬 2004-12-24 14:52 (Friday)

从头到尾算什么啊,从头到头你才会有时间来搞这个

评论者: jackern 2005-2-12 11:22 (Saturday)

我也想加入这个项目开发组,不知如何加入,给我个PM吧,呵呵。

还有,在ORACLE9I中,mode是关键字了,而在数据库中的dlog_favorite表中有个field是mode命名的,怎么来解决啊。谢谢。

姓名: 
邮箱:  {可选}
网址:  {可选} 此评论只有我和写日记的人查阅
校验码: ... <我看不清楚>
网记为您提供手机和互联网同步的个人主页,带给你不一样的体验