Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle не премахва курсорите след затваряне на набора от резултати

Параметърът init.ora open_cursors дефинира максимума отворени курсори, които сесията може да има наведнъж. Има стойност по подразбиране от 50. Ако приложението надхвърли това число, се появява грешка „ORA-01000:максимално отворени курсори е превишено“.

Следователно е задължително да затворите JDBC ресурсите, когато вече не са необходими, по-специално java.sql.ResultSet и java.sql.Statement. Ако не са затворени, приложението има изтичане на ресурси.

В случай на повторно използване на обекта Connection, трябва да сте наясно с факта, че отворените курсори на Oracle се поддържат отворени и се използват, докато връзката съществува и сделката не е приключила. Когато приложението се ангажира, отворените курсори се освобождават.

Следователно, като дизайнер на приложения, вие трябва да знаете груба оценка на необходимите отворени курсори за вашата най-сложна транзакция.

Трудността се състои в невъзможността на изгледите на вътрешни параметри на Oracle (v$open_cursor, v$sesstat и др.) да покажат разликата между отворените курсори, които могат да се използват повторно, и отворените курсори, които все още са блокирани (не могат да се използват повторно!) от незатворен ResulSet или изявление. Ако затворите всички обекти Statement и ResultSet във вашия finally блок, приложението ви е напълно добре.

Регулирането на параметъра init.ora работи по този начин (нашето приложение се нуждае от максимум 800 курсора)

ALTER SYSTEM SET open_cursors = 800 SCOPE=BOTH;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да видите типа на променлива в PL/SQL?

  2. RU или RUR?

  3. Уникалното ограничение ORA-00001 е нарушено

  4. Как да създадете PL/SQL пакети в базата данни на Oracle

  5. JDBC връща празен набор от резултати