java.sql.SQLException: ORA-01000: maximum open cursors exceeded

问题描述:
Oracle 使用 OPEN_CURSORS 参数指定一个会话一次最多可以打开的游标的数量。超过此数量时,Oracle 将报告 ORA-01000 错误。当此错误传到 DAO时,就会抛出 SQLException

先做程序review,查看是否有在loop中create statement,这个是最容易导致“ORA-01000”问题出现。
根据oracle文档,最大游标是针对per-session而言,每个session最多允许创建300个cursor。如果connection创建300个未关闭的statement,将导致“超出最多允许打开的游标数”错误出现。减少在程序中使用loop来超作statement的情况,如果使用,用好及时做close操作。在文件init.ora中的参数open_cursors = 300 # 允许打开的最大游标数。(好像可以设置对于同一个SQL,重用同一个游标的,不知道具体是哪个参数?好像是参数 CURSOR_SHARING?[http://www.oracle.com.cn/onlinedoc/nav/initora.htm?remark=homepage#index-CUR])

以DBA身份进入数据库端,查看目前游标的实际情况

select o.sid, user_name, osuser, machine, count(*) num_curs
from v$open_cursor o, v$session s
where o.sid=s.sid
group by o.sid, user_name,osuser, machine
order by num_curs desc

--依据前面查训到的联机情况,依据SID近一部查询,再进一步做查询到底是哪些sql对游标占用具体情况
select q.sql_text
from v$open_cursor o, v$sql q
where q.hashvalue=o.hash_value and o.sid = SID

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值