How to find Current open Cursors in Oracle

前端 未结 6 2188
悲&欢浪女
悲&欢浪女 2020-12-05 02:13

What is the query to find the no. of current open cursors in an Oracle Instance?

Also, what is the accuracy/update frequency of this data?

I am using Oracle

相关标签:
6条回答
  • 2020-12-05 02:53
    select  sql_text, count(*) as "OPEN CURSORS", user_name from v$open_cursor
    group by sql_text, user_name order by count(*) desc;
    

    appears to work for me.

    0 讨论(0)
  • 2020-12-05 02:54

    1)your id should have sys dba access 2)

    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;
    
    0 讨论(0)
  • 2020-12-05 02:56

    Oracle has a page for this issue with SQL and trouble shooting suggestions.

    "Troubleshooting Open Cursor Issues" http://docs.oracle.com/cd/E40329_01/admin.1112/e27149/cursor.htm#OMADM5352

    0 讨论(0)
  • 2020-12-05 02:56

    I use something like this:

    select 
      user_name, 
      count(*) as "OPEN CURSORS" 
    from 
      v$open_cursor 
    group by 
      user_name;
    
    0 讨论(0)
  • 2020-12-05 03:02

    Here's how to find open cursors that have been parsed. You need to be logged in as a user with access to v$open_cursor and v$session.

    COLUMN USER_NAME FORMAT A15
    
    SELECT s.machine, oc.user_name, oc.sql_text, count(1) 
    FROM v$open_cursor oc, v$session s
    WHERE oc.sid = s.sid
    GROUP BY user_name, sql_text, machine
    HAVING COUNT(1) > 2
    ORDER BY count(1) DESC
    ;
    

    If gives you part of the SQL text so it can be useful for identifying leaky applications. If a cursor has not been parsed, then it does not appear here. Note that Oralce will sometimes keep things open longer than you do.

    0 讨论(0)
  • 2020-12-05 03:11

    Total cursors open, by session:

    select a.value, s.username, s.sid, s.serial#
    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';
    

    Source: http://www.orafaq.com/node/758

    As far as I know queries on v$ views are based on pseudo-tables ("x$" tables) that point directly to the relevant portions of the SGA, so you can't get more accurate than that; however this also means that it is point-in-time (i.e. dirty read).

    0 讨论(0)
提交回复
热议问题