Каков запрос, чтобы найти нет. текущих открытых курсоров в экземпляре Oracle?
Также, какова частота точности/обновления этих данных?
Я использую Oracle 10gR2
Каков запрос, чтобы найти нет. текущих открытых курсоров в экземпляре Oracle?
Также, какова частота точности/обновления этих данных?
Я использую Oracle 10gR2
Открытие всех курсоров по сеансу:
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, поэтому вы не можете получить более точную оценку; однако это также означает, что это точка-время (т.е. грязное чтение).
Здесь, как найти открытые курсоры, которые были проанализированы. Вам необходимо войти в систему как пользователь с доступом к 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 будет иногда держать вещи открытыми дольше, чем вы.
select sql_text, count(*) as "OPEN CURSORS", user_name from v$open_cursor
group by sql_text, user_name order by count(*) desc;
похоже, работает для меня.
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;
В Oracle есть страница для этой проблемы с SQL и предложения по устранению неполадок.
"Устранение неполадок с открытым курсором" http://docs.oracle.com/cd/E40329_01/admin.1112/e27149/cursor.htm#OMADM5352
Я использую что-то вроде этого:
select
user_name,
count(*) as "OPEN CURSORS"
from
v$open_cursor
group by
user_name;