Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1

ТЕМА: Oracle, Cursors, базовые настройки, Как избежать исключение ORA-01000: количеств

Oracle, Cursors, базовые настройки, Как избежать исключение ORA-01000: количеств 04 дек 2017 08:49 #8857

Добрый день.

Разрабатываю ПО, которое основную работу проводит с сетевыми устройствами и по столько по сколько использует базу oracle(требование заказчика) для хранения некоторой информации об устройствах и изображений, полученных с устройств. До этого всегда использовал для таких целей MySQL и с Oracle не знаком. С подключением к базе(пищу на Visual Studio 2017 и использую OracleClient) и отправкой запросов я разобрался. Запросы не мудреные, в основном SELECT'ы при загрузке данных при старте и INSERT'ы при записи состояний в базу и записи изображений в BLOB.
Oracle скачал и установил с офф сайта, последнюю версию.
Но при работе с базой возникает ошибка "ORA-01000: количество открытых курсоров превысило допустимый максимум".

Отсюда вопросы:
1) Есть ли ограничения в той версии Oracle, которая доступна на сайте.
2) Какие значения задать для processes и open_cursors(значение sessions я вообще не нашел в init.ora), возможно еще какие-то значения нужно изменить?
3) Как избежать накопления неявных открытых курсоров или как закрывать поле каждого запроса

Заранее прошу прощение, если что-то не так написал, так как не имею опыта работы с Oracle. Если нужны какие-то примеры запросов или кода могу привести. Заранее скажу, что будет около 300 потоков(по 1 на каждое устройство), каждый раз в секунду выполняет 1 UDPATE (записывает состояние - около 12 полей) и возможно 1 INSERT, если есть необходимость записать изображение, 1 SELECT. Сейчас работает только один поток, но проблема уже возникает время от времени.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Oracle, Cursors, базовые настройки, Как избежать исключение ORA-01000: количеств 09 окт 2019 11:16 #9516

  • apv
  • apv аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 401
  • Репутация: 6
  • Спасибо получено: 38
Утечка курсоров в большинстве случаев - это следствие кривого кода.
Нужно учитывать 3 важных значения:
  1. init.ora parameter open_cursors
  2. v$open_cursor view
  3. v$sysstat view
Эти значения похожи, но различаются в учете динамических курсоров. Динамические курсоры - это те, которые открываются с помощью dbms_sql.open_cursor ().

Средства для вычисления этих значений следующие:
1. Представление v$open_cursor
'select count(*) from v$open_cursor' =>
implicit cursors used +
distinct explicit cursors opened +
dynamic cursors PARSED and NOT CLOSED.

2. Представление v$sysstat
'select value from v$sysstat where statistic# = 3' =>
implicit cursors used +
distinct explicit cursors opened +
dynamic cursors OPENED.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от apv.
  • Страница:
  • 1