Pergunta

O que é a consulta para localizar o não. de cursores abertos atuais em uma Instância Oracle?

Além disso, qual é a frequência de precisão / atualização destes dados?

Eu estou usando o Oracle 10gR2

Foi útil?

Solução

Total de cursores abrir, por sessão:

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';

Fonte: http://www.orafaq.com/node/758

Tanto quanto eu sei consultas sobre $ visualizações v baseiam-se em pseudo-mesas ( "x" $ tabelas) que apontam diretamente para as partes relevantes do SGA, para que você não pode receber mais preciso do que isso; no entanto, isto também significa que ele é de ponto no tempo (isto é sujo leitura).

Outras dicas

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

aparece para trabalhar para mim.

Veja como encontrar cursores abertos que foram analisados. Você precisa estar logado como um usuário com acesso a v $ open_cursor e v $ sessão.

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
;

Se dá-lhe parte do texto SQL para que ele possa ser útil para identificar aplicações com vazamento. Se um cursor não foi analisado, então ele não aparece aqui. Note-se que Oralce às vezes vai manter as coisas aberta mais do que você faz.

1) o seu ID deve ter acesso dba sys 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;

A Oracle tem uma página para esta questão com SQL e sugestões resolução de problemas.

"Solucionando problemas Abrir cursor" http://docs.oracle.com/cd/E40329_01 /admin.1112/e27149/cursor.htm#OMADM5352

Eu uso algo como isto:

select 
  user_name, 
  count(*) as "OPEN CURSORS" 
from 
  v$open_cursor 
group by 
  user_name;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top