Подтвердить что ты не робот

Как найти текущие открытые курсоры в Oracle

Каков запрос, чтобы найти нет. текущих открытых курсоров в экземпляре Oracle?

Также, какова частота точности/обновления этих данных?

Я использую Oracle 10gR2

4b9b3361

Ответ 1

Открытие всех курсоров по сеансу:

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, поэтому вы не можете получить более точную оценку; однако это также означает, что это точка-время (т.е. грязное чтение).

Ответ 2

Здесь, как найти открытые курсоры, которые были проанализированы. Вам необходимо войти в систему как пользователь с доступом к 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 будет иногда держать вещи открытыми дольше, чем вы.

Ответ 3

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

похоже, работает для меня.

Ответ 4

1) ваш идентификатор должен иметь доступ к 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;

Ответ 6

Я использую что-то вроде этого:

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