web-dev-qa-db-ja.com

Oracleで現在開いているカーソルを見つける方法

Noを見つけるためのクエリは何ですか。インスタンスで現在開いているカーソルの数

また、このデータの精度/更新頻度は何ですか?

Oracle 10gR2を使用しています

32
M.N

セッションごとの開いているカーソルの合計:

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 $ビューのクエリは、SGAの関連部分を直接指す擬似テーブル(「x $」テーブル)に基づいているため、それ以上の精度は得られません。ただし、これはポイントインタイム(つまりダーティリード)であることも意味します。

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

私のために働くようです。

11
Mark Kluepfel

解析済みの開いているカーソルを見つける方法は次のとおりです。 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
;

SQLテキストの一部を提供する場合、漏れやすいアプリケーションを識別するのに役立ちます。カーソルが解析されていない場合、ここには表示されません。 Oralceを使用すると、開いたままになることがあります。

8
WW.

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;
1
praveen s

Oracleには、SQLとトラブルシューティングの提案に関するこの問題のページがあります。

「オープンカーソルの問題のトラブルシューティング」 http://docs.Oracle.com/cd/E40329_01/admin.1112/e27149/cursor.htm#OMADM5352

1
Rana Ian

私はこのようなものを使用します:

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