Oracle
 sql >> Database >  >> RDS >> Oracle

Tomcat utilizza versioni memorizzate nella cache dei moduli pl/sql?

Questo problema riguarda i pool di connessioni JDBC ed è un problema riscontrato con tutti i server di app che utilizzano i pool di connessioni JDBC, non solo con Tomcat. I pool di connessioni manterranno un numero di connessioni aperte nel pool pronte per la richiesta successiva. Se un pacchetto PL/SQL è stato referenziato dalla connessione e viene ricompilato, la chiamata successiva a quel pacchetto genererà un errore ORA-06508. Ciò influenzerà i pacchetti ovunque nello stack di chiamate, non solo il pacchetto che hai chiamato direttamente.

Per risolvere questo problema, alcuni server di app (come Weblogic) dispongono di un metodo di test che viene chiamato periodicamente. Se il test ha esito negativo, la connessione viene rimossa dal pool o aggiornata in qualche modo. Non sono sicuro di quale meccanismo abbia Tomcat.

Un altro modo per affrontarlo è chiamare dbms_session.reset_package come prima chiamata al metodo nella chiamata JDBC. Questo cancellerà lo stato del pacchetto dalla tua sessione. Questo approccio non è consigliato in quanto ha un sovraccarico delle prestazioni e tutte le variabili nell'ambito del pacchetto vengono reimpostate, quindi i blocchi di inizializzazione del pacchetto devono essere richiamati di nuovo, un altro aumento delle prestazioni.

Se hai il problema e non hai un modo per eliminare le connessioni errate, dovrai reimpostare l'intero pool di connessioni poiché qualsiasi connessione nel pool soffrirà della stessa eccezione.