Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czy Tomcat używa buforowanych wersji modułów pl/sql?

Ten problem dotyczy pul połączeń JDBC i dotyczy wszystkich serwerów aplikacji korzystających z pul połączeń JDBC, nie tylko Tomcat. Pule połączeń utrzymają pewną liczbę otwartych połączeń w puli gotowych na następne żądanie. Jeśli połączenie odwołuje się do pakietu PL/SQL i jest on ponownie kompilowany, następne wywołanie tego pakietu spowoduje zgłoszenie błędu ORA-06508. Wpłynie to na pakiety w dowolnym miejscu stosu wywołań - nie tylko na pakiet, który wywołałeś bezpośrednio.

Aby rozwiązać ten problem, niektóre serwery aplikacji (takie jak Weblogic) mają metodę testową, która jest wywoływana okresowo. Jeśli test się nie powiedzie, połączenie zostanie usunięte z puli lub w jakiś sposób odświeżone. Nie jestem pewien, jaki mechanizm ma Tomcat.

Innym sposobem rozwiązania tego problemu jest wywołanie dbms_session.reset_package jako pierwszego wywołania metody w wywołaniu JDBC. Spowoduje to wyczyszczenie stanu pakietu z Twojej sesji. Takie podejście nie jest zalecane, ponieważ wiąże się z obciążeniem wydajnością, a wszelkie zmienne o zakresie pakietu są resetowane, więc bloki inicjalizacji pakietu muszą być wywoływane ponownie - kolejny hit wydajności.

Jeśli masz problem i nie masz sposobu na zerwanie złych połączeń, musisz zresetować całą pulę połączeń, ponieważ każde połączenie w puli będzie cierpieć z tego samego wyjątku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najpopularniejsze zapytania dotyczące klucza podstawowego w Oracle z przykładami

  2. Nie znaleziono funkcji OCI8 uruchamianych przez Apache z php5

  3. oracle 11g i integracja hibernacji wiosny i jsf

  4. Technika Oracle SQL pozwalająca uniknąć wypełniania dziennika trans

  5. PRZYPADEK vs. DEKODOWANIE