sql >> Databáze >  >> RDS >> Oracle

Oracle po uzavření sady výsledků neodstraní kurzory

Parametr init.ora open_cursors definuje maximální počet otevřených kurzorů, které může mít relace najednou. Má výchozí hodnotu 50. Pokud aplikace překročí toto číslo, zobrazí se chyba „ORA-01000:překročeno maximum otevřených kurzorů“.

Proto je povinné zavřít zdroje JDBC, když již nejsou potřeba, zejména java.sql.ResultSet a java.sql.Statement. Pokud nejsou uzavřeny, aplikace má únik prostředků.

V případě opětovného použití objektu Connection si musíte být vědomi skutečnosti, že otevřené kurzory oracle zůstávají otevřené a používané, dokud spojení existuje a transakce neskončila. Když se aplikace potvrdí, otevřené kurzory se uvolní.

Proto jako návrhář aplikací potřebujete znát hrubý odhad potřebných otevřených kurzorů pro vaši nejsložitější transakci.

Potíž spočívá v neschopnosti pohledů na interní parametry oracle (v$open_cursor, v$sesstat, atd.) ukázat rozdíl mezi otevřenými kurzory, které jsou opakovaně použitelné, a otevřenými kurzory, které jsou stále blokovány (nejsou znovu použitelné!) neuzavřenou sadu ResulSet nebo prohlášení. Pokud zavřete všechny objekty Statement a ResultSet v bloku konečně, vaše aplikace je naprosto v pořádku.

Úprava parametru init.ora funguje takto (naše aplikace potřebuje maximálně 800 kurzorů)

ALTER SYSTEM SET open_cursors = 800 SCOPE=BOTH;


  1. Vyberte počet řádků v jiné tabulce v příkazu Postgres SELECT

  2. Základy tabulkových výrazů, část 12 – Inline tabulkové funkce

  3. Rozdíl mezi tabulkovou funkcí a zřetězenou funkcí?

  4. Oracle:PŘI AKTUALIZACI DUPLIKÁTNÍHO KLÍČE