• [JDBC]ORA-01000: 超出打开游标的最大数(ORA-01000: maximum open cursors exceeded)


    问题产生的原因:

      Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,相当于在数据库中打开了一个cursor。由于oracle对打开的游标的数量做了限制,如果你的createStatement和prepareStatement是在一个循环里面,并且没有及时关闭的话,就会非常容易出现这个问题。

      所以,“超出打开游标的最大数”这个异常通常是由于我们没有及时关闭statement造成的。因此,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,并且一定要及时关闭。

      查看数据库最大游标数: show parameter open_cursors; 默认为300;

      查看打开游标的视图:    select * from v$open_cursor where user_name = 'xxxx';

                   可通过SQL_TEXT字段来定位是那个SQL导致的游标打开过多。

      查看打开游标的来源:  select o.sid, osuser, machine, count(*) num_curs from v$open_cursor o, v$session

                   where user_name = 'xxxx' and o.sid=s.sid group by o.sid, osuser, machine order by num_curs desc;

      查看没有被释放的SQL: select o.sid,q.sql_text from v$open_cursor o, v$sql q where q.hash_value=o.hash_value and o.sid = xxx;

      修改最大游标数:         alter system set open_cursors = 308 scope = both;

      对于出现ORA-01000错误这种情况,单纯的加大open_cursors并不是好办法,那只是治标不治本。实际上,代码中的隐患并没有解除。 所以一定要仔细检查代码,找到问题产生的原因并消除。

  • 相关阅读:
    删除文件时,提示 "操作无法完成..." 怎么处理
    对象的理解
    TP5架构下链接SQL数据库的一种方法
    关于URL隐藏index.php方法
    非典型的千万用户后台之路
    就这样,再见2015
    理想的程序员
    4个小例子告诉你:如何成为一名数据极客
    馆中窥职:小公司没那么糟糕
    JAVA设计模式详解(六)----------状态模式
  • 原文地址:https://www.cnblogs.com/jfqiu/p/3229699.html
Copyright © 2020-2023  润新知