sql >> Databasteknik >  >> RDS >> Oracle

JDBC-transaktionsåterställningsfel vid stängd anslutning

Nej (förutom en allvarlig bugg i Oracle eller om vi inte talar om en distribuerad transaktion).

Om en anslutning mellan klienten och databasen försvinner, är det möjligt att databasen aldrig har tagit emot begäran om att utföra transaktionen. I så fall, när databasen upptäcker att klienten är död (vilket kan ta lite tid), kommer transaktionen att rullas tillbaka. Om anslutningen bryts är det möjligt att databasen genomförs framgångsrikt men klienten får aldrig meddelandet om att överföringen lyckades.

Om vi ​​pratar om en distribuerad transaktion är det möjligt att transaktionen förblir i tvivel på en (eller flera) av de distribuerade noderna. Om så är fallet kommer transaktionen att visas i dba_2pc_pending på de noder där transaktionen fortfarande pågår. Men det skulle inte vara delvis commit på någon nod.

Om jag var tvungen att gissa, om du ser något som är "delvis committed", skulle jag satsa på att problemet är att dina transaktionsgränser inte är korrekta och att du har någon kod någonstans som begår (implicit eller explicit) där du inte förväntar dig det.



  1. Hämta data från JDBC-databasen till Jtable

  2. Lagra IPV6 och IPV4 i MySql och läs det också

  3. Utveckling av feltolerans i PostgreSQL:replikeringsfas

  4. Skapa relationer:#1452 - Kan inte lägga till eller uppdatera en underordnad rad:en främmande nyckel-begränsning misslyckas