sql >> Base de Datos >  >> RDS >> Oracle

¿Tomcat usa versiones en caché de módulos pl/sql?

Este problema está relacionado con los grupos de conexiones JDBC y es un problema que tiene con todos los servidores de aplicaciones que utilizan grupos de conexiones JDBC, no solo con Tomcat. Los grupos de conexiones mantendrán una cantidad de conexiones abiertas en el grupo listas para la próxima solicitud. Si la conexión hace referencia a un paquete PL/SQL y se vuelve a compilar, la próxima llamada a ese paquete generará un error ORA-06508. Esto afectará a los paquetes en cualquier parte de la pila de llamadas, no solo al paquete al que llamó directamente.

Para resolver esto, algunos servidores de aplicaciones (como Weblogic) tienen un método de prueba que se llama periódicamente. Si la prueba falla, la conexión se elimina del grupo o se actualiza de alguna manera. No estoy seguro de qué mecanismo tiene Tomcat.

Otra forma de abordarlo es llamar a dbms_session.reset_package como la primera llamada de método en su llamada JDBC. Esto borrará el estado del paquete de su sesión. Este enfoque no se recomienda, ya que tiene una sobrecarga de rendimiento, además de que las variables del ámbito del paquete se restablecen, por lo que es necesario volver a llamar a los bloques de inicialización del paquete, otro impacto en el rendimiento.

Si tiene el problema y no tiene una forma de eliminar las malas conexiones, deberá restablecer todo el grupo de conexiones, ya que cualquier conexión en el grupo sufrirá la misma excepción.