ORA-01000 - Превышено максимальное количество открытых курсоров - Spring JDBC 3.2.5
У нас есть приложение Java Enterprise, работающее на Weblogic Server 12c с использованием Spring JDBC 3.2.5 для доступа к базе данных Oracle 11gR2. В производственной среде через некоторое время мы получили это исключение: "ORA-01000 - Превышено максимальное количество открытых курсоров" и необходимо перезапустить экземпляр сервера; кажется, что открытые курсоры увеличиваются все больше и больше, пока не достигнут максимального порога, установленного в Oracle. Увеличение порога не решило проблему. Мы проверяем (очень большой) исходный код, но в настоящий момент мы не нашли ни одной точки, где мы пропускаем закрытие соединения; Более того, мы обычно не открываем и не закрываем соединения, но мы используем Spring JdbcTemplate для обработки взаимодействия с базой данных. Может ли быть проблема весны? Есть намеки?
2 ответа
Сообщение оракула "ORA-01000 - Превышено максимальное количество открытых курсоров" может быть вызвано не закрытием PreparedStatement
с или ResultSet
s. каждый PreparedStatement
или же ResultSet
курсор в базе данных Oracle
Чтобы обойти эту ошибку за короткий срок, вы можете увеличить лимит открытых курсоров в базе данных (но рано или поздно это произойдет снова).
Чтобы обойти эту ошибку на самом деле вы должны проверить все приложение и закрыть все открытые PreparedStatement
с или ResultSet
s.
Также промежуточный драйвер JDBC, который отслеживает все PreparedStatement
с или ResultSet
s может помочь определить проблемную часть приложения.