- Este tópico contém 6 respostas, 2 vozes e foi atualizado pela última vez 18 anos, 5 meses atrás por
Anônimo.
-
AutorPosts
-
3 de outubro de 2007 às 9:07 pm #80544
Anônimo
Enviada: Qua, 03 Out 2007 11:43 am Assunto: Problema com lock table
——————————————————————————–
Bom dia pessoal
Estou com um probleminha.
Tenho uma função que utiliza o comando lock para bolquear a tabela
Código: LOCK TABLE ARC_COLETA_LOTE IN EXCLUSIVE MODE
O problema agora é a tabela está bloqueada e eu não consigo fazer mais nada.
Alguém saberia me dizer qual o comando para desbloquear. Se lock bloquea qual o seu oposto.
E eu preciso também saber o que foi bloqueado.
Se alguém puder me ajudar eu agradeço.
Atenciosamente,
Sheila
3 de outubro de 2007 às 9:29 pm #80545Marcio68Almeida
ParticipantePara desbloquear você deve dar COMMIT ou ROLLBACK !!!
Por que travar toda a tabela ???3 de outubro de 2007 às 9:52 pm #80546Anônimo
Marcos Vou tentar explicar melhor o que está acontecendo.
Eu tenho uma procedure que chama uma função.
Nesta procedure estou inserindo dados em uma tabela.
Na tabela em questão eu tenho um campo seqüencial.
Para gerar o numero seqüencial a procedure chama a função que utiliza o comando lock para travar a tabela e depois faz uma select utilizando a função max para pegar o próximo elemento. Quando a função devolve o valor a procedure inseri os dados.
O problema é que toda a vez que eu chamo a procedure ela para no comando lock e não vai.
Logo de manhã a procedure funcionava certinha, inseri vários registros. Depois de algumas tentativas a procedure parou de funcionar derrepente. Esta procedure é bem antiga, já está funcionando a uns 3 anos pelo menos.
Agora eu não sei o que fazer. Acho que deve estar travado algum processo, eu não sei. Já procurei na internet algo sobre o lock, mas até agora nada.
A seleção eu faço normalmente. Só não consigo utilizar a procedure. Preciso dela funcionando.
Será que você sabe o que pode ser?
Se eu reiniciar o banco será que resolve?
Atenciosamente,
Sheila
3 de outubro de 2007 às 10:43 pm #80547Marcio68Almeida
ParticipantePelo que eu entendi, alguém já estava dando lock em pelo menos uma linha da tabela, quando você quer dar lock na tabela ele (o banco) vai ficar aguardando até liberar a linha, isso pode (e vai) gerar dead locks…
Reveja o seu processo…
Se alguém tentar rodar esse processo de dois lugares diferentes ou simplesmente alterar uma linha, a casa cai…
use o seguinte script para identificar o que está travando :
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
4 de outubro de 2007 às 12:04 am #80549Anônimo
Depois de identificado como eu faço para matar o processo?
4 de outubro de 2007 às 12:29 am #80550Marcio68Almeida
ParticipanteAlter system kill session ‘SID,SERIAL#’;
os números são entre aspas mesmo…
cuidado ao matar processos, isso não deve ser uma prática constante…4 de outubro de 2007 às 4:34 pm #80553Anônimo
Pessoal muito obrigada pela atenção de todos.
-
AutorPosts
- Você deve fazer login para responder a este tópico.