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

ORA-01000:przekroczono maksymalną liczbę otwartych kursorów podczas korzystania ze Spring SimpleJDBCCall

Po wielu testach naprawiliśmy ten problem. Jest to połączenie tego, jak używaliśmy frameworka Spring, klienta Oracle i Oracle DB. Tworzyliśmy nowe SimpleJDBCCall, które wykorzystywały wywołania metadanych klienta Oracle JDBC, które były zwracane jako kursory, które nie były zamykane i czyszczone. Uważam to za błąd w frameworku Spring JDBC w sposobie, w jaki wywołuje metadane, ale potem nie zamyka kursora. Spring powinien skopiować metadane z kursora i zamknąć je poprawnie. Nie zawracałem sobie głowy otwieraniem wydania jira ze spring, ponieważ jeśli zastosujesz najlepsze praktyki, błąd nie zostanie ujawniony.

Modyfikowanie OPEN_CURSORS lub innych parametrów jest złym sposobem rozwiązania tego problemu i po prostu opóźnia jego pojawienie się.

Pracowaliśmy nad tym/naprawiliśmy, przenosząc SimpleJDBCCall do pojedynczego DAO, więc dla każdego wywołanego przez nas procesu oracle jest otwarty tylko jeden kursor. Te kursory są otwarte przez cały okres użytkowania aplikacji – co uważam za błąd. Dopóki OPEN_CURSORS jest większe niż liczba obiektów SimpleJDBCCall, nie będzie kłopotów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wywołać procedurę z parametrem out jako typem tabeli z klasy Java?

  2. SQL - Policz liczbę zmian w uporządkowanej liście

  3. Sejf TO_NUMBER()

  4. Wyzwalacz z instrukcją Merge w Oracle

  5. PL SQL jak wybrać wszystkie kolumny