探查“ORA-01000:超出最多允许打开的游标数”

摘录自 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语句打开了游标,未关闭游标。

结果将显示正在连接上执行的查询。它提供了一个入手点,让您可以反向跟踪到打开游标的来源。

原文地址:https://www.cnblogs.com/chncongblog/p/3245728.html