sql >> Databasteknik >  >> RDS >> Oracle

ORA-01000:maximala öppna markörer överskrids när Spring SimpleJDBCCall används

Efter många tester har vi åtgärdat detta problem. Det är en kombination av hur vi använde fjäderramverket och oracle-klienten och oracle DB. Vi skapade nya SimpleJDBCCalls som använde oracle JDBC-klientens metadataanrop som returnerades som markörer som inte stängdes och rensades upp. Jag anser att detta är en bugg i Spring JDBC-ramverket i hur det anropar metadata men stänger inte markören. Spring bör kopiera metadata från markören och stänga den ordentligt. Jag har inte brytt mig om att öppna ett jira-problem med våren för om du använder bästa praxis visas inte felet.

Att justera OPEN_CURSORS eller någon av de andra parametrarna är fel sätt att lösa det här problemet och fördröjer det från att visas.

Vi arbetade runt det/fixade det genom att flytta SimpleJDBCCall till en singleton DAO så att det bara finns en markör öppen för varje orakelproc som vi anropar. Dessa markörer är öppna under hela appens livstid - vilket jag betraktar som en bugg. Så länge OPEN_CURSORS är större än antalet SimpleJDBCCall-objekt kommer det inte att vara krångel.



  1. Använd Select eller PL SQL för att transponera

  2. oracle add_months-funktionen skiljer sig från Java

  3. Hur kan jag göra en migrering i laravel 5.5?

  4. Anrop lagrad procedur från sqlplus