Oracle
 sql >> Base de données >  >> RDS >> Oracle

Tomcat utilise-t-il des versions en cache des modules pl/sql ?

Ce problème concerne les pools de connexions JDBC et est un problème que vous rencontrez avec tous les serveurs d'applications utilisant des pools de connexions JDBC, pas seulement Tomcat. Les pools de connexions garderont un certain nombre de connexions ouvertes dans le pool, prêtes pour la prochaine requête. Si un package PL/SQL a été référencé par la connexion et est recompilé, le prochain appel à ce package générera une erreur ORA-06508. Cela affectera les packages n'importe où dans la pile d'appels - pas seulement le package que vous avez appelé directement.

Pour résoudre ce problème, certains serveurs d'applications (comme Weblogic) ont une méthode de test appelée périodiquement. Si le test échoue, la connexion est supprimée du pool ou actualisée d'une manière ou d'une autre. Je ne suis pas sûr du mécanisme dont dispose Tomcat.

Une autre façon de résoudre ce problème consiste à appeler dbms_session.reset_package comme premier appel de méthode dans votre appel JDBC. Cela effacera l'état du package de votre session. Cette approche n'est pas recommandée car elle a une surcharge de performances et toutes les variables de portée de package sont réinitialisées, de sorte que les blocs d'initialisation de package doivent être appelés à nouveau - un autre impact sur les performances.

Si vous avez le problème et que vous n'avez aucun moyen de supprimer les mauvaises connexions, vous devrez réinitialiser l'ensemble du pool de connexions, car toutes les connexions du pool souffriront de la même exception.