Pular para o conteúdo

Fóruns Banco de dados Oracle ORA-01591: lock held by in-doubt ORA-01591: lock held by in-doubt

#86556
Rodrigo Almeida
Participante

    Bom,

    Faz algum tempo que escrevi algo sobre o Commit Two-Phase no me blog (https://profissionaloracle.com.br/blogs/rodrigoalmeida/2008/08/11/transacoes-pendentes-em-ambiente-distribuido/), mas sobre os Lock held in-doubt é realmente quando ele está duvidoso sobre sua transação e o processo RECO não consegue realizar o seu COMMIT ou ROLLBACK.

    Eu diria que isso não é totalmente culpa do RECO, pois esse processo tem apenas a finalidade de terminar a sessão, que quem deveria realizar isso melhor seria o PMON, que deveria apontar o problema e o RECO acabar com a transação LOCAL.

    Mas, isso era muito comum em bases 8i e até mesmo 9i, onde se deveria realizar o ALTER SYSTEM ENABLE DISTRIBUTED RECOVERY para conseguir eliminar a transação por completa.

    No 10g já fica mais complicado isso acontecer, até mesmo porque se usa UNDO, desde os próprios segmentos de ROLLBACK (são a mesma coisa, mas quem controla isso no 10g é o oracle, se tiver com a opção UNDO_MANAGEMENT = AUTO), por isso a facilidade.

    Sobre os parâmetros da instância, geralmente utilizo o commit_point_strength e distributed_transactions para “TENTAR” realizar esse controle das transações que estão sobre o Commit Two_Phase, para as versões 8i e 9i.

    Mas mesmo assim, aqui no ambiente também acontece muito Lock held principalmente quando algum link da unidade está fora, por ocorrer a perda de dados, a transação vai ficar duvidosa e ter esses problemas. No nosso caso, temos 17 unidades, os problemas de lock são diretamente aplicadas a infra-estrutura dos links, já que os processos de replicação possuem COMMIT e ROLLBACK em toda fase da transação.

    Abraços,
    Rodrigo Almeida