sql >> Databasteknik >  >> RDS >> Oracle

Använder Tomcat cachade versioner av pl/sql-moduler?

Det här problemet är med JDBC-anslutningspoolerna och är ett problem du får med alla appservrar som använder JDBC-anslutningspooler, inte bara Tomcat. Anslutningspoolerna kommer att hålla ett antal anslutningar öppna i poolen redo för nästa förfrågan. Om ett PL/SQL-paket har refererats till av anslutningen och kompileras om kommer nästa anrop till det paketet att ge ett ORA-06508-fel. Detta kommer att påverka paket var som helst i anropsstacken - inte bara paketet du anropade direkt.

För att lösa detta har vissa appservrar (som Weblogic) en testmetod som anropas med jämna mellanrum. Om testet misslyckas tas anslutningen bort från poolen eller uppdateras på något sätt. Jag är inte säker på vilken mekanism Tomcat har.

Ett annat sätt att ta itu med det är att anropa dbms_session.reset_package som det första metodanropet i ditt JDBC-anrop. Detta kommer att ta bort pakettillståndet från din session. Det här tillvägagångssättet rekommenderas inte eftersom det har en prestandaoverhead plus att eventuella paketomfattade variabler återställs så att paketinitieringsblock måste anropas igen - ännu en prestandaträff.

Om du har problemet och du inte har ett sätt att släppa dåliga anslutningar måste du återställa hela anslutningspoolen eftersom alla anslutningar i poolen kommer att drabbas av samma undantag.



  1. mysqli_connect():(HY000/2003):Kan inte ansluta till MySQL-servern på 'domännamn' (111)

  2. PROBLEM:Mysql konverterar Enum till Int

  3. Hur man installerar InfluxDB på Ubuntu 20.10

  4. Installera mysqldb på snow leopard