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

Zamykanie zestawu wyników, ale nie zamykanie przygotowanego zestawienia

Wyciek będzie największym problemem z otwartym kursorem.

ORA-01000: maximum open cursors exceeded

Jeśli maksymalna liczba otwartych kursorów zostanie przekroczona, baza danych stanie się bezużyteczna, z wyjątkiem kursorów, które są już przechowywane. Jednak w większości przypadków, gdy tak się dzieje, trzymane kursory nie są nawet używane (co miałoby miejsce w twoim pytaniu).

Od wersji Java 7 najlepszym sposobem radzenia sobie z tym jest użycie prób z zasobami . Oba ResultSet i PreparedStatement implementuje AutoCloseable interfejs, co oznacza, że ​​zostaną zamknięte, gdy nie będą już potrzebne.

Jeśli nie masz java 7, musisz sobie z tym poradzić w finally bloku, ale upewnij się, że sprawdzasz pod kątem wartości null przed zamknięciem, w przeciwnym razie możesz napotkać NPE, jeśli zasób nigdy nie został zainicjowany.

Pamiętaj, że odwrotność nie spowoduje żadnego problemu, ponieważ zamknięcie instrukcji automatycznie zamknie zestaw wyników.

Pamiętaj, że możesz łatwo dopuścić więcej kursorów do swojej aplikacji, aby zmniejszyć prawdopodobieństwo przekroczenia maksimum.

ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;

Jednak w większości przypadków, jeśli napotkasz maksymalnie otwarte kursory, nie powinno to być rozwiązaniem, ponieważ ukryłoby tylko prawdziwy problem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Określone rzutowanie nie jest prawidłowe podczas wypełniania DataTable z OracleDataAdapter.Fill()

  2. Uporządkuj wiersze przy użyciu kolumn od mniejszej liczby wartości null do braku wartości null

  3. Tworzenie profili w Oracle dla bezpieczeństwa użytkownika

  4. Najważniejsze nowe funkcje Oracle 12c

  5. ORACLE SQL:Pobierz wszystkie liczby całkowite między dwiema liczbami