Na verdade nem só desenvolvedor faz isso não, na época da v7 principalmente já vi alguns produtos de terceiros que tacavam uma linha a mais na dual, ou que criavam uma tabela DUAL no schema deles, isso era o próprio balaio de gatos...
[]s Chiappa --- Em oracle_br@yahoogrupos.com.br, Thiago Lazzarotto <[EMAIL PROTECTED]> escreveu > > 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] subject=Unsubscribe> > > > > * 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