如何在Oracle中找到当前打开的游标

时间:2009-06-18 05:25:22

标签: oracle oracle10g cursor

查找号码的查询是什么。 Oracle实例中当前打开的游标是什么?

此外,此数据的准确性/更新频率是多少?

我正在使用Oracle 10gR2

7 个答案:

答案 0 :(得分:41)

按会话打开总游标:

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';

来源:http://www.orafaq.com/node/758

据我所知,对v $视图的查询是基于伪表(“x $”表)直接指向SGA的相关部分,因此你无法获得更准确的结果。但这也意味着它是时间点(即脏读)。

答案 1 :(得分:11)

select  sql_text, count(*) as "OPEN CURSORS", user_name from v$open_cursor
group by sql_text, user_name order by count(*) desc;

似乎对我有用。

答案 2 :(得分:8)

以下是如何查找已解析的打开游标。您需要以具有v $ open_cursor和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为您提供SQL文本的一部分,因此它可用于识别泄漏的应用程序。如果尚未解析游标,则此处不会显示。请注意,Oralce有时会比你更开放时间。

答案 3 :(得分:1)

1)你的id应该有sys dba访问权限 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;

答案 4 :(得分:1)

Oracle有一个针对此问题的页面,包含SQL和故障排除建议。

“排除打开游标问题” http://docs.oracle.com/cd/E40329_01/admin.1112/e27149/cursor.htm#OMADM5352

答案 5 :(得分:0)

我使用这样的东西:

select 
  user_name, 
  count(*) as "OPEN CURSORS" 
from 
  v$open_cursor 
group by 
  user_name;

答案 6 :(得分:0)

这可以工作:

SELECT    sql_text "SQL Query", 
          Count(*) AS "Open Cursors" 
FROM      v$open_cursor 
GROUP BY  sql_text 
HAVING    Count(*) > 2 
ORDER BY  Count(*) DESC;