sql >> Databasteknik >  >> RDS >> Oracle

Oracle tar inte bort markörer efter stängning av resultatuppsättningen

Parametern init.ora open_cursors definierar det maximala antalet öppna markörer en session kan ha på en gång. Den har ett standardvärde på 50. Om applikationen överskrider detta nummer visas felet "ORA-01000:maximala öppna markörer överskrids".

Därför är det obligatoriskt att stänga JDBC-resurserna när de inte längre behövs, särskilt java.sql.ResultSet och java.sql.Statement. Om de inte är stängda har applikationen en resursläcka.

Vid återanvändning av Connection-objektet måste du vara medveten om att de öppnade orakelmarkörerna hålls öppna och används så länge anslutningen existerar och transaktionen har inte avslutats. När programmet aktiveras släpps de öppnade markörerna.

Därför behöver du som applikationsdesigner veta en grov uppskattning av de nödvändiga öppna markörerna för din mest komplexa transaktion.

Svårigheten ligger i oförmågan hos Oracles interna parametervyer (v$open_cursor, v$sesstat, et. al.) att visa skillnaden mellan öppnade markörer, som är återanvändbara och öppnade markörer, som fortfarande är blockerade (inte återanvändbara!) av ett oavslutet resultatuppsättning eller uttalande. Om du stänger alla Statement- och ResultSet-objekt i ditt finalblock är din applikation helt okej.

Justering av init.ora-parametern fungerar så här (vår applikation behöver max 800 markörer)

ALTER SYSTEM SET open_cursors = 800 SCOPE=BOTH;


  1. Beräknar skillnaden mellan två tidsstämplar i Oracle i millisekunder

  2. Hur man benchmarkar PostgreSQL-prestanda

  3. SQL Server-exekveringsplan — vad är det och hur hjälper det med prestandaproblem?

  4. ORACLE 11g skiftlägesokänslig som standard