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

Bruger Tomcat cachelagrede versioner af pl/sql-moduler?

Dette problem er med JDBC-forbindelsespuljer og er et problem, du får med alle appservere, der bruger JDBC-forbindelsespuljer, ikke kun Tomcat. Tilslutningspuljerne vil holde et antal forbindelser åbne i puljen klar til næste anmodning. Hvis en PL/SQL-pakke er blevet refereret af forbindelsen og er kompileret igen, vil det næste kald til den pakke give en ORA-06508 fejl. Dette vil påvirke pakker hvor som helst i opkaldsstakken - ikke kun den pakke, du kaldte direkte.

For at løse dette har nogle app-servere (som Weblogic) en testmetode, der kaldes med jævne mellemrum. Hvis testen mislykkes, fjernes forbindelsen fra poolen eller genopfriskes på en eller anden måde. Jeg er ikke sikker på, hvilken mekanisme Tomcat har.

En anden måde at løse det på er at kalde dbms_session.reset_package som det første metodekald i dit JDBC-kald. Dette vil rydde pakketilstanden fra din session. Denne tilgang anbefales ikke, da den har en præstationsoverhead plus eventuelle pakkeomfattede variable nulstilles, så pakkeinitieringsblokke skal kaldes igen - endnu et præstationshit.

Hvis du har problemet, og du ikke har mulighed for at afbryde dårlige forbindelser, skal du nulstille hele forbindelsespuljen, da enhver forbindelse i poolen vil lide under den samme undtagelse.



  1. Henter poster fra MySQL-database med PHP for at udfylde en rulleliste

  2. Konvertering af specialtegn til almindelig tekst i oracle

  3. Oracle får DISTINCT numerisk med en CLOB i forespørgslen

  4. Typer af SQL JOIN