iBatis缘何出现(ORA-01000)最多允许打开的游标数错误?如何验证问题发生的原因?

海诗美妆 2010-01-15 07:49:07
先说一下我这边的情况。

系统用Spring+iBatis连结Oracle,连结数据库的处理使用Spring接口。

数据更新处理中,同时有使用batch-mode更新数据和不使用batch-mode更新数据,
此时,在正式的数据库环境中出现了(ORA-01000)最多允许打开的游标数错误。
当把所有的数据更新处理改为不使用batch-mode,程序会正常运行。

想要找出发生错误的原因,在测试环境中再现类似的错误。
但是无论怎么弄,在测试环境中都无法实现。

OPEN_CURSORS降到了3,用JMeter同时连接多个线程虚拟真实环境的流量也没用。
整个程序就像着了魔一样,在测试环境中就是实现不了(ORA-01000)最多允许打开的游标数错误。

如题,请高人指点!
...全文
389 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hailang7210 2010-01-18
  • 打赏
  • 举报
回复
是不是連接打得太多
海诗美妆 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 crazylaa 的回复:]
楼主,检查你的ibatis里面,是否存在类似于hib的级联加载的情况,有的话,相应修改成不使用级联,而是即用即取。
就是说,比如你查一个表A,表A中某个字段(B_ID)关联到另一个表B(A->B,1-1~N),你在查表A的时候,递归调用了查B表对象的查询,(总共A有1个,B可能有N个)。这样可能会出打开游标数过多的问题。
还有一个可能的原因,就是你某些地方的ResultSet没有关闭。

参考下。

楼主分多啊,java一个oracle一个。。
[/Quote]
1.我这边的开发,所有代码,除编写人员之外,都要经过2人以上确认,hib的这种结构基本不会存在。
2.关闭ResultSet之类的操作都是在iBatis里面做的,写程序方并不需要直接操作。


我目前最想知道的事,如何在不改动现有程序的前提下,让数据库发生(ORA-01000)最多允许打开的游标数错误,
而不是避免发生。


着急,所以不在乎分数。
licip 2010-01-16
  • 打赏
  • 举报
回复
应该是你资源没有关吧。
acridin 2010-01-16
  • 打赏
  • 举报
回复
sean1203 2010-01-15
  • 打赏
  • 举报
回复
ding
crazylaa 2010-01-15
  • 打赏
  • 举报
回复
楼主,检查你的ibatis里面,是否存在类似于hib的级联加载的情况,有的话,相应修改成不使用级联,而是即用即取。
就是说,比如你查一个表A,表A中某个字段(B_ID)关联到另一个表B(A->B,1-1~N),你在查表A的时候,递归调用了查B表对象的查询,(总共A有1个,B可能有N个)。这样可能会出打开游标数过多的问题。
还有一个可能的原因,就是你某些地方的ResultSet没有关闭。

参考下。

楼主分多啊,java一个oracle一个。。

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧