摘录自 http://blog.csdn.net/sunkk/article/details/3936759
oracle 使用 OPEN_CURSORS 参数指定一个会话一次最多可以打开的游标的数量。超过此数量时,Oracle 将报告 orA-01000 错误。
应用程序可以抛出此异常,比如记录日志,打印至界面,提示用户。
采用如下三步可以排查清楚原因:
1、show parameter open_cursors;
oracle 使用 init.ora 中的初始化参数 OPEN_CURSORS 指定一个会话一次最多可以拥有的游标数。缺省值为 300。
2、SQL> select o.sid, osuser, machine, count(*) num_curs,s.program
from v$open_cursor o, v$session s
where user_name = 'SCOTT' and o.sid=s.sid
group by o.sid, osuser, machine, s.program
order by num_curs desc;
可获知哪些应用程序打开了游标。
3、SQL> select q.sql_text
from v$open_cursor o, v$sql q
where q.hash_value=o.hash_value and o.sid = 217;
其中o.sid可以从第二步中获得,填写自己关注的应用程序的sid。
同一个应用程序,如果有两个会话,则有两个sid。
通过此步可获知是哪个应用程序的那一个sql语句打开了游标,未关闭游标。
结果将显示正在连接上执行的查询。它提供了一个入手点,让您可以反向跟踪到打开游标的来源。