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

 



Responder a