sql >> Database >  >> RDS >> Oracle

JDBC-transactie terugdraaien mislukt bij gesloten verbinding

Nee (behalve een ernstige bug in Oracle of tenzij we het hebben over een gedistribueerde transactie).

Als een verbinding tussen de client en de database wordt verbroken, is het mogelijk dat de database nooit het verzoek heeft ontvangen om de transactie vast te leggen. In dat geval, zodra de database ontdekt dat de client dood is (wat enige tijd kan duren), wordt de transactie teruggedraaid. Als de verbinding wordt verbroken, is het mogelijk dat de database succesvol is gecommit, maar dat de client nooit de melding krijgt dat de commit succesvol was.

Als we het hebben over een gedistribueerde transactie, is het mogelijk dat de transactie twijfelachtig blijft op een (of meer) van de gedistribueerde nodes. Als dat het geval is, wordt de transactie weergegeven in dba_2pc_pending op de nodes waar de transactie nog in behandeling is. Maar het zou op geen enkele node gedeeltelijk worden vastgelegd.

Als ik moest raden, als je iets ziet dat "gedeeltelijk is vastgelegd", wed ik dat het probleem is dat je transactiegrenzen niet correct zijn en dat je ergens een code hebt die (impliciet of expliciet) commit waar je het niet verwacht.



  1. Een tabel draaien samen met de som van de kolomwaarde wanneer het kolomtype nvarchar . is

  2. Krijg het aantal dubbele waarden in een kolom met het resultaat van een zoekopdracht

  3. IS NULL of IS NOT NULL gebruiken op join-voorwaarden - Theorievraag

  4. Hoe de rijafstand tussen twee breedte- en lengtegraden te berekenen in PHP