quinta-feira, 16 de dezembro de 2010

ORA-01591: lock held by in-doubt distributed transaction TEXTO

A resolução deste problema é simples, desde que tenham o sistema que usa as tabelas em baixo.

Este problema aconteceu-me ao tentar apagar uns registos de uma dada tabela. Para alguns registos o Oracle estava sempre a dar este erro: ORA-01591: lock held by in-doubt distributed transaction TEXTO. Sabendo que o sistema que usava as tabelas estava em baixo, era impossível no momento da remoção dos registos haver algo a efectuar uma transacção.

O TEXTO no erro ORA-01591, indica qual é a identificação do lock.

Para resolver o problema basta executar:

rollback force 'TEXTO';

Tomar em atenção que se está a forçar a terminação de uma transacção. Apenas efectuar isto se tiverem a certeza de que ocorreram problemas algures no tempo, e que a transacção ficou pendurada. No caso acima descrito era impossível haver transacção a acontecer, pois o sistema estava em baixo.

Dependendo da carga e do rollback necessário, poderá acontecer que o Oracle demore algum tempo até terminar o rollback.

Sem comentários: