Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Сессия из Oracle NetCore сама каждую минуту создает один и тот же новый курсор  [new]
KorvinT
Member

Откуда: Ростовская область
Сообщений: 55
Перехожу с NETFramework на NetCore.
С Oracle.DataAccess.dll на Oracle.ManagedDataAccess.dll
И все вроде успешно, но через 3 часа работы программа вылетает с ошибкой "Слишком много открытых курсоров". И их действительно до хрена - причем одинаковых с одним и тем же sql_id. Я их не открывал!
Конкретно - более 200 одинаковых курсоров с sql-кодом:

DECLARE  
  err_code VARCHAR2(2000);  
  err_msg VARCHAR2(2000);  
BEGIN  
  SELECT VALUE into :p_nls_comp from nls_session_parameters where PARAMETER='NLS_COMP'; 
  SELECT VALUE into :p_nls_length_semantics from nls_session_parameters where PARAMETER='NLS_LENGTH_SEMANTICS'; 
  SELECT VALUE into :p_nls_nchar_conv_excep from nls_session_parameters where PARAMETER='NLS_NCHAR_CONV_EXCP'; 
  SELECT '0' into :p_err_code from dual;  
  SELECT '0' into :p_err_msg from dual;  
END;


Нигде в моей программе такого кода нет! Не мое!

Все эти курсоры с одинаковым типом "SESSION CURSOR CACHED" кроме одного, у которого тип "DICTIONARY LOOKUP CURSOR CACHED". Хотя и sql_id и Hash Value у них всех идентичны.

В какую сторону копать, не подскажите?
2 июн 21, 13:57    [22330309]     Ответить | Цитировать Сообщить модератору
 Re: Сессия из Oracle NetCore сама каждую минуту создает один и тот же новый курсор  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5888
KorvinT,

alter session set events 'trace[SQL_Execution.*] [SQL: &sqlid]{occurence:end_after 10} controlc_signal()';
замени &sqlid на sql_id этого проблемного блока и сразу после коннекта выполни в своей сессии. Где свалится - оттуда и лезет :)
2 июн 21, 14:21    [22330330]     Ответить | Цитировать Сообщить модератору
 Re: Сессия из Oracle NetCore сама каждую минуту создает один и тот же новый курсор  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7265
KorvinT
Перехожу с NETFramework на NetCore.
С Oracle.DataAccess.dll на Oracle.ManagedDataAccess.dll
И все вроде успешно, но через 3 часа работы программа вылетает с ошибкой "Слишком много открытых курсоров". И их действительно до хрена - причем одинаковых с одним и тем же sql_id. Я их не открывал!
Конкретно - более 200 одинаковых курсоров с sql-кодом:

DECLARE  
  err_code VARCHAR2(2000);  
  err_msg VARCHAR2(2000);  
BEGIN  
  SELECT VALUE into :p_nls_comp from nls_session_parameters where PARAMETER='NLS_COMP'; 
  SELECT VALUE into :p_nls_length_semantics from nls_session_parameters where PARAMETER='NLS_LENGTH_SEMANTICS'; 
  SELECT VALUE into :p_nls_nchar_conv_excep from nls_session_parameters where PARAMETER='NLS_NCHAR_CONV_EXCP'; 
  SELECT '0' into :p_err_code from dual;  
  SELECT '0' into :p_err_msg from dual;  
END;


Нигде в моей программе такого кода нет! Не мое!

Все эти курсоры с одинаковым типом "SESSION CURSOR CACHED" кроме одного, у которого тип "DICTIONARY LOOKUP CURSOR CACHED". Хотя и sql_id и Hash Value у них всех идентичны.

В какую сторону копать, не подскажите?



Похоже на инициализацию класса
Устанавливается NLS + инициализируются bind переменные для обработки ошибок
2 июн 21, 14:35    [22330346]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить