Bem off-topic, mas só para descontrair, esse assunto me lembrou uma vez em que um desenvolvedor inseriu uma linha na DUAL em produção.
Imaginem que beleza! Até hj tenho pena daquele DBA hehehe Todos os selects na dual davam TOO_MANY_ROWS!!! Thiago. jlchiappa escreveu: > Bom, a primeira coisa é ** realmente ** conferir o que está sendo > mesmo lockado, pode ser com o script de locked_objs mais abaixo > mostrado. Notar porém que a tabela DUAL ** pertence ** ao SYS, objetos > do SYS são ** internos **, vc é absolutamente proibido de fazert DMLs > neles, e locks vc só obtém dando um comando de lock ou um DML, tipo : > > [EMAIL PROTECTED]:SQL>select 1 from dual; > > D > - > X > > ==> consulto locks de objs, não há nada na dual, como deve ser : > > [EMAIL PROTECTED]:SQL>@locked_objs > > SID SERIAL# PROCESS USERNAME TERMINAL TYPE LMOD > LREQ OBJECT > ------- ------- -------- ------------ ------------ ------------ ---- > ---- ----------- > 3 1 596 SYS (SYST) CHIAPPA-WIN2 REDO THREAD X > NONE THREAD=1 > 4 1 1048 SYS (SYST) CHIAPPA-WIN2 TYPE=XR NULL > NONE ID1=4 ID2=0 > 5 1 1936 SYS (SYST) CHIAPPA-WIN2 TEMP SEGMENT RX > NONE NEW BLOCK ALLOCATION > > ==> agora mando todas as regras de bom senso pro espaço e faço um DML > numa tabela do sys, a dual : > > [EMAIL PROTECTED]:SQL>select 1 from dual for update; > > 1 > ------------------ > 1 > > [EMAIL PROTECTED]:SQL>@locked_objs > > SID SERIAL# PROCESS USERNAME TERMINAL TYPE LMOD > LREQ OBJECT > ------- ------- -------- ------------ ------------ ------------ ---- > ---- ----------------- > 3 1 596 SYS (SYST) CHIAPPA-WIN2 REDO THREAD X > NONE THREAD=1 > 4 1 1048 SYS (SYST) CHIAPPA-WIN2 TYPE=XR NULL > NONE ID1=4 ID2=0 > 5 1 1936 SYS (SYST) CHIAPPA-WIN2 TEMP SEGMENT RX > NONE NEW BLOCK ALLOCATION > 11 78 1772:186 SCOTT CHIAPPA-WIN2 DML/DATA ENQ RS > NONE SYS.DUAL > > > Note que só há uma entrada na v$session_wait ** SE ** houver outra > sessão esperando pelo meu lock, no caso atual por enquanto não há : > > [EMAIL PROTECTED]:SQL>@sids_waiting_now > > Sessões esperando por sql*net message estão aguardando > por resposta do usuário. > Sessões com wait_time <> 0 => consomem CPU > > Atenção à Coluna State, se ela for : > Waiting => ignore Waited Secs, Waited So Far=tempo até agora > Wait.Short Time => menos q um tick de CPU, ignorar > Wait. Know Time => Waited Secs=tempo total esperado, ignore Wait So Far > > > Waited Waited so > SID SEQ# Seconds Wait Event far (sec) Wait State > ---- ------ -------- ----------------------------- --------- > --------------- > 1 1631 0 pmon timer 4802 WAITING > 2 1809 0 rdbms ipc message 40 WAITING > 3 16727 0 rdbms ipc message 12 WAITING > 4 3764 0 rdbms ipc message 3 WAITING > 5 204 0 smon timer 1092 WAITING > 6 7 0 rdbms ipc message 4735 WAITING > 7 943 0 rdbms ipc message 4771 WAITING > 8 560 0 wakeup time manager 14 WAITING > 9 123 -1 SQL*Net message to client 0 WAITED > KNOWN TI > 11 180 0 SQL*Net message from client 859 WAITING > [EMAIL PROTECTED]:SQL> > > ==> agora vou ter outra: > > [EMAIL PROTECTED]:SQL>select 1 from dual for update; > > [EMAIL PROTECTED]:SQL>@sids_waiting_now > > Sessões esperando por sql*net message estão aguardando > por resposta do usuário. > Sessões com wait_time <> 0 => consomem CPU > > Atenção à Coluna State, se ela for : > Waiting => ignore Waited Secs, Waited So Far=tempo até agora > Wait.Short Time => menos q um tick de CPU, ignorar > Wait. Know Time => Waited Secs=tempo total esperado, ignore Wait So Far > > > Waited Waited so > SID SEQ# Seconds Wait Event far (sec) Wait State > ---- ------ -------- ----------------------------- --------- > --------------- > 1 1695 0 pmon timer 4995 WAITING > 2 1875 0 rdbms ipc message 18 WAITING > 3 17391 0 rdbms ipc message 6 WAITING > 4 3920 0 rdbms ipc message 0 WAITING > 5 205 0 smon timer 1285 WAITING > 6 7 0 rdbms ipc message 4928 WAITING > 7 981 0 rdbms ipc message 4964 WAITING > 8 572 0 wakeup time manager 24 WAITING > 9 137 -1 SQL*Net message to client 0 WAITED > KNOWN TI > 10 68 0 enqueue 9 WAITING > 11 180 0 SQL*Net message from client 1052 WAITING > [EMAIL PROTECTED]:SQL> > > ==> SE é isso que está ocorrendo aí, a sua aplicação tem um BUG enorme > e gigantesco, corrija isso pra ONTEM , enquanto isso não ocorrer o > banco VAI serializar acesso, uma sessão VAI interferir na outra como > vc mandou, simples assim. > > []s > > Chiappa > > [EMAIL PROTECTED]:SQL> > 1 rem > ----------------------------------------------------------------------- > 2 rem Filename: lock.sql > 3 rem Purpose: Display database locks and latched (with tables > names, etc) > 4 rem Date: 12-Apr-1998 > 5 rem Author: Frank Naude ([EMAIL PROTECTED]) > 6 rem > ----------------------------------------------------------------------- > 7 # > 8 col sid format 999999 > 9 col serial# format 999999 > 10 col username format a12 trunc > 11 col process format a8 trunc > 12 col terminal format a12 trunc > 13 col type format a12 trunc > 14 col lmode format a4 trunc > 15 col lrequest format a4 trunc > 16 col object format a73 trunc > 17 select > 18 s.sid, s.serial#, > 19 decode(s.process, null, > 20 decode(substr(p.username,1,1), '?', upper(s.osuser), > p.username), > 21 decode( p.username, 'ORACUSR ', upper(s.osuser), > s.process) > 22 ) process, > 23 nvl(s.username, 'SYS ('||substr(p.username,1,4)||')') > username, > 24 decode(s.terminal, null, rtrim(p.terminal, chr(0)), > 25 upper(s.terminal)) terminal, > 26 decode(l.type, > 27 -- Long locks > 28 'TM', 'DML/DATA ENQ', 'TX', 'TRANSAC ENQ', > 29 'UL', 'PLS USR LOCK', > 30 -- Short locks > 31 'BL', 'BUF HASH TBL', 'CF', 'CONTROL FILE', > 32 'CI', 'CROSS INST F', 'DF', 'DATA FILE ', > 33 'CU', 'CURSOR BIND ', > 34 'DL', 'DIRECT LOAD ', 'DM', 'MOUNT/STRTUP', > 35 'DR', 'RECO LOCK ', 'DX', 'DISTRIB TRAN', > 36 'FS', 'FILE SET ', 'IN', 'INSTANCE NUM', > 37 'FI', 'SGA OPN FILE', > 38 'IR', 'INSTCE RECVR', 'IS', 'GET STATE ', > 39 'IV', 'LIBCACHE INV', 'KK', 'LOG SW KICK ', > 40 'LS', 'LOG SWITCH ', > 41 'MM', 'MOUNT DEF ', 'MR', 'MEDIA RECVRY', > 42 'PF', 'PWFILE ENQ ', 'PR', 'PROCESS STRT', > 43 'RT', 'REDO THREAD ', 'SC', 'SCN ENQ ', > 44 'RW', 'ROW WAIT ', > 45 'SM', 'SMON LOCK ', 'SN', 'SEQNO INSTCE', > 46 'SQ', 'SEQNO ENQ ', 'ST', 'SPACE TRANSC', > 47 'SV', 'SEQNO VALUE ', 'TA', 'GENERIC ENQ ', > 48 'TD', 'DLL ENQ ', 'TE', 'EXTEND SEG ', > 49 'TS', 'TEMP SEGMENT', 'TT', 'TEMP TABLE ', > 50 'UN', 'USER NAME ', 'WL', 'WRITE REDO ', > 51 'TYPE='||l.type) type, > 52 decode(l.lmode, 0, 'NONE', 1, 'NULL', 2, 'RS', 3, 'RX', > 53 4, 'S', 5, 'RSX', 6, 'X', > 54 to_char(l.lmode) ) lmode, > 55 decode(l.request, 0, 'NONE', 1, 'NULL', 2, 'RS', 3, 'RX', > 56 4, 'S', 5, 'RSX', 6, 'X', > 57 to_char(l.request) ) lrequest, > 58 decode(l.type, 'MR', decode(u.name, null, > 59 'DICTIONARY OBJECT', > u.name||'.'||o.name), > 60 'TD', u.name||'.'||o.name, > 61 'TM', u.name||'.'||o.name, > 62 'RW', 'FILE#='||substr(l.id1,1,3)|| > 63 ' BLOCK#='||substr(l.id1,4,5)||' ROW='||l.id2, > 64 'TX', 'RS+SLOT#'||l.id1||' WRP#'||l.id2, > 65 'WL', 'REDO LOG FILE#='||l.id1, > 66 'RT', 'THREAD='||l.id1, > 67 'TS', decode(l.id2, 0, 'ENQUEUE', > 68 'NEW BLOCK ALLOCATION'), > 69 'ID1='||l.id1||' ID2='||l.id2) object > 70 from sys.v_$lock l, sys.v_$session s, sys.obj$ o, sys.user$ u, > 71 sys.v_$process p > 72 where s.paddr = p.addr(+) > 73 and l.sid = s.sid > 74 and l.id1 = o.obj#(+) > 75 and o.owner# = u.user#(+) > 76 and l.type <> 'MR' > 77 UNION ALL /*** LATCH HOLDERS ***/ > 78 select s.sid, s.serial#, s.process, s.username, s.terminal, > 79 'LATCH', 'X', 'NONE', h.name||' ADDR='||rawtohex(laddr) > 80 from sys.v_$process p, sys.v_$session s, sys.v_$latchholder h > 81 where h.pid = p.pid > 82 and p.addr = s.paddr > 83 UNION ALL /*** LATCH WAITERS ***/ > 84 select s.sid, s.serial#, s.process, s.username, s.terminal, > 85 'LATCH', 'NONE', 'X', name||' LATCH='||p.latchwait > 86 from sys.v_$session s, sys.v_$process p, sys.v_$latch l > 87 where latchwait is not null > 88 and p.addr = s.paddr > 89 and p.latchwait = l.addr > 90 / > =========================================================== > [EMAIL PROTECTED]:SQL>get sids_waiting_now > 1 # > 2 SET PAGES 999 > 3 column sid format 999 > 4 column seq# format 99999 > 5 column event format a29 heading "Wait Event" trunc > 6 column state format a15 heading "Wait State" trunc > 7 column secs format 9999999 heading "Waited so|far (sec)" > 8 column wt format 9999999 heading "Waited|Seconds" > 9 prompt > 10 prompt Sessões esperando por sql*net message estão aguardando > 11 prompt por resposta do usuário. > 12 prompt Sessões com wait_time <> 0 => consomem CPU > 13 prompt > 14 prompt Atenção à Coluna State, se ela for : > 15 prompt Waiting => ignore Waited Secs, Waited So Far=tempo até agora > 16 prompt Wait.Short Time => menos q um tick de CPU, ignorar > 17 prompt Wait. Know Time => Waited Secs=tempo total esperado, > ignore Wait So Far > 18 prompt > 19 SELECT sid, seq#, wait_time wt , event, seconds_in_wait secs, state > 20 FROM v$session_wait > 21 ORDER BY sid, wait_time, event > 22 / > > --- Em oracle_br@yahoogrupos.com.br, "zelobr" <[EMAIL PROTECTED]> escreveu > > > > Colegas, > > > > Estou com problema de lock EXCLUSIVE MODE na tabela SYS.DUAL ! Várias > > vezes já ocorreu de uma sessão estar travando outra (vejo pelo utllockt > > e evento ENQUEUE na v$session_Wait). A sessão que obteve o lock está > > rodando um select na sys.dual e não aparece o OBJ# na v$session. PElo > > enterprise manager também não aparece o nome/ID do objeto. Alguém tem > > alguma idéia de como solucionar isso? > > > > Oracle Standard Edition 9.2.0.6 > > RX 4640 Itanium 2 - 2 CPUs - 5 Gb RAM > > HP-UX 11.23 > > Aprox. 500 sessões abertas > > > > Tks > > > > > > > > > > -------------------------------------------------------------------------------------------------------------------------- > Atenção! As mensagens deste grupo são de acesso público e de inteira > responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > --------------------------------------------------------------------------------------------------------------------------__________________________________________________________________ > Este Grupo recebe o apoio da SQL Magazine - > www.devmedia.com.br/sqlmagazine > > > > > *Yahoo! Grupos, um serviço oferecido por:* > PUBLICIDADE > > > ------------------------------------------------------------------------ > *Links do Yahoo! Grupos* > > * Para visitar o site do seu grupo na web, acesse: > http://br.groups.yahoo.com/group/oracle_br/ > > * Para sair deste grupo, envie um e-mail para: > [EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]> > > * O uso que você faz do Yahoo! Grupos está sujeito aos Termos do > Serviço do Yahoo! <http://br.yahoo.com/info/utos.html>. > > -------------------------------------------------------------------------------------------------------------------------- Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ --------------------------------------------------------------------------------------------------------------------------__________________________________________________________________ Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html