- Este tópico contém 6 respostas, 3 vozes e foi atualizado pela última vez 18 anos, 6 meses atrás por
souza.
-
AutorPosts
-
31 de maio de 2007 às 9:50 pm #79546
souza
ParticipanteComo faço para saber se existe algum usuário ou tabela em lock !? E se tiver como faço para desbloquear ?
1 de junho de 2007 às 12:10 am #79548JamirJr
ParticipanteAchei este script em outro forum:
Select sid, serial#, username, osuser, TO_CHAR (logon_time, ‘dd/mm/yyyy hh24:mi:ss’) logon,
TO_CHAR (TRUNC (last_call_et/3600), ’99’) || ‘:’ ||
TO_CHAR ((last_call_et/60)-(TRUNC (last_call_et/3600)*60), ‘09.99’)||’ Horas’ tempo_parado,
status, machine, terminal, program, module
From v$session
Where username is not null
Order by last_call_et desc;8)
1 de junho de 2007 às 12:55 am #79551souza
ParticipanteFiz o select e funcionou, porém tenho mais dúvidas. O resultado será LOCK na coluna status se o usuário estiver bloqueando alguma coisa ?
Como faço para matar o cara que estiver bloqueando ?
E este select traz o lock a nível de usuário…teria algum que traz a nível de tabela ?
1 de junho de 2007 às 4:35 pm #79554Marcio68Almeida
ParticipantePara identificar o LOCK
Select s.sid, s.serial#, o.owner, s.lockwait, s.username, s.osuser, s.terminal, s.status, l.id2,
decode (NVL (l.id2, 0), 0, o.object_name, 'Trans-' || to_char (l.id1)) object_name,
decode (NVL (l.type, '.'), 'BL', 'Buffer hash table instance', 'CF', 'Control file schema global enqueue', 'CU', 'Cursor bind',
'CI', 'Cross-instance function invocation instance','DF', 'Data file instance', 'JQ', 'Job queue',
'DL', 'Direct loader parallel index create', 'TX', 'Transaction enqueue', 'UL', 'User supplied',
'DM', 'Mount/startup db primary/secondary instance', 'DR', 'Distributed recovery process',
'DX', 'Distributed transaction entry', 'TM', 'DML enqueue', l.type) type,
decode (NVL (l.lmode, 0), 0, '--Waiting--', 1, 'Null', 2, 'Row Share', 3, 'Row Excl', 4, 'Share', 5, 'Sha Row Exc', 6, 'Exclusive', 'Other') "Lock Mode",
decode (NVL (l.request, 0), 0, ' - ', 1, 'Null', 2, 'Row Share', 3, 'Row Excl', 4, 'Share', 5, 'Sha Row Exc', 6, 'Exclusive', 'Other') "Req Mode"
From v$lock l, v$session s, dba_objects o
Where s.sid = l.sid (+)
and l.id1 = o.object_id (+)
and s.username is not null
Order by l.id2, s.sid
Para matar a sessão…
alter system kill session 's.sid,s.serial#'1 de junho de 2007 às 8:44 pm #79562souza
ParticipanteObrigado. Porém tenho a seguinte situação. Toda vez que alguém faz alguma inserção o sistema bloqueia a tabela com o comando
LOCK TABLE tabela IN EXCLUSIVE MODE NOWAIT;
e depois desbloqueia. Eu quero conseguir monitorar isso aí, pois às vezes algum usuário fica pendurado numa transação e não dá commit . Aí essa table fica bloqueada e ninguém consegue trabalhar.
Gostaria de saber se existe como monitorar esses locks de tabelas
1 de junho de 2007 às 10:46 pm #79567Marcio68Almeida
Participantepara ficar monitorando seria necessário deixar um processo rodando para avaliar o momento em que a tabela foi restringida, o que não é uma opção viável…
o correto é corrigir o seu aplicativo para que só “lock” a tabela quando ela for atualizada, alias, não se deve restringir toda a tabela e sim somente a linha que está sendo modificada…1 de junho de 2007 às 11:10 pm #79570souza
ParticipanteSim Sim, é só a linha que estou bloqueando . MAs se por exemplo ela não destravar eu queria saber quem está bloqueando para poder matar.
-
AutorPosts
- Você deve fazer login para responder a este tópico.