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

Afslutningsresultatsæt, men ikke afsluttende PreparedStatement

Lækagen vil være det maksimale problem med åben markør.

ORA-01000: maximum open cursors exceeded

Hvis det maksimale antal åbne markører overskrides, vil databasen blive ubrugelig, bortset fra de markører, der allerede er tilbageholdt. Men de fleste gange, når dette sker, bruges de holdte markører ikke engang (hvilket ville være tilfældet i dit spørgsmål).

Siden java 7 er den bedste måde at håndtere dette på at bruge en forsøg med ressourcer . Begge ResultSet og PreparedStatement implementerer AutoCloseable grænseflade, hvilket betyder, at de vil blive lukket, når de ikke længere er nødvendige.

Hvis du ikke har java 7, så skal du håndtere dette i finally blokere, men sørg for at verificere for null-værdier, før du lukker, ellers kan du støde på en NPE, hvis ressource aldrig blev initialiseret.

Bemærk, at det omvendte ikke vil forårsage noget problem, da lukning af en erklæring automatisk vil lukke resultatsættet.

Bemærk, at du nemt kan tillade flere markører til din applikation for mindre chance for at overskride maksimum.

ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;

Men det meste af tiden, hvis du støder på maksimalt åbne markører, burde dette ikke være en løsning, da det kun ville skjule det virkelige problem.



  1. Lightswitch tillader ikke tilføjelse eller ændring af poster i MySQL

  2. Hvordan overfører eller eksporterer du SQL Server 2005-data til Excel

  3. Database-uafhængig MAX() funktion i SQLAlchemy

  4. Dvale:Dubletnøgleværdi overtræder unik begrænsning