Cursores implicitos abiertos
Hola.
Tengo un problema con una aplicación.
Tengo una serie de funciones almacenadas en un package propio.
Estas funciones tienen select into que generan cursores implicitos de Oracle.
Estos cursores como sabréis no son "visibles" para poder cerrarlos, es decir, no puedo hacer un cursor%isopen .
Mi problema es que cuando tengo la aplicación arrancada, al cabo de un tiempo consulto en V$OPEN_CURSOR y veo que tengo un montón abiertos por mis funciones.
Se que existe el SQL%ISOPEN pero siempre da false.
He puesto todas las excepciones conocidas de Oracle para poder cerrar lo que se quede abierto, pero ni con esas .
Alguien tiene ideas? Aún no le he pasado unas pruebas de estres y miedo me da.
Un saludo y gracias
Tengo un problema con una aplicación.
Tengo una serie de funciones almacenadas en un package propio.
Estas funciones tienen select into que generan cursores implicitos de Oracle.
Estos cursores como sabréis no son "visibles" para poder cerrarlos, es decir, no puedo hacer un cursor%isopen .
Mi problema es que cuando tengo la aplicación arrancada, al cabo de un tiempo consulto en V$OPEN_CURSOR y veo que tengo un montón abiertos por mis funciones.
Se que existe el SQL%ISOPEN pero siempre da false.
He puesto todas las excepciones conocidas de Oracle para poder cerrar lo que se quede abierto, pero ni con esas .
Alguien tiene ideas? Aún no le he pasado unas pruebas de estres y miedo me da.
Un saludo y gracias
No he consultado para qué sirve exactamente esa vista que mencionas, más sin embargo a mi me parece que es un log o algo similar, lo que si sé es que la vida de un cursor dura mientras esta se está ejecutando, como puedes saber esto, si abres el Oracle Enterprise Manager y consultas los usuarios que estan conectados a la base de datos, te darás cuenta de que la mayoría de usuarios están inactivos(solo los procesos de Oracle están siempre activos) ejecuta cualquier instrucción que demore unos cuantos segundos y refresca tu ventana de usuarios, verás que tu sesión está activa y por lo tanto tienes cursores abiertos, cuando esto termina el cursor muere más sin embargo queda un registro en la vista que mencionas, porqué, Oracle maneja un cierto número de cursores abiertos por toda la base de datos, si excedes ese número y tratas de ejecutar una consulta, te regresa el error ORA-01000: maximum open cursors exceeded, te comento todo esto porque en contadas ocasiones me he topado con este problema.
Sadudos
Sadudos
