在使用过的三大数据库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),
更改加大同时连接数据库的参数值即可。
心情: 挺好