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 >> >> > >