Domanda

Qual è la query per trovare il no. degli attuali cursori aperti in un'istanza Oracle?

Inoltre, qual è la precisione / frequenza di aggiornamento di questi dati?

Sto usando Oracle 10gR2

È stato utile?

Soluzione

Cursori totali aperti, per sessione:

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

Per quanto ne so, le query su v $ view si basano su pseudo-tabelle (tabelle "x $") che puntano direttamente alle parti pertinenti dell'SGA, quindi non è possibile ottenere risultati più precisi; tuttavia, ciò significa anche che è un punto nel tempo (ovvero lettura sporca).

Altri suggerimenti

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

sembra funzionare per me.

Ecco come trovare i cursori aperti che sono stati analizzati. Devi essere loggato come utente con accesso a v $ open_cursor e 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
;

Se ti dà parte del testo SQL in modo che possa essere utile per identificare le applicazioni che perdono. Se un cursore non è stato analizzato, non viene visualizzato qui. Nota che a volte Oralce manterrà le cose aperte più a lungo di te.

1) il tuo ID dovrebbe avere accesso sba 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 ha una pagina per questo problema con SQL e suggerimenti per la risoluzione dei problemi.

" Risoluzione dei problemi relativi al cursore aperto " http://docs.oracle.com/cd/E40329_01 /admin.1112/e27149/cursor.htm#OMADM5352

Uso qualcosa del genere:

select 
  user_name, 
  count(*) as "OPEN CURSORS" 
from 
  v$open_cursor 
group by 
  user_name;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top