На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела C/C++: Базы данных
Модераторы: B.V.
  
    > Oracle, Cursors, базовые настройки , Как избежать исключение ORA-01000: количество открытых курсоров превысило допустимый максимум
      Добрый день.

      Разрабатываю ПО, которое основную работу проводит с сетевыми устройствами и по столько по сколько использует базу 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. Нет, на сайте Oracle доступна полноценная версия базы данных Oracle, а не какая-то урезанная версия.

        2. Количество процессов и открытых курсоров в базе данных зависит от конкретных требований приложения и количества соединений с базой данных. Для установки значений параметров в файле инициализации init.ora можно использовать следующие параметры:

        PROCESSES: устанавливает максимальное количество процессов, которое может использовать база данных.
        OPEN_CURSORS: устанавливает максимальное количество открытых курсоров на сессию в базе данных.
        Значения параметров можно установить в файле init.ora или динамически с помощью команд SQL в сеансе базы данных.

        3.Для закрытия курсора в Oracle используйте команду CLOSE. После выполнения запроса, курсор будет закрыт автоматически, но если вы используете курсор в цикле или вложенных блоках, то следует явно закрывать его после использования. Неявное закрытие курсора может привести к утечкам памяти и другим проблемам производительности.
        Для оптимизации производительности и избежания ошибки "ORA-01000: количество открытых курсоров превысило допустимый максимум", рекомендуется использовать параметризованные запросы и избегать использования динамических запросов с неопределенными параметрами. Также, можно использовать пакеты PL/SQL для группировки запросов и минимизации количества открытых курсоров.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0167 ]   [ 17 queries used ]   [ Generated: 28.03.24, 21:04 GMT ]