Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Непредсказуемое кеширование  [new]
Zalm
Member

Откуда: Москва
Сообщений: 1927
Есть такая ситуация:

В пакете обычная процедура и стоит логирование вызова, внутри процедуры только select.

Суть проблемы в том, что в непредсказуемый момент эта процедура перестает вызываться и лог вызова по ней так же перестает писаться, однако клиент думает что с процедурой все хорошо и продолжает возвращать какие-то данные причем не корректные.

Преднамеренно создать такую ситуацию не представляется возможным.

Если отключиться от базы и полностью выключить клиент затем заново подключиться, бага сохранится в неизменном виде.
Лечение только одно, нужно развалить пакет, и удалить эту процедуру (например добавить 1 к названию) скомпилить с единицей, затем удалить единицу и скомпилить в том виде как изначально было, тогда лечится проблема мгновенно без перезапусков чего либо.

Этот баг с клиентом думаю не связан, так как даже если выполнить скрипт с вызовом процедуры в окне PL\SQL Developer будут те же не корректные данные и тоже отсутствие лога, а после "слома" пакета все сразу корректно становится.

Кто-то сталкивался с там?

Проблема распространяется не на пакет в целом, а на отдельно взятые процедуры, причем ни чем не отличающиеся от других.
26 сен 16, 12:40    [19708114]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
Elic
Member

Откуда:
Сообщений: 29976
Zalm
обычная процедура
Не result_cache функция?
26 сен 16, 13:41    [19708523]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Zalm
.. в непредсказуемый момент эта процедура перестает вызываться и лог вызова по ней так же перестает писаться, однако .. продолжает возвращать ..

поясните
26 сен 16, 13:55    [19708607]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
текст бы посмотреть
26 сен 16, 13:57    [19708619]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
Zalm
Member

Откуда: Москва
Сообщений: 1927
orawish
Zalm
.. в непредсказуемый момент эта процедура перестает вызываться и лог вызова по ней так же перестает писаться, однако .. продолжает возвращать ..

поясните


Я вызываю на клиенте процедуру (или в окне pl/sql developer), в итоге мне приходит какой-то результат (чаще всего тот, который ничего не имеют общего с действительностью), и при этом лог вообще не записывается
pf_json_error('test','profile'); хотя он записывается ВСЕГДА и везде, но только не тут когда случается такой залип.
Я могу даже написать pf_json_error('test','profile_lala'); перекомпилить пакет, перезапустить клиент и тд, ничего не изменится, всегда будет мусор в ответе, и только когда я сделаю что пакет стал инвалидным, затем скомпилю снова, тогда все ошибки и баги пропадают даже клиент перезапускать не нужно.

Elic
Zalm
обычная процедура
Не result_cache функция?

Нет, это процедура


andreymx
текст бы посмотреть


+

-- Дать профайл пользователя
Procedure GetProfile ( ASuperKey varchar2, HTTPRES out varchar2 ) is
-- [17.08.2016 21:47]
 ouResult clob;
 tm number;
--
 lClobWriter pls_integer:=1;
 lBlockSize pls_integer:=16000;
 vBuf varchar2(16000);
--
 res number:=0;
 UBlock pf_types.pf_t_user_block; 
 
 -- Информация клиента 
 cursor user_cur is
  select us.us_name,decode(SubStr(us.us_phone,1,4),'7000',null,us.us_phone) phone,us.us_email,d.client_bank_account   
    from pf_users us 
   inner join pf_users_dop d on d.us_id = us.us_id
   where us.us_id = UBlock.rUser_ID; 
   
 us_info user_cur%ROWTYPE;
 
 vMsg varchar2(512);
begin
 pf_json_error('test','profile');
 tm:=MyGetTickCount;
 begin   
 
  UBlock:=pf_f_get_user_block(ASuperKey);
  if UBlock.rFind = 1 then   
   
   ouResult:=null;
   for us_info in user_cur 
   loop
    res:=1;
    ouResult:='"user":{"name":"'||us_info.us_name||'","phone":"'||us_info.phone||'","email":"'||us_info.us_email||'","pay":"'||us_info.client_bank_account||'"},';
   end loop;      
   
  else
   vMsg:='Пользователь не найден';
  end if;
    
  if res=0 then 
   ouResult:='"msg":"'||vMsg||'",';     
  end if;  
  
  ouResult:=ouResult||'"result":'||res; 
 exception
  when others then
   begin
    ouResult:=null;
    pf_json_error(SQLCODE||' - '||SQLErrm,dbms_utility.format_error_backtrace);
    
    if ouResult is null then
     ouResult:='"result":0,"error":"'||replace(replace(SQLCODE||' - '||SQLErrm,'"',''''),SQLCODE||' - ORA'||SQLCODE||': ')||'"';
    end if;
 
    if SQLCODE = -6508 or sqlcode = -20787 then 
     raise_application_error (-20787,'RCS');
    end if;
 
   end;
 end;
 
 tm:=MyGetTickCount-tm;
 ouResult:='{'||ouResult||',"speed":'||To_Char(tm)||'}';
 
 -- Записать клоб в ответ
 loop   
  vBuf:=SubStr(ouResult,lClobWriter,lBlockSize);   
  HTTPRES:=Concat(HTTPRES,vBuf);
  lClobWriter:=lClobWriter+lBlockSize;
  exit when lClobWriter>Length(ouResult);  
 end loop; 
  
end;

26 сен 16, 14:23    [19708743]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2852
Zalm,

В pf_json_error ошибки не глотаются?
26 сен 16, 14:35    [19708795]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
Zalm
Member

Откуда: Москва
Сообщений: 1927
AlexFF__|
Zalm,

В pf_json_error ошибки не глотаются?


Нет, она просто в автономной транзакции пишет 1 строку в таблицу без индексов, больше ничего не происходит

сейчас пока тестировал снова такая бага возникла, что не пытался сделать - все безтолку, только инвалидация пакета спасает... эту ситуацию очень тяжело поймать в рабочем процессе, я даже не знаю как, разве что ошибку обработки словить на клиенте и все

Причем если скомпилить валидный пакет в это время - ничего не происходит, баг не пропадает, опять же повторюсь что с клиентом это не связано, так как клиент не нужно перезапускать что бы все начало норм работать, надо ток сломать пакет и собрать заново
26 сен 16, 14:42    [19708825]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
Valergrad
Member

Откуда:
Сообщений: 703
Почему вы думаете, что процедура не вызывается? Потому что pf_json_error не вызывается? Ну, так до него много чего происходит, например, объявление курсора.
26 сен 16, 14:45    [19708837]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
Zalm
Member

Откуда: Москва
Сообщений: 1927
Valergrad
Почему вы думаете, что процедура не вызывается? Потому что pf_json_error не вызывается? Ну, так до него много чего происходит, например, объявление курсора.


1) Думаю так потому что pf_json_error('test','profile'); перестает работать
2) Потому что процедура начинает отдавать невменяемые данные не связанные с реальностью (если взять тот же селект и выполнить, будут совершенно другие данные)
3) + еще так думаю потому, что инвалидация пакета решает только проблему, почему тогда только это помогает?
4) Если через pf_json_error('test','profile'); проверять вызов не корректно, каким еще способом проверить вызывается ли она?
26 сен 16, 15:05    [19708933]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2852
Zalm,

Попробуй вывод информации через dbms_output
26 сен 16, 16:08    [19709341]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
похоже на какой-то пакет с глобальной переменной, в котором есть обращение к указанной процедуре
26 сен 16, 18:47    [19710539]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
Zalm
Member

Откуда: Москва
Сообщений: 1927
AlexFF__|
Zalm,

Попробуй вывод информации через dbms_output


в момент залипухи dbms_output тоже ничего не выводит, это я проверял когда еще впервые сталкивался с этой проблемой...(
26 сен 16, 19:03    [19710638]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
Zalm
Member

Откуда: Москва
Сообщений: 1927
Zalm
AlexFF__|
Zalm,

Попробуй вывод информации через dbms_output


в момент залипухи dbms_output тоже ничего не выводит, это я проверял когда еще впервые сталкивался с этой проблемой...(


Глобальных переменных нет ни где
26 сен 16, 19:03    [19710642]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
ИМХО - ТС хитро настроил transparent failover и теперь троллит публику, рассказывая как он подключается то к одной, то к другой БД с одного дескриптора :)
26 сен 16, 19:07    [19710670]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
andrey_anonymous
ИМХО - ТС хитро настроил transparent failover и теперь троллит публику, рассказывая как он подключается то к одной, то к другой БД с одного дескриптора :)

Другой вариант - ТС не видит реальную проблему, поскольку задавил ее в довольно своеобразном when others.
Рекомендация: убрать when others и посмотреть, что на самом деле происходит при вызове.
26 сен 16, 19:24    [19710766]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
Zalm
Member

Откуда: Москва
Сообщений: 1927
andrey_anonymous
andrey_anonymous
ИМХО - ТС хитро настроил transparent failover и теперь троллит публику, рассказывая как он подключается то к одной, то к другой БД с одного дескриптора :)

Другой вариант - ТС не видит реальную проблему, поскольку задавил ее в довольно своеобразном when others.
Рекомендация: убрать when others и посмотреть, что на самом деле происходит при вызове.


Говорю же, ничего не происходит, не доходит туда вызов когда пакет так залипает
ни dbms_output ни другие мои процедуры логирования не срабатывают в проблемной процедуре до момента инвалидации пакета и новой сборки


andrey_anonymous
ИМХО - ТС хитро настроил transparent failover и теперь троллит публику, рассказывая как он подключается то к одной, то к другой БД с одного дескриптора :)

про эту настройку я ничего не слышал, и работаю я с одной базой
26 сен 16, 20:38    [19710923]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9241
Zalm
Говорю же, ничего не происходит, не доходит туда вызов когда пакет так залипает...

Не верим ( C ) Станиславский(е)

Не бывает такого. Вам уже сказали: исправьте свой говно код, уберите "exception when others" или, на худой конец, реализуйте его по человечески.

IMHO
26 сен 16, 20:44    [19710934]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
А клиент использует dedicated соединение? Никакие пулы сессий, случайно, не используются?
И секции инициализации точно нет в конце пакета? (про переменные понятно). По поведению, все-таки, похоже, что-то переинициализируется после изменения спецификации пакета.

Кстати, текст процедуры был приведен в конце сообщения , если вдруг кто-то не заметил...
27 сен 16, 11:29    [19712370]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
Еще бы текст pf_json_error было бы хорошо привести...
27 сен 16, 11:32    [19712387]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Деев И.
Еще бы текст pf_json_error было бы хорошо привести...

Да лучше наверное неформатированную (raw) трассу 10046 level 4 по проблемной сессии... Хоть вызов увидим и рекурсивные курсоры.
27 сен 16, 13:28    [19713180]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
Zalm
Member

Откуда: Москва
Сообщений: 1927
Деев И.
А клиент использует dedicated соединение? Никакие пулы сессий, случайно, не используются?
И секции инициализации точно нет в конце пакета? (про переменные понятно). По поведению, все-таки, похоже, что-то переинициализируется после изменения спецификации пакета.

Кстати, текст процедуры был приведен в конце сообщения , если вдруг кто-то не заметил...


В основном использую dedicated да, но но проблема повторяется как с клиента PL\SQL Developer так и с dedicated соединения на клиенте

Деев И.
Еще бы текст pf_json_error было бы хорошо привести...


+
create or replace procedure pf_json_error ( ER_Msg varchar2, ER_JSON varchar2, AIP varchar2 default null ) as pragma autonomous_transaction;
-- [25/01/2015] Записывает ошибки
begin
 insert into pf_json_errors(er_date,er_msg,er_json,ip)
   values (sysdate,Er_msg,Er_JSON,AIP);
 commit;
end;


andrey_anonymous
Деев И.
Еще бы текст pf_json_error было бы хорошо привести...

Да лучше наверное неформатированную (raw) трассу 10046 level 4 по проблемной сессии... Хоть вызов увидим и рекурсивные курсоры.


Самое главное как я и говорил, проблема не в конкретной сессии, когда залипает процедура, то можно выключать\включать клиент, можно PL\SQL Developer включить\выключить, ничего не поменяется, процедура так и будет залипшей, лечится исключительно инвалидацией пакета, других методов пока не нашел, вот это и есть основная проблема, если увидеть что она залипла - можно развалить пакет и снова собрать и все будет идеально, можно даже ни где не переподключаться

Ошибку эту никак не отследить, кроме как глазами увидеть что упало что-то на клиенте, и то, по факту ничего не падает, просто данные отдаются совсем не те, что есть в базе в текущий момент и логирования не происходит этой процедуры, вот только по этим двум признакам можно определить залипуху
28 сен 16, 09:33    [19716621]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
Zalm,
и это только с одним пакетом такое творится? Чем он такой особенный, интересно. Постоянно ли такое было с этим пакетом или началось ни с того ни с сего?

Бывало такое несколько раз, что возникали какие-то необъяснимые явления на базах, где многие разработчики или тестировщики активно накатывали изменения и т.п. Лечилось топорно - сбросом библиотечного кеша или перезагрузкой инстанса. Может, попробовать? Вдруг поможет...
28 сен 16, 17:52    [19719844]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Zalm

andrey_anonymous
пропущено...
лучше наверное неформатированную (raw) трассу 10046 level 4 по проблемной сессии... Хоть вызов увидим и рекурсивные курсоры.


Самое главное как я и говорил, проблема не в конкретной сессии, когда залипает процедура, то можно выключать\включать клиент, можно PL\SQL Developer включить\выключить, ничего не поменяется, процедура так и будет залипшей, лечится исключительно инвалидацией пакета, других методов пока не нашел
...
Ошибку эту никак не отследить

Мсье противоречит сам себе.
Если проблемное состояние стабильно - то подключаетесь, включаете трассировку и делаете вызов.
В трассе смотрите - кто, кого, как, когда и зачем позвал.
Или не позвал.
Или позвал, но не только того, кого ожидалось
29 сен 16, 16:17    [19724551]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Прямо в Pl/sql developer есть Pl/sql трассировка
29 сен 16, 16:53    [19724708]     Ответить | Цитировать Сообщить модератору
 Re: Непредсказуемое кеширование  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
xtender
Прямо в Pl/sql developer есть Pl/sql трассировка
для этого надо пакет с отладочной инфой перекомпилить, ситуация уйдёт
29 сен 16, 17:05    [19724775]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить