ITPub博客

首页 > 数据库 > Oracle > ORA-01000 和 open_cursors

ORA-01000 和 open_cursors

原创 Oracle 作者:哎呀我的天呐 时间:2015-10-12 21:20:47 0 删除 编辑

今天我也遇见了这个问题
有个概念一定要记牢,就是show parameter open_cursors这个参数是指 每个session,包含递归的cursor 能打开的最大游标数 ,

按照session 查看打开游标数,跟open_cursor对比

SELECT SID, COUNT(*) FROM V$OPEN_CURSOR GROUP BY SID ORDER BY 2 DESC

按用户查看打开游标的情况

SELECT S.USERNAME, O.SID, O.CURSOR_CNT
  FROM (SELECT SID, COUNT(*) AS CURSOR_CNT FROM V$OPEN_CURSOR GROUP BY SID) O,
       V$SESSION S
 WHERE S.SID = O.SID
   AND S.USERNAME IS NOT NULL ORDER BY 1

按照SQL id 打开游标排序

SELECT O.*, S.USERNAME
  FROM (SELECT SQL_ID,
               SQL_TEXT,
               SID,
               COUNT(1) OVER(PARTITION BY SQL_ID) AS CURSOR_CNT
          FROM V$OPEN_CURSOR) O,
       V$SESSION S
 WHERE O.SID = S.SID
   AND USERNAME IS NOT NULL ORDER BY 4 DESC

使用比例

SELECT 'session_cached_cursors' PARAMETER,
       LPAD(VALUE, 5) VALUE,
       DECODE(VALUE, 0, ' n/a', TO_CHAR(100 * USED / VALUE, '990') || '%') USAGE
  FROM (SELECT MAX(S.VALUE) USED
          FROM V$STATNAME N, V$SESSTAT S
         WHERE N.NAME = 'session cursor cache count'
           AND S.STATISTIC# = N.STATISTIC#),
       (SELECT VALUE FROM V$PARAMETER WHERE NAME = 'session_cached_cursors')
UNION ALL
SELECT 'open_cursors',
       LPAD(VALUE, 5),
       TO_CHAR(100 * USED / VALUE, '990') || '%'
  FROM (SELECT MAX(SUM(S.VALUE)) USED
          FROM V$STATNAME N, V$SESSTAT S
         WHERE N.NAME IN
               ('opened cursors current', 'session cursor cache count')
           AND S.STATISTIC# = N.STATISTIC#
         GROUP BY S.SID),
       (SELECT VALUE FROM V$PARAMETER WHERE NAME = 'open_cursors')

session_cached_cursor是与ora 01000没有什么直接关系,出现ora 01000你就别想了

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29990276/viewspace-1813828/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: MySQL 初始化参数
请登录后发表评论 登录
全部评论
https://cloud.tencent.com/developer/inventory/14362

注册时间:2014-10-30

  • 博文量
    403
  • 访问量
    2528743