ORA-01000: Превышено максимальное число открытых курсоров
OracleЧто это значит?
Сессия открыла больше курсоров, чем допускает параметр OPEN_CURSORS. Новый курсор открыть невозможно.
Почему возникает?
Приложение не закрывает открываемые объекты Statement/ResultSet (утечка курсоров), OPEN_CURSORS задан слишком низким для нагрузки или в цикле постоянно подготавливаются новые prepared statements, которые никогда не закрываются.
Как исправить
Отслеживайте открытые курсоры: SELECT * FROM v$open_cursor WHERE sid = ... и смотрите количество по сессиям через v$sesstat. Настоящее решение — закрывать каждый Statement/ResultSet в блоке finally в приложении (устранение утечки курсоров). В качестве обходного пути увеличьте OPEN_CURSORS: ALTER SYSTEM SET OPEN_CURSORS = 1000. Проверьте размер кэша операторов JDBC.
Ещё по этой СУБД
- ORA-00942Таблица или представление не существует
- ORA-01031Недостаточно привилегий
- ORA-00257Ошибка архиватора. До освобождения разрешено только внутреннее подключение
- ORA-00018Превышено максимальное число сессий
- ORA-28000Учётная запись заблокирована
- ORA-01578Повреждён блок данных Oracle (file #, block #)
- ORA-01722Недопустимое число