sql >> Database >  >> RDS >> Oracle

ORA-01000:maximale open cursors overschreden bij gebruik van Spring SimpleJDBCCall

Na veel testen hebben we dit probleem opgelost. Het is een combinatie van hoe we het Spring-framework en de Oracle-client en de Oracle DB gebruikten. We waren nieuwe SimpleJDBCCalls aan het maken die de metadata-aanroepen van de Oracle JDBC-client gebruikten die werden geretourneerd als cursors die niet werden gesloten en opgeschoond. Ik beschouw dit als een bug in het Spring JDBC-framework in de manier waarop het metadata aanroept, maar dan de cursor niet sluit. Spring zou de metagegevens uit de cursor moeten kopiëren en correct moeten sluiten. Ik heb niet de moeite genomen om een ​​jira-probleem met spring te openen, want als je de beste praktijken gebruikt, wordt de bug niet getoond.

Het aanpassen van OPEN_CURSORS of een van de andere parameters is de verkeerde manier om dit probleem op te lossen en vertraagt ​​het alleen maar om te verschijnen.

We hebben er omheen gewerkt / het opgelost door de SimpleJDBCCall naar een enkele DAO te verplaatsen, dus er is maar één cursor open voor elk orakelproces dat we aanroepen. Deze cursors zijn open voor de levensduur van de app - wat ik als een bug beschouw. Zolang OPEN_CURSORS groter is dan het aantal SimpleJDBCCall-objecten, zijn er geen problemen.



  1. while ($row =mysql_fetch_array($result)) - hoeveel loops worden er uitgevoerd?

  2. Hoe de prestaties van mysql-query's controleren?

  3. orakel datum volgorde?

  4. SQL-zelfstudie voor beginners