sql >> Database teknologi >  >> RDS >> Oracle

Oracle fjerner ikke markører efter lukning af resultatsæt

init.ora-parameteren open_cursors definerer det maksimale antal åbne markører en session kan have på én gang. Den har en standardværdi på 50. Hvis applikationen overskrider dette tal, hæves fejlen "ORA-01000:maksimale åbne markører overskredet".

Derfor er det obligatorisk at lukke JDBC-ressourcerne, når de ikke længere er nødvendige, især java.sql.ResultSet og java.sql.Statement. Hvis de ikke er lukket, har applikationen et ressourcelæk.

I tilfælde af genbrug af forbindelsesobjektet skal du være opmærksom på, at de åbnede orakelmarkører holdes åbne og i brug, så længe forbindelsen eksisterer og transaktionen er ikke afsluttet. Når applikationen forpligtes, frigives de åbnede markører.

Derfor har du som applikationsdesigner brug for at kende et groft skøn over de nødvendige åbne markører til din mest komplekse transaktion.

Vanskeligheden ligger i, at Oracles interne parametervisninger (v$open_cursor, v$sesstat, et. al.) ikke er i stand til at vise forskellen mellem åbnede cursorer, som er genanvendelige og åbnede cursorer, som stadig er blokerede (ikke genanvendelige!) af et ulukket resultatsæt eller erklæring. Hvis du lukker alle Statement- og ResultSet-objekter i din endelige blok, er din applikation helt i orden.

Justering af init.ora-parameteren fungerer sådan her (vores applikation kræver maksimalt 800 markører)

ALTER SYSTEM SET open_cursors = 800 SCOPE=BOTH;


  1. Dvale gemmer brugermodel til Postgres

  2. Sådan løses ORA-02014:kan ikke vælge TIL OPDATERING fra visning med DISTINCT, GROUP BY

  3. SQL Server 2017 Backup -2

  4. 3 måder at opdage, om en streng matcher et regulært udtryk i MySQL