Что такое запрос, чтобы найти нет. текущих открытых курсоров в экземпляре Oracle?Как найти Текущие открытые Курсоры в Oracle
Кроме того, какова точность/частота обновления данных?
Я использую Oracle 10gR2
Что такое запрос, чтобы найти нет. текущих открытых курсоров в экземпляре Oracle?Как найти Текущие открытые Курсоры в 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 будет иногда держать вещи открытыми дольше, чем вы.
Собственно, это сложная ситуация. v $ open_cursor показывает, что выводит кешированные выражения. Открытые курсоры (ресурс, который может быть забит, если у вас есть указатель курсора/ResultSet) находится в v $ sessstat в строке с именем «open cursors current». –
@Ollie: Но как это поможет вам идентифицировать SQL-запрос, который протекает? –
Этот выбор показывает фактический код SQL, который открыл курсоры, отлично подходит для отладки! +1 от меня –
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 и устранения неисправностей предложений.
"Поиск и устранение неисправностей Нерешенные проблемы Cursor" 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;
Эти 'открытые курсоры тока' лениво пожинается таблицы сервера Oracle; поэтому число, которое вы видите для своего приложения, может быть аномально высоким, без того, чтобы вы допустили ошибку. См. Http://www.orafaq.com/node/758 –