Oracle
 sql >> Base de données >  >> RDS >> Oracle

Échec de la restauration de la transaction JDBC sur une connexion fermée

Non (à moins d'un bogue sérieux dans Oracle ou à moins que nous parlions d'une transaction distribuée).

Si une connexion entre le client et la base de données est perdue, il est possible que la base de données n'ait jamais reçu la demande de validation de la transaction. Dans ce cas, une fois que la base de données découvre que le client est mort (ce qui peut prendre un certain temps), la transaction sera annulée. Si la connexion est perdue, il est possible que la base de données soit validée avec succès mais que le client ne reçoive jamais la notification que la validation a réussi.

S'il s'agit d'une transaction distribuée, il est possible que la transaction reste dans le doute sur un (ou plusieurs) des nœuds distribués. Si tel est le cas, la transaction apparaîtra dans dba_2pc_pending sur les nœuds où la transaction est toujours en attente. Mais il ne serait partiellement validé sur aucun nœud.

Si je devais deviner, si vous voyez quelque chose qui est "partiellement engagé", je parierais que le problème est que vos limites de transaction ne sont pas correctes et que vous avez du code quelque part qui s'engage (implicitement ou explicitement) où vous ne l'attendez pas.