多线程使用连接池对数据库操作出现core dumpBUG以及解决方法

教程发布:风哥 教程分类:ITPUX技术网 更新日期:2022-02-12 浏览学习:850

项目开发中,对oracle数据库操作使用了oracle公司开发的OCILIB库。在整个软件架构(抓取进程)设计中,采用了单进程多线程模式开发,整个开发过程中没有考虑oracle数据库连接池问题,而且在oracle11G多RAC模式下,软件一直都是正常工作。但是在AIX系统下oracle10g多RAC模式下,软件就连基本的启动都出现了BUG。软件每次启动都报oci—21500错误,整个软件出现core dump现象。具体如下:OCI-21500: internal error code, arguments: [17099], [], [], [], [], [], [], []OCI-21500: internal error code, arguments: [17099], [], [], [], [], [], [], []
OCI-21500: internal error code, arguments: [17099], [], [], [], [], [], [], []
OCI-21500: internal error code, arguments: [17099], [], [], [], [], [], [], []
Errors in file :
OCI-21500: internal error code, arguments: [17099], [], [], [], [], [], [], []
OCI-21500: internal error code, arguments: [17099], [], [], [], [], [], [], []
Errors in file :
OCI-21500: internal error code, arguments: [17099], [], [], [], [], [], [], []
OCI-21500: internal error code, arguments: [17099], [], [], [], [], [], [], []
在网上查阅资料,发现基本都是应用程序多线程使用连接池对数据库操作导致的(从软件开发方向)。大家可以看下这篇文章,主要从编译解决(http://ah-fu.iteye.com/blog/281552]http://ah-fu.iteye.com/blog/281552)。 我们软件开发确实是多线程使用连接池对数据库操作。软件启动时,根据配置来创建多个线程,每个线程对应一个RAC,每个RAC使用一个连接池,所以在软件启动时,会创建一个数据库连接池。每一个线程在对数据库操作时,会先检测本线程对应的连接是否连接,然后根据连接再对数据库执行操作。单个线程在执行时没有问题,但是多个线程执行时就会出现core dump。有的解决方案时在编译时去掉关于对连接池的选项,本案没有按着这个方法,而是既然问题出现在多线程使用连接池对数据库操作时,那就创建尽量少的连接个数,并且在数据库连接,检查连接,对数据库操作时都加锁,使其成为原子操作,这样代码修改完毕后,再测试就没再出现ocre dumpBUG,而且在ASM多RAC模式下,读取日志文件时也不再出现读取失败BUG,整个软件正常在oracle10G-ASM多RAC模式下工作。

本文标签:
网站声明:本文由风哥整理发布,转载请保留此段声明,本站所有内容将不对其使用后果做任何承诺,请读者谨慎使用!
【上一篇】
【下一篇】