Oracle
 sql >> Datenbank >  >> RDS >> Oracle

JDBC-Transaktions-Rollback-Fehler bei geschlossener Verbindung

Nein (außer bei einem schwerwiegenden Fehler in Oracle oder wenn wir nicht über eine verteilte Transaktion sprechen).

Wenn eine Verbindung zwischen dem Client und der Datenbank unterbrochen wird, ist es möglich, dass die Datenbank nie die Anforderung zum Festschreiben der Transaktion erhalten hat. In diesem Fall wird die Transaktion zurückgesetzt, sobald die Datenbank feststellt, dass der Client tot ist (was einige Zeit dauern kann). Wenn die Verbindung unterbrochen wird, ist es möglich, dass die Datenbank erfolgreich ein Commit durchführt, aber der Client erhält nie die Benachrichtigung, dass das Commit erfolgreich war.

Wenn wir über eine verteilte Transaktion sprechen, ist es möglich, dass die Transaktion auf einem (oder mehreren) der verteilten Knoten zweifelhaft bleibt. In diesem Fall würde die Transaktion in dba_2pc_pending auf den Knoten, wo die Transaktion noch aussteht. Aber es würde auf keinem Knoten teilweise festgeschrieben werden.

Wenn ich raten müsste, wenn Sie etwas sehen, das "teilweise festgeschrieben" ist, würde ich wetten, dass das Problem darin besteht, dass Ihre Transaktionsgrenzen nicht korrekt sind und dass Sie irgendwo Code haben, der festgeschrieben wird (implizit oder explizit). wo Sie es nicht erwarten.