sql >> Databasteknik >  >> RDS >> Oracle

Avslutande ResultSet men inte avslutande PreparedStatement

Läckan kommer att vara det största problemet med öppen markör.

ORA-01000: maximum open cursors exceeded

Om det maximala antalet öppna markörer överskrids kommer databasen att bli oanvändbar, förutom de markörer som redan hålls. Men de flesta gånger när detta händer används inte ens de hållna markörerna (vilket skulle vara fallet i din fråga).

Sedan java 7 är det bästa sättet att hantera detta att använda ett försök med resurser . Båda ResultSet och PreparedStatement implementerar AutoCloseable gränssnitt vilket innebär att de kommer att stängas när de inte behövs längre.

Om du inte har java 7 måste du hantera detta i finally blockera, men se till att du verifierar för nollvärden innan du stänger annars kan du stöta på en NPE om resursen aldrig initierades.

Observera att det omvända inte kommer att orsaka några problem eftersom att stänga ett uttalande kommer automatiskt att stänga resultatet.

Observera att du enkelt kan tillåta fler markörer till din applikation för mindre chans att överskrida maxgränsen.

ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;

Men för det mesta om du stöter på maximalt öppna markörer borde detta inte vara en lösning eftersom det bara skulle dölja det verkliga problemet.



  1. Hur kombinerar man dessa frågor för att uppnå snabbare prestanda?

  2. två främmande nycklar till samma numeriska datatyp och referera till två tabeller

  3. Oracle infogar automatiskt post i multirecord-block del 2

  4. Skapa olika resultatuppsättningar med en resultatuppsättning