mysql错误01000_错误 ORA-01000: maximum open cursors exceeded Exception

ORA-01000是开发中常见的异常。这个异常表示程序中打开的游标数目gt; 数据库中设定的可以打开的最大游标数。

ORA-01000是开发中常见的异常。这个异常表示程序中打开的游标数目> 数据库中设定的可以打开的最大游标数。

这个异常通常由2个原因导致

1. 数据库中设置的maximum open cursors太小

2. 在 Java JDBC程序中通常是代码中打开的ResultSet 或 PreparedStatment 没有被关闭。

什么是游标

游标就是看成是指向结果集的指针。可以把它看成一种资源,或者一种数据结构。

查看系统中允许的最大游标数和 历史上打开的最大游标数

select max(a.value) as highest_open_cur, p.value as max_open_cur

from v$sesstat a, v$statname b, v$parameter p

where a.statistic# = b.statistic# and b.name = 'opened cursors current' and p.name= 'open_cursors'

group by p.value;

HIGHEST_OPEN_CUR MAX_OPEN_CUR

---------------- ------------

69 300

从结果可以看出,,系统允许的最大游标数是300, 历史上最大打开游标数是30, 可以得出结论300 够用了。如果两个数字很接近或相等,那么就要修改最大允许游标数了。

查看时谁在适用游标

select sum(a.value) total_cur, avg(a.value) avg_cur,

max(a.value) max_cur, s.username, s.machine

from v$sesstat a, v$statname b, v$session s

where a.statistic# = b.statistic# and s.sid=a.sid

and b.name = 'opened cursors current'

group by s.username, s.machine order by 1 desc

TOTAL_CUR AVG_CUR MAX_CUR USERNAME MACHINE

--------- ------- ------- -------- -------

114 14.25 69 A KUL-0121

76 8.44 48 B KUL-0121

29 1.38 18 KUL-0121

26 8.67 13 C xxx\KUL-012

既然我们已经可以从系统中知道游标的适用情况,那么下面就要fix 这个异常。

1. 通过设置OPEN_CURSORS, MAX_VALUE增加最大游标数

ALTER SYSTEM SET OPEN_CURSORS = MAX_VALUE SID='*' SCOPE=BOTH;

2. 通常这个异常是由Java程序未关闭ResultSet 或者 PreparedStatment 造成的。正确的适用方法, 总是把close()放在finally中,这样不管有没有发生其他异常,都会关闭ResultSet 和 PreparedStatement.

Statement stmt = conn.createStatement();

try {

ResultSet rs = stmt.executeQuery( "SELECT FULL_NAME FROM EMP" );

try {

while ( rs.next() ) {

System.out.println( "Name: " + rs.getString("FULL_NAME") );

}

} finally {

try { rs.close(); } catch (Exception ignore) { }

}

} finally {

try { stmt.close(); } catch (Exception ignore) { }

}

相关阅读:

关于ORA-01000: maximum open cursors exceeded" 问题分析总结

关于Oracle游标的问题(ORA-01000: maximum open cursors exceeded)

Oracle ORA-01000:maximum open cursors exceeded

ORA-01000: maximum open cursors exceeded

logo.gif

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值