Boa tarde Raphael tenho a SQL abaixo que pode te ajudar apenas pode ser 
melhorada, caso consiga isso por favor nos encaminhe.
Att.

SELECT gvh.inst_id INST_BLOQUEADORA, gvh.SID SID_BLOQUEADORA, gvs.serial# 
SERIAL_BLOQUEADORA,
       gvs.status STATUS,gvs.username USUARIO_BLOQUEADOR, (select 
substr(sql_text,0,999) from gv$sql where sql_id = gvs.PREV_SQL_ID) 
SQL_BLOQUEADOR,
       gvs.module MODULO, gvw.inst_id INST_AGUARDANDO, gvw.SID SID_AGUARDANDO,
       (select username from gv$session where sid = gvw.sid and inst_id = 
gvw.inst_id) USUARIO_AGUARDANDO,
       (select substr(sql_text,0,999) from gv$sql where sql_id in (select 
sql_id from gv$session where sid = gvw.sid and inst_id = gvw.inst_id)) 
SQL_AGUARDANDO,
       decode(gvh.type, 'MR', 'Media_recovery',
                        'RT', 'Redo_thread',
                        'UN', 'User_name',
                        'TX', 'Transaction',
                        'TM', 'Dml',
                        'UL', 'PLSQL User_lock',
                        'DX', 'Distrted_Transaxion',
                        'CF', 'Control_file',
                        'IS', 'Instance_state',
                        'FS', 'File_set',
                        'IR', 'Instance_recovery',
                        'ST', 'Diskspace Transaction',
                        'IV', 'Libcache_invalidation',
                        'LS', 'LogStaartORswitch',
                        'RW', 'Row_wait',
                        'SQ', 'Sequence_no',
                        'TE', 'Extend_table',
                        'TT', 'Temp_table',
                              'Nothing-') TIPO_BLOQUEIO_ESPERA,
       decode(gvw.request, 0, 'None',
                           1, 'NoLock',
                           2, 'Row-Share',
                           3, 'Row-Exclusive',
                           4, 'Share-Table',
                           5, 'Share-Row-Exclusive',
                           6, 'Exclusive',
                              'Nothing-') modo_req_espera ,
       'alter system kill session '|| '''' || gvh.SID || ',' || 
gvs.serial#||',@'||gvs.INST_ID|| ''' IMMEDIATE;' "COMANDO_KILL_ORACLE",
       'EXEC KILL_SESSION ('|| gvh.SID || ',' || gvs.serial#||',' 
||gvs.INST_ID||');' "COMANDO_KILL_ORACLE1",
       'kill -9 '||p.spid "COMANDO_KILL_LINUX",
       
LPAD(TRUNC(gvw.ctime/3600),6)||':'||LPAD(MOD(TRUNC(gvw.ctime/60),60),2,'0')||':'||LPAD(MOD(gvw.ctime,60),2,'0')
 "TEMPO_ESPERA"
FROM gv$lock gvh, gv$lock gvw, gv$session gvs, gv$process p
WHERE (gvh.id1, gvh.id2) in (
           SELECT id1, id2 FROM gv$lock WHERE request=0
                INTERSECT
           SELECT id1, id2 FROM gv$lock WHERE lmode=0)
  AND gvh.id1=gvw.id1
  AND gvh.id2=gvw.id2
  AND gvh.request=0
  AND gvw.lmode=0
  AND gvh.SID=gvs.SID
  AND gvh.inst_id=gvs.inst_id
  and   gvs.paddr = p.addr
  and gvs.inst_id = p.inst_id



--- Em oracle_br@yahoogrupos.com.br, Raphael Franco <phadba@...> escreveu
>
> Pessoal,
> 
> Estou tentando elaborar uma query para verificar quem está em lock e quem 
> está em wait, porém está meio difícil de deixar as informações tudo em uma 
> unica consulta.
> 
> O que eu gostaria é (em um unico SQL):
> 
> ---Do lado do LOCKING
> Numero da Instancia
> Tempo de lock
> Usuario Locking
> Objeto Locking (tabela)
> Comando que está executando o lock
> Tipo de Lock
> 
> ---Do lado do WAINTING
> Nome da Instancia
> Tempo de Waiting
> Usuario Waiting
> Comando que esta executando em Waiting
> Qual sessão LOCK está me travando
> 
> 
> EXEMPLO:
> 
> INST_ID SID  USERNAME  TEMPO STATUS                  SQL_TEXT                 
>         OBJECT_NAME OBJECT_TYPE WAITER_MODE_REQ
> ------- ---- -------- ------ ----------------------- 
> -------------------------------- ----------- ----------- ---------------
>       1 200  DBA          38 BLOCKER                                          
>               TESTE       TABLE       Exclusive
>       2 900  SYS          37 WAITER SID_BLOCKER=200  update dba.teste set 
> cod=2             TESTE       TABLE       Exclusive
> 
> 
> Obs: Tenho varias consultas de Lock/Waits aqui, porém gostaria que o 
> resultado fosse esse acima, com o WAITER SID_BLOCKER=200, OBJECT_NAME e 
> SQL_TEXT.
> Em ORACLE RAC >= 10g
> 
> Agradeço quem ja tiver essa consulta pronta, pois ira me ajudar com o tempo 
> de contrução desse SQL.
> 
> .
> Raphael
>

Responder a