Параметърът 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;