Senhores, quando rodo a consulta abaixo, aparecem 2 registros no retorno, é
normal isso? (evidente que esse SQL_ID é o ID da consulta que está me
travando)

SELECT * FROM V$SQL WHERE SQL_ID='gg21bt1a13nqw'


Em 12 de fevereiro de 2014 14:41, Yuri Menon <yuri.me...@gmail.com>escreveu:

> Maravilha!
> Consegui encontrar a sessão com:
>
> SELECT A.SQL_ID, A.* FROM GV$SESSION A WHERE EVENT <> ('SQL*Net message
> from client') order by SECONDS_IN_WAIT;
>
> Beleza!
> Voltou a compilar a função ok?
> Mas infelizmente a sessão volta a "travar" quando mandei gerar o relatório.
>
>
> Em 12 de fevereiro de 2014 14:00, <jlchia...@yahoo.com.br> escreveu:
>
>
>>
>> Bem, se consulta na V$LOCK não trouxe nada, tá mais ou menos DEMONSTRADO
>> que não é lock exatamente o problema : talvez seja espera por library cache
>> latch, ou quetais... Primeiro veja lá se tem mais alguém executando o mesmo
>> stored pl/sql que vc quer alterar com a query (conectado como SYS ou
>> usuário privilegiado semelhante com acesso aos objs do SYS) :
>>
>> break on sid skip 1
>> prompt **** Currently Executing Packages ****
>> SELECT /*+ RULE */
>>   substr(DECODE(o.kglobtyp,
>>     7, 'PROCEDURE', 8, 'FUNCTION', 9, 'PACKAGE', 12, 'TRIGGER', 13,
>> 'CLASS'),1,15)  "TYPE",
>>   substr(o.kglnaown,1,30)  "OWNER",
>>   substr(o.kglnaobj,1,30)  "NAME",
>>   s.indx  "SID",
>>   s.ksuseser  "SERIAL"
>> FROM
>>   sys.X_$KGLOB  o,
>>   sys.X_$KGLPN  p,
>>   sys.X_$KSUSE  s
>> WHERE
>>   o.inst_id = USERENV('Instance') AND
>>   p.inst_id = USERENV('Instance') AND
>>   s.inst_id = USERENV('Instance') AND
>>   o.kglhdpmd = 2 AND
>>   o.kglobtyp IN (7, 8, 9, 12, 13) AND
>>   p.kglpnhdl = o.kglhdadr AND
>>   s.addr = p.kglpnses
>> ORDER BY 4, 2, 1
>> /
>>
>> E atenção que pode haver Recursividade aí , tipo : uma procedure A está
>> sendo executada e chama a função B que chama a mesma tal função que vc quer
>> recriar/recompilar...
>>
>>
>>  Se provado com a query acima que não é execução simultânea o problema,
>> aí aconselho a verificar ** exatamente ** pelo que as sessões estão
>> esperando, para vc poder identificar pelo que a tal sessão que está
>> tentando recriar/recompilar a função está esperando, o que pode ser feito
>> com uma query tipo a abaixo , preferencialmente executada numa tool gráfica
>> por causa do grande número de colunas :
>>
>> SELECT * FROM GV$SESSION WHERE EVENT <> ('SQL*Net message from client')
>> order by SECONDS_IN_WAIT;
>>
>> espere uns minutinhos, re-execute a query , tente localizar a sessão
>> "travada" pelos campos de osuser, logon_time, module, program, etc, e aí
>> veja exatamente Qual é o evento pelo qual a sessão está esperando, e
>> dependendo do caso as colunas p1,p2,p3 e/ou as de BLOCKING podem te indicar
>> qual a outra sessão que está usando o recurso ...
>>
>>   []s
>>
>>    Chiappa
>>  
>>
>
>

Responder a