› Fóruns › Banco de dados Oracle › ORA-01591: lock held by in-doubt › ORA-01591: lock held by in-doubt
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