Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Falha de reversão de transação JDBC em conexão fechada


Não (exceto um bug grave no Oracle ou a menos que estejamos falando de uma transação distribuída).

Se uma conexão entre o cliente e o banco de dados for perdida, é possível que o banco de dados nunca tenha recebido a solicitação para confirmar a transação. Nesse caso, assim que o banco de dados descobrir que o cliente está morto (o que pode levar algum tempo), a transação será revertida. Se a conexão for perdida, é possível que o banco de dados confirme com sucesso, mas o cliente nunca receba a notificação de que a confirmação foi bem-sucedida.

Se estamos falando de uma transação distribuída, é possível que a transação permaneça em dúvida em um (ou mais) dos nós distribuídos. Se for esse o caso, a transação aparecerá em dba_2pc_pending nos nós onde a transação ainda está pendente. Mas não seria parcialmente confirmado em nenhum nó.

Se eu tivesse que adivinhar, se você está vendo algo que está "parcialmente comprometido", eu apostaria que o problema é que seus limites de transação não estão corretos e que você tem algum código em algum lugar que está cometendo (implícita ou explicitamente) onde você não espera.