sql >> Databáze >  >> RDS >> Oracle

Používá Tomcat verze modulů pl/sql uložené v mezipaměti?

Tento problém se týká fondů připojení JDBC a jedná se o problém, který se vyskytuje u všech aplikačních serverů používajících fondy připojení JDBC, nejen u Tomcat. Fondy připojení udrží řadu připojení otevřených ve fondu připravených pro další požadavek. Pokud připojení odkazovalo na balíček PL/SQL a je znovu zkompilován, pak další volání tohoto balíčku vyvolá chybu ORA-06508. To ovlivní balíčky kdekoli v zásobníku volání - nejen balíček, který jste volali přímo.

K vyřešení tohoto problému mají některé aplikační servery (jako Weblogic) testovací metodu, která se pravidelně volá. Pokud test selže, připojení se z fondu odstraní nebo se nějakým způsobem obnoví. Nejsem si jistý, jaký mechanismus má Tomcat.

Dalším způsobem, jak to vyřešit, je zavolat dbms_session.reset_package jako první volání metody ve vašem volání JDBC. Tím se vymaže stav balíčku z vaší relace. Tento přístup se nedoporučuje, protože má režii na výkon a navíc se resetují všechny proměnné v rozsahu balíčku, takže inicializační bloky balíčku je třeba volat znovu – další zásah do výkonu.

Pokud máte problém a nemáte způsob, jak zrušit špatná připojení, budete muset resetovat celý fond připojení, protože všechna připojení ve fondu budou trpět stejnou výjimkou.



  1. CDbCommand::fetchColumn() se nezdařilo:SQLSTATE[HY000]:Obecná chyba:2014 Nelze provést dotazy, když jsou aktivní ostatní dotazy bez vyrovnávací paměti

  2. Jak zjistit, kdy byl spuštěn server MySQL/MariaDB

  3. Účinně dezinfikujte text zadaný uživatelem

  4. Export dotazu PostgreSQL do souboru csv pomocí Pythonu