zoukankan      html  css  js  c++  java
  • [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并不是好办法,那只是治标不治本。实际上,代码中的隐患并没有解除。 所以一定要仔细检查代码,找到问题产生的原因并消除。

  • 相关阅读:
    osx 编译安装配置 ruby on rails
    tls/ssl证书生成和格式转换
    nginx相关的一些记录
    用systemd脚本自动启动node js程序
    SSH Tunneling
    c代码读取目录信息
    用Qt Creator 对 leveldb 进行简单的读写
    centos 7 相关的一些记录
    发现一段精简的模板算法(非原创)
    几个常用的散列算法
  • 原文地址:https://www.cnblogs.com/jfqiu/p/3229699.html
Copyright © 2011-2022 走看看