Pular para o conteúdo

Erro de Lock - ORA-01591

Dica publicada em Banco de Dados / Oracle
Márcio de Souza Almeida marcio68almeida
Hits: 21.444 Categoria: Banco de Dados Subcategoria: Oracle
  • Indicar
  • Impressora
  • Denunciar

Erro de Lock - ORA-01591

Hoje tive um problema que resolvi compartilhar a solução que, embora simples, pode causar certo transtorno se não encontrada rapidamente.

Este erro é causado devido a uma transação distribuída onde houve queda de conexão ou qualquer outro processo que interrompa a transação e bloqueie a tabela.

Quando você vai efetuar uma consulta com agrupamento:

SQL> Select count(1), controle From tabela;
select count(1), controle from tabela
*
ERRO na linha 1:
ORA-01591: lock held by in-doubt distributed transaction 22.11.41636

Na página de erros da Oracle você encontra o seguinte:
ORA-01591: lock held by in-doubt distributed transaction string
Cause: Trying to access resource that is locked by a dead two-phase commit transaction that is in prepared state.
Action: DBA should query the pending_trans$ and related tables, and attempt to repair network connection(s) to coordinator and commit point. If timely repair is not possible, DBA should contact DBA at commit point if known or end user for correct outcome, or use heuristic default if given to issue a heuristic commit or abort command to finalize the local portion of the distributed transaction.

Não diz muita coisa, já que o processo já se foi...

Para conseguir o número do processo:

SQL> Select * From sys.pending_trans$ Order by local_tran_id ;

Aqui vão aparecer todos os processos pendentes. Na coluna STATE vai aparecer o processo como pending.

SQL> rollback force '22.11.41636';

Irá encerrar com rollback e liberar a tabela. O número 22.11.41636 foi obtido da coluna LOCAL_TRAN_ID.

SQL> Select count(1), controle From tabela;
  COUNT(1) C
---------- -
      1210 1
     21615
Nenhuma dica encontrada.

Instalação e Configuração do Oracle Express Edition e SQL Developer no Ubuntu

Recuperando a senha SYS do Oracle

OraPlus - Simples gerenciador para o banco de dados Oracle

Backup Oracle Agendado por Crontab

Descobrir se uma determinada tabela, sinonimo ou usuário existe no Oracle

#1 Comentário enviado por rbrino em 28/07/2011 - 10:53h
Pessoal,
Existe um site http://www.ora-code.com.br/ muito bom para consultar os códigos de erro do Oracle 11g.
Abs

Contribuir com comentário

Entre na sua conta para comentar.