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

M.N*_*M.N 32 oracle cursor oracle10g

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

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

我使用的是Oracle 10gR2

Jef*_*emp 44

按会话打开总游标:

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';
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这些'打开的游标当前'被Oracle表服务器懒洋洋地收获; 因此,您在申请中看到的数字可能异常高,而不会意味着您犯了错误.见http://www.orafaq.com/node/758 (6认同)

小智 11

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

似乎对我有用.


WW.*_*WW. 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
;
Run Code Online (Sandbox Code Playgroud)

如果为您提供SQL文本的一部分,那么它可用于识别泄漏的应用程序.如果尚未解析游标,则此处不会显示.请注意,Oralce有时会比您更开放.

  • 实际上,这是一个复杂的情况.v $ open_cursor恰好显示缓存的语句.打开游标(如果你有游标/ ResultSet泄漏,可以敲打的资源)在名为'opens cursors current'的行中的v $ sessstat中. (2认同)