Oracle
 sql >> Database >  >> RDS >> Oracle

Errore di rollback della transazione JDBC su una connessione chiusa

No (a meno che non si tratti di un bug grave in Oracle o di una transazione distribuita).

Se una connessione tra il client e il database viene persa, è possibile che il database non abbia mai ricevuto la richiesta di confermare la transazione. In tal caso, una volta che il database rileva che il client è morto (operazione che potrebbe richiedere del tempo), verrà eseguito il rollback della transazione. Se la connessione viene persa, è possibile che il database abbia eseguito correttamente il commit ma il client non riceve mai la notifica che il commit è stato eseguito correttamente.

Se stiamo parlando di una transazione distribuita, è possibile che la transazione rimanga in dubbio su uno (o più) dei nodi distribuiti. In tal caso, la transazione apparirà in dba_2pc_pending sui nodi dove la transazione è ancora in sospeso. Ma non verrebbe eseguito parzialmente su nessun nodo.

Se dovessi indovinare, se vedi qualcosa che è "parzialmente impegnato", scommetterei che il problema è che i limiti della tua transazione non sono corretti e che hai del codice da qualche parte che sta eseguendo il commit (implicitamente o esplicitamente) dove non te lo aspetti.