Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / превышениe макс. количества открытых курсоров / 7 сообщений из 7, страница 1 из 1
12.09.2002, 18:32
    #32050248
T34
T34
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
превышениe макс. количества открытых курсоров
При больших объемах обрабатывемых данных получаю после нескольких (раз 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
12.09.2002, 18:40
    #32050251
SAA_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
превышениe макс. количества открытых курсоров
А ты не мог бы перед RETURN курсор все-таки закрывать.
...
Рейтинг: 0 / 0
13.09.2002, 10:36
    #32050350
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
превышениe макс. количества открытых курсоров
В идеале вообще бы стоит перестраховаться:
Код: 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
13.09.2002, 11:32
    #32050376
SAA_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
превышениe макс. количества открытых курсоров
Об этом я тоже подумал... но не написал. С эксепшанами мне тоже пришлось столкнуться, особенно когда эти открытые курсоры держали записи. :(
...
Рейтинг: 0 / 0
13.09.2002, 11:43
    #32050378
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
превышениe макс. количества открытых курсоров
А вот интересно, могу ли я все-таки закрыть чужой курсор? Всякое бывает: столкнулся на рабочей базе с maximum of opened cursors exceeded, полез в v$open_cursor, и хочу уменьшить их количество. А по каким-то соображениям рестарт экземпляра Oracle неприемлем.
...
Рейтинг: 0 / 0
13.09.2002, 13:11
    #32050406
SAA_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
превышениe макс. количества открытых курсоров
Ну можно это попробовать. Но первая задача это получить хендлер курсора, а уж потом соорудить ему CLOSE
...
Рейтинг: 0 / 0
17.09.2002, 20:17
    #32051149
vskv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
превышениe макс. количества открытых курсоров
Ага, а потом ловить сессии, чьё поведение непрогнозируемо после получения "fetch out of sequence" (или что-то около того, когда пытаются достать данные из закрытого курсора). Уж лучше уж их "отстреливать", чтобы не мучались.

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

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


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