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 >