Oracle
 sql >> база данни >  >> RDS >> Oracle

ORA-01000:максималните отворени курсори са надвишени при използване на Spring SimpleJDBCCall

След много тестове отстранихме този проблем. Това е комбинация от начина, по който използвахме пролетната рамка и клиента на oracle и базата данни на oracle. Създавахме нови SimpleJDBCCalls, които използваха извиквания за метаданни на клиента JDBC на oracle, които бяха върнати като курсори, които не бяха затворени и изчистени. Считам това за грешка в Spring JDBC рамката в начина, по който извиква метаданни, но след това не затваря курсора. Spring трябва да копира метаданните от курсора и да го затвори правилно. Не съм си правил труда да отварям проблем с jira с spring, защото ако използвате най-добрата практика, грешката не се показва.

Промяната на OPEN_CURSORS или някой от другите параметри е грешен начин за отстраняване на този проблем и само забавя появата му.

Заобиколихме го/поправихме го, като преместихме SimpleJDBCCall в единична DAO, така че да има само един отворен курсор за всяка процедура на oracle, която извикваме. Тези курсори са отворени през целия живот на приложението - което считам за грешка. Докато OPEN_CURSORS е по-голям от броя на обектите SimpleJDBCCall, тогава няма да има проблеми.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Връщане на стойност от sql скрипт към shell скрипт

  2. Oracle Data Access FileNotFound:Oracle.DataAccess.Common.Configuration.Section.xsd

  3. ИЗБЕРЕТЕ INTO с помощта на Oracle

  4. SQL (ORACLE):ORDER BY и LIMIT

  5. Функция ASCIISTR() в Oracle