Desbloquear registro de tabela

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
Avatar do usuário
Marciel
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 158
Registrado em: Qui, 03 Mai 2007 10:12 am
Localização: Vitória - ES
Sabe qual o cúmulo da ignorância, da apatia e da ira?
Não sei, não quero saber e tenho raiva de quem sabe.

Bom dia,

Por alguma razão que não consegui identificar e reproduzir, um registro de uma tabela do meu banco de dados ficou travado. Qualquer alteração nesse registro obtenho o erro "update by another use", mesmo me certificando que não há nenhum outro usuário acessando o mesmo (a não ser que haja alguma sessão travada).

Há como identificar a sessão/usuário que bloqueou o registro? Ou há outra forma de desbloquear sem reiniciar o banco de dados?
Avatar do usuário
madmax
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 293
Registrado em: Qua, 13 Dez 2006 5:02 pm
Localização: São Paulo
Contato:
________________________________
Douglas - Madmax.

Olá Marciel.

Existem 2 tipos de LOCK no banco os Implicitos e os Explicitos.

Os esplicitos são faceis de achar são aqueles que eestaão esperando um commit para liberar o registro eu normalmente uso este script para verificar quem e o BLOQUEADOR que esta causando o Lock

Selecionar tudo

SELECT (
  SELECT username
  FROM gv$session
  WHERE sid=a.sid) bloqueador ,
  a.sid, ' is blocking ', (
  SELECT username
  FROM gv$session
  WHERE sid=b.sid) blockee,
  b.sid
FROM gv$lock a, gv$lock b
WHERE a.block = 1
AND b.request > 0
AND a.id1 = b.id1
AND a.id2 = b.id2;
Os Locks Implícitos são mais dificieis de achar a causa normalmente so consegue ver no LOG no banco e fica com o erro ORA-0600 DEADLOCK.

Esses você tem que arrumar a aplicação que e o causador do lock, e as vezes so reiniciando o banco liberar este tipo de lock.

Espero ter ajudado.

Abs
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes