Un cursor es un sinónimo de área de contexto de un área de trabajo en la memoria que Oracle almacena la instrucción de SQL actual. Para una consulta, el área de memoria también incluye los encabezados de columna y una fila recuperada por la instrucción SELECT.
un ejemplo muy sencillo la conexion a la base de datos desde visual basic abre en promedio 2 a 4 cursores segun he podido probar.
El problema se presenta cuando usamos muchos recorset sin cerrarlos , podemos hacer una simetría de un rs = un cursor de oracle.
Cuando actualizamos los datos no se abre ningún cursor ya que son consultas que no devuelven registros.
Podemos ver los cursores abiertos con la vista v$open_cursor
select count(*) , user_name
from v$open_cursor
group by user_name
notar que hay cursores que abre oracle para actualizar las estadísticas de la tabla y mas , osea por mas que nosotros abramos 3 cursores desde vb en la vista pueden aparecer 6 o 7 que son propios de oracle.
Muchas veces podemos ver que nos aparece la siguiente advertencia
Current Open Cursors Count
son las cantidad de cursores que tenemos abiertos , esto depende del tamaño de nuestra sga , normalmente podemos usar para calcular el tamaño de la shared_pool viendo la cantidad de cursores abiertos cuando la base esta a full , pero no dejar también de ver la aplicación porque una aplicación mal desarrollada lleva a los dba a a hacer sucesivos ajustes a la bd que por ahí tocando solo la aplicación los problemas se resuelven.
fuente : http://support.microsoft.com/kb/183639/es
No hay comentarios:
Publicar un comentario