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.427 Categoria: Banco de Dados Subcategoria: Oracle
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
Nenhuma dica encontrada.

Aumentando TABLESPACES no Oracle

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

Oracle - Criar, deletar e alterar senha de usuário de maneira simples

COMMIT e ROLLBACK x PERFORMANCE

Calcular quantidade de objetos por tipos com VIEWS

#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.