日期:2014-05-17  浏览次数:22220 次

ORA-01000: 超出打开游标的最大数
各位大虾:
        我有一个java应用,需要执行
        select   user_id   from   tbl_user   where   state=0;
        由于这个语句有5000左右条记录,我处理
        while(rs.next())
        {
            //do   things   here
            ...
         
        }
 
        if(rs!=null)
              rs.close();
        rs=null;

        程序在执行2、300条记录时报了
        ORA-01000:   超出打开游标的最大数
        这个错误。
        请问:我该如何解决?
                    只能通过增大open_cursors来解决吗?

------解决方案--------------------
show parameter open_cursors;
看看相应的参数是多少,可以适当的改大点,不过出现这个错误一般都是应用程序里没有关闭游标的结果,重点检查你的应用程序
------解决方案--------------------
java里每次打开一个statement对象jdbc都会在数据库中打开一个游标来执行操作,做完业务后必须马上关闭,否则一旦多次打开且不关闭就会造成ORA-01000: 超出打开游标的最大数错误,如果需要循环建立statement对象最后统一提交,可以在循环里执行完活动马上关闭,关闭后业务处于未提交状态,直到执行connection.commit事件时活动才会提交.
oracle数据库中open_cursors默认值为300,正常情况都够用了,出现ORA-01000错误基本都是有程序没关闭游标,多出现于java程序使用连接池连接数据库的情况下,打开了statement没关闭就把连接放回了连接池或者循环打开statement对象而不关闭,请仔细检查自己的程序代码