Het lek is het maximale open-cursorprobleem.
ORA-01000: maximum open cursors exceeded
Als het maximum aantal geopende cursors wordt overschreden, wordt de database onbruikbaar, met uitzondering van de cursors die al worden vastgehouden. Meestal worden de vastgehouden cursors echter niet eens gebruikt (wat het geval zou zijn in uw vraag).
Sinds Java 7 is de beste manier om hiermee om te gaan het gebruik van een probeer met middelen
. Beide ResultSet
en PreparedStatement
implementeert AutoCloseable
interface, wat betekent dat ze worden gesloten wanneer ze niet meer nodig zijn.
Als je geen java 7 hebt, moet je dit afhandelen in de finally
blok, maar zorg ervoor dat u controleert op null-waarden voordat u sluit, anders kunt u een NPE tegenkomen als de bron nooit is geïnitialiseerd.
Merk op dat het omgekeerde geen probleem zal veroorzaken, aangezien het sluiten van een instructie automatisch de resultatenset zal sluiten.
Houd er rekening mee dat u gemakkelijk meer cursors naar uw toepassing kunt toelaten, zodat u minder kans heeft om het maximum te overschrijden.
ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;
Als u echter maximaal geopende cursors tegenkomt, zou dit meestal geen oplossing moeten zijn, omdat het alleen het echte probleem zou verbergen.