vacio - recorrer cursor oracle
Cómo encontrar Cursores abiertos actuales en Oracle (6)
¿Cuál es la consulta para encontrar el no. de cursores abiertos actuales en una instancia de Oracle?
Además, ¿cuál es la frecuencia de precisión / actualización de estos datos?
Estoy usando Oracle 10gR2
1) tu ID debe tener acceso 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;
A continuación, le mostramos cómo encontrar los cursores abiertos que se analizaron. Debe iniciar sesión como usuario con acceso a v $ open_cursor y 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
;
Si le proporciona parte del texto SQL, puede ser útil para identificar aplicaciones con fugas. Si un cursor no ha sido analizado, entonces no aparece aquí. Tenga en cuenta que Oralce algunas veces mantendrá las cosas abiertas más tiempo que usted.
Cursores totales abiertos, por sesión:
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'';
Fuente: http://www.orafaq.com/node/758
Hasta donde yo sé, las consultas sobre v $ views se basan en pseudo-tablas (tablas "x $") que apuntan directamente a las partes relevantes del SGA, por lo que no puede obtener más precisión que eso; sin embargo, esto también significa que es un punto en el tiempo (es decir, lectura sucia).
Oracle tiene una página para este problema con SQL y sugerencias para la solución de problemas.
"Solución de problemas de Cursor abierto" http://docs.oracle.com/cd/E40329_01/admin.1112/e27149/cursor.htm#OMADM5352
Yo uso algo como esto:
select
user_name,
count(*) as "OPEN CURSORS"
from
v$open_cursor
group by
user_name;
select sql_text, count(*) as "OPEN CURSORS", user_name from v$open_cursor
group by sql_text, user_name order by count(*) desc;
parece funcionar para mí