ORA-01000: 超出打开游标的最大数

13年前

1、查看数据库的参数值open_cursors

2、经常在实际中遇到的问题


说明:发生此种情况的原因主要是在应用程序中某个业务在操作数据库的时候,在打开游标后,并没有正确的释放(关闭),造成游标溢出!

更改游标大小的方式如下:


然后重启数据库使其生效。

但是这种方法一般是不能从根本上解决问题的,过段时间还会发生类似的情况!

3、来个小实验测试(java code)


运行上述代码的过程中,使用sql监控数据库的情况,就可以查询到造成该问题的sql,如下所示:

(1)


(2)、


上面SID(1)步当中的sid

此时后台的运行已经抛出异常,如下所示:


4、解决方法

javacode里面模式是一个查询语句,进行循环,但是并没有及时关闭Statement,所以造成了游标溢出的情况,这个也是解决问题的入手处,就是根据你上面的sql监控,可以找到sql,然后找到应用代码上的位置,确认是否有问题即可!

以上只是个人能力所想,不对之处还请各位多多指教!
附加sql脚本:

select o.sid, osuser, machine, count(*) num_curs,SQL_TEXT   from v$open_cursor o, v$session s   where user_name = 'AISINO' and o.sid=s.sid   group by o.sid, osuser, machine ,SQL_TEXT   order by num_curs desc;
select q.sql_text from v$open_cursor o, v$sql q where q.hash_value=o.hash_value and o.sid = 13 group by q.sql_text;