Ora-01000 - ошибка превышения максимальных открытых курсоров - PullRequest
0 голосов
/ 06 января 2011

Я получаю следующее сообщение об ошибке в приложении Delphi / Oracle: «ora-01000 - превышено максимальное количество открытых курсоров». Код выглядит следующим образом:

begin
  for i := 0 to 150 do 
  begin

    with myADOQuery do
    begin
      SQL.Text := 'DELETE FROM SOMETABLE';
      ExecSQL; -- from looking at V$OPEN_CURSOR a new cursor is added on each iteration for the session
      Close; -- thought this would close the cursor but doesn't
    end;

  end;

end;

Я знаю, что могу решить проблему, просто увеличив число параметров OPEN_CURSORS, однако я бы скорее нашел решение, при котором курсор будет закрыт после выполнения запроса. Есть идеи?

Delphi 2006 BDS Oracle 10g

Ответы [ 4 ]

2 голосов
/ 06 января 2011
  • Считайте документы поддержки Oracle с идентификатором 76684.1 и 2055810.6.Я не использую ADO, но вам, возможно, придется найти способ, как настроить Oracle для того, чтобы не кэшировать операторы.
  • Значение max_cursor по умолчанию, как правило, слишком мало, обычно лучше его увеличить, оно будетзаставил Oracle использовать немного больше памяти, но на реальной машине это редко вызывает проблему.
  • Удалить целую таблицу TRUNCATE может быть лучше, чем DELETE, если только вам не нужно полагаться на поведение DELETE (т.е. триггеры запуска).
1 голос
/ 06 января 2011

попробуйте вместо этого использовать компонент TADOCommand.

TADOCommand чаще всего используется для выполнение языка определения данных (DDL) SQL-команды или выполнить хранимая процедура, которая не возвращает набор результатов.

или непосредственно с помощью функции TADOConnection.Execute

1 голос
/ 06 января 2011

Проверьте эту ссылку . Я не пользователь Oracle, но, как кажется, есть некоторый кеш курсора и, как говорится, «лучший совет для настройки OPEN_CURSORS - не настраивать его. Установите его достаточно высоко, чтобы вам не пришлось об этом беспокоиться». Поэтому я бы сказал, что даже если команда Close закрывает курсор, она все равно остается в кэше. Также есть несколько советов, как проверить текущую ситуацию.

0 голосов
/ 06 января 2011

Что произойдет, если вы опустите Close?

...