powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / превышениe макс. количества открытых курсоров
7 сообщений из 7, страница 1 из 1
превышениe макс. количества открытых курсоров
    #32050248
T34
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
T34
Гость
При больших объемах обрабатывемых данных получаю после нескольких (раз 10) выполнений моей хранимой процедуры сообшение о превышении макс. количества открытых курсоров ( ) !
Все курсоры у меня явные, и все чЭсно закрываю !
Методом научного тыка выявленна виновность след. функции (которая многократно вызывается из общей хр.процедуры, и используется для команд (update-ов) динамического SQL, )

В чем я не прав ?:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR REPLACE FUNCTION GlobExecDMLAnweisung( aSQLStatement in varchar2 ) return integer 
is 
dyn_cur1 number; 
begin 
dyn_cur1 := dbms_sql.open_cursor; 
dbms_sql.parse( dyn_cur1, aSQLStatement, dbms_sql.NATIVE ); 
return (dbms_sql.execute( dyn_cur1 )); 
dbms_sql.close_cursor( dyn_cur1 ); 
end;
...
Рейтинг: 0 / 0
превышениe макс. количества открытых курсоров
    #32050251
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты не мог бы перед RETURN курсор все-таки закрывать.
...
Рейтинг: 0 / 0
превышениe макс. количества открытых курсоров
    #32050350
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В идеале вообще бы стоит перестраховаться:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE OR REPLACE FUNCTION GlobExecDMLAnweisung( aSQLStatement in varchar2 ) return integer
is
dyn_cur1 number;
begin
  dyn_cur1 := dbms_sql.open_cursor;
  dbms_sql.parse(dyn_cur1, aSQLStatement, dbms_sql.NATIVE);
  dyn_cur1 := dbms_sql.execute(dyn_cur1);
  dbms_sql.close_cursor(dyn_cur1);
  return dyn_cur1;
exception then others then
  if dbms_sql.is_open(dyn_cur1) then dbms_sql.close_cursor(dyn_cur1); end if;  
  raise;
end;
...
Рейтинг: 0 / 0
превышениe макс. количества открытых курсоров
    #32050376
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Об этом я тоже подумал... но не написал. С эксепшанами мне тоже пришлось столкнуться, особенно когда эти открытые курсоры держали записи. :(
...
Рейтинг: 0 / 0
превышениe макс. количества открытых курсоров
    #32050378
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот интересно, могу ли я все-таки закрыть чужой курсор? Всякое бывает: столкнулся на рабочей базе с maximum of opened cursors exceeded, полез в v$open_cursor, и хочу уменьшить их количество. А по каким-то соображениям рестарт экземпляра Oracle неприемлем.
...
Рейтинг: 0 / 0
превышениe макс. количества открытых курсоров
    #32050406
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну можно это попробовать. Но первая задача это получить хендлер курсора, а уж потом соорудить ему CLOSE
...
Рейтинг: 0 / 0
превышениe макс. количества открытых курсоров
    #32051149
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, а потом ловить сессии, чьё поведение непрогнозируемо после получения "fetch out of sequence" (или что-то около того, когда пытаются достать данные из закрытого курсора). Уж лучше уж их "отстреливать", чтобы не мучались.

Кстати, тут столкнулся с проблемой, что неявные курсоры (в том числе и для INSERT INTO ... VALUES ...; DELETE FROM ...) не закрывались из-за опций прекомпилятора (вполне разумно выставленных в hold...=yes; release...=no).

А всё из-за того, что если этот самый INSERT одна и та же сессия делает по 20 раз в секунду, то закрывать-открывать курсор не есть разумно.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / превышениe макс. количества открытых курсоров
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]