Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
Рейтинг 4.61/64: Рейтинг темы: голосов - 64, средняя оценка - 4.61
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517

ORA-01000: maximum open cursors exceeded в процедуре где курсоры явно не открываються

18.11.2014, 16:13. Показов 13207. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кратко: оракл выдаёт указанную ошибку в процедуре которая не открывает явно курсоров и вообще пытаеться сделать execute immediate 'insert into x select * from y'.
Сваливаеться не сразу, а обычно если процедура поработала часов 10 притом зачастую это попадает на время активного использования сервера другими пользователями.
Ошибка не пропадёт пока не перезапустить ide (со слов админов), тоесть я так понимаю пока не завершить сессию если вызвать процедуру повторно то она снова свалиться с той же ошибкой на той же таблице несмотря на то что был rollback как-будто и впрямь какой-то ресурс удерживает сессия ....

Если подробно то:
Кликните здесь для просмотра всего текста
Есть задача переноса данных из таблиц x в arch_x с некоторыми правилами.

Работает примерно так:
1) Процедура заполняет таблицу buffer данными по id записей которые надо архивировать.
COMMIT;
2)Используя DBMS_PARALLEL_EXECUTE создаёться задача, разбиваеться на чанки и в parallel вызываеться для ~50 таблиц где каждый поток вызывает процедуру которая делает просто
Oracle 11 SQL
1
2
3
4
5
EXECUTE IMMEDIATE 
   INSERT INTO arch_X SELECT * FROM x, buffer WHERE x.id = buffer.id;
 
EXECUTE IMMEDIATE
   DELETE X WHERE id IN (SELECT id FROM buffer);
COMMIT/ROLLBACK в этом блоке не делаеться так как DBMS_PARALLEL_EXECUTE сам по успешному завершению задачи делает коммит, а если возникло исключение - ROLLBACK.
После выполнения задача удаляеться.
3)Выполняеться та же процедура что и выше но для одной особенной таблички, её особенность в том что на неё есть FK у остальных поэтому в ней данные архивируються в последнюю очередь и вот на ней иногда выскакивает эта ошибка именно на первой части, тоесть прямо на строке
Oracle 11 SQL
1
2
EXECUTE IMMEDIATE 
   INSERT INTO arch_X


Куда копать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.11.2014, 16:13
Ответы с готовыми решениями:

java.sql.SQLException: ORA-00020: maximum number of processes exceeded
Kak borotsja s etoj oshibochkoj, ne podskazhete?

ORA-01000 maximum open cursors
Добрый день! При одновременном подключении нескольких пользователей (тонкий клиент ASP.NET) БД выдает ошибку ora-01000 Приложение в IIS...

maximum user count exceeded
Здравствуйте, уважаемые коллеги. У меня возник такой вопрос. Я на основе firebird создал базу. В Delphi создал формы ведения данной...

5
190 / 55 / 4
Регистрация: 10.11.2014
Сообщений: 508
Записей в блоге: 1
18.11.2014, 16:38
копать примерно в области параметров сессии. когда то правил параметры. покопаю склерозник и скажу
0
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
18.11.2014, 17:35  [ТС]
Всё оказалось проще, поймал админов за руку после того как ошибка произошла и запретил отключать сессию.
Посмотрел - и впрямь 298 из 300 доступных открыто курсоров. Похоже днём при большой активности юзеров действительно не хватает курсоров для моей архивации (она многопоточная, ей надо побольше ресурсов всё же).
0
190 / 55 / 4
Регистрация: 10.11.2014
Сообщений: 508
Записей в блоге: 1
18.11.2014, 17:52
хорошо тебе. есть кого ловить. а мне все самому приходится делать.

select count(*) sessions from v$session;
select count(*) processes from v$process;
select count(*) cursors from v$open_cursor;

это посмотреть (у меня уперлось не в курсоры а в сессии)
где-то было написано что эти три параметры взаимосвязаны.
а вот нашел - это статья у Тома Кайта AskTom Processes, sessions and open_cursors

Добавлено через 57 секунд
Hi,

when you got this error always check trace file. In my trace file was this error:

ORA-00020: maximum number of processes (2000) exceeded

So what does mean?

1) This error is related to parameter processes.

SQL> show parameter processes

NAME TYPE VALUE
————————————
processes integer 2000

–> It it max value

current value:

select count(*) from v$process;

COUNT(*)
———-
1122

==> It is ok now. Parameter processes set max value for operating system processes

Parameter Sessions set max. value for session in oracle and should be calculate from parameter processes.

Session=(processes * 1.1 ) +5

In our case (2000 * 1.1) +5 = 2205

SQL> show parameter sessions

NAME TYPE VALUE
———————————— ———– ——————————
sessions integer 2205

–> current number of sessions

select count(*) from v$session;

COUNT(*)
———-
1122

==> we are under limit and this is ok.

Other parameter could be open_cursors. This parameter set max. number of open cursors per one session.

SQL>show parameter cursors

NAME TYPE VALUE
———————————— ———– ——————————
open_cursors integer 500

–> This mean that each session could have 500 open cursor. Together it is 2205 * 500 = 1102500 cursors.

Now we have open

SQL>select count(*) from v$open_cursor;

COUNT(*)
———-
18319

What value set to parameter open_cursors?

We can calculate 18319 / 2205 = 8.3

–> we can set it to 50 which is default value
2
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
18.11.2014, 18:26  [ТС]
Цитата Сообщение от pic16f874 Посмотреть сообщение
select count(*) sessions from v$session;
select count(*) processes from v$process;
select count(*) cursors from v$open_cursor;
Ну мне тоже приходиться искать проблему самому, только поймав админов за руку и запретив делать резкие движения вроде закрытия сессии. Админы ведь сами проблему не исправляют и в их причинах не разбираються, они только сообщают если где-то подозрительные показатели или ошибка.
0
190 / 55 / 4
Регистрация: 10.11.2014
Сообщений: 508
Записей в блоге: 1
18.11.2014, 18:49
перепостил содержимое старой статейки кайта, т.к. на сайте страница изменилась и ничего не понятно.
короче эти три параметра как то взаимосвязаны и изменять их надо вместе. и базу рестартовать надо.
я это делал ночью, когда никто не работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.11.2014, 18:49

Maximum recursion depth exceeded in comparison
Решил проверить время сортировки на разных по длине списках. При 10 и 100 элементах работает нормально. А при 1000 выдает: maximum...

Maximum execution time of 30 seconds exceeded
Fatal error: Maximum execution time of 30 seconds exceeded in c:\wamp\www\BD.php on line 35 что то связанное с времен им соединения ...

Maximum execution time of 30 seconds exceeded
Всем привет! У меня ВДСка. Пытаюсь запустить скрипт загрузки файла, файл не загружается. В логах PHP следующее: PHP Fatal error: Maximum...

Ошибка: Maximum call stack size exceeded
Решил поучиться js и решил написать простенькую прогу для решения квадратных уравнений(через дискриминант), но при попытке запустить Это...

Maximum execution time of 180 seconds exceeded
Всем привет! Сегодня без изменений в скрипте начал вылетать парсер с таймаутом Fatal error: Maximum execution time of 180 seconds...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
Расчёт периметра прямоугольника по координатам вершин
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить периметр прямоугольника, заданного координатами своих вершин на плоскости. Решение: Создан документ со следующими. . .
Подсчёт частоты трёхбуквенных слов в тексте
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Выясните, сколько раз в предложенном тексте встречается каждое трехбуквенное слово. Решение: Создан документ с единственным. . .
Сумма и количество положительных элементов в чётных строках массива
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить сумму и количество положительных элементов массива, расположенных в четных строках. Решение: Создан документ с. . .
Поиск произведения положительных чётных чисел в последовательности
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Дана произвольная последовательность целых чисел. Найти произведение положительных четных чисел данной последовательности. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru