Stai utilizzando una transazione serializzabile che attende qualche altra transazione che blocca la stessa tabella su ROLLBACK .
Se quest'altra transazione non esegue il rollback ma viene invece eseguita il commit, riceverai questo errore.
Lo scenario sembra essere il seguente:
-
Aliceapre la sua sessione del browser che chiamaDELETE FROM TABLE1 WHERE Version = 'v1'Bobapre la sua sessione che chiamaDELETE FROM TABLE1 WHERE Version = 'v1'dopoAlicel'ha fatto ma prima che si impegnasse.
BobLa transazione è in attesa daAlicebloccato le righe conVersion = 'v1'-
Alicecommette la sua transazione -
BobLa transazione di ' non riesce conCannot serialize access
Per ovviare a questo problema, imposta TRANSACTION ISOLATION LEVEL a READ COMMITTED :
transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted)
In questo caso, Bob la richiesta di ' sarà riemessa dopo Alice esegue il commit delle modifiche, come se Bob la transazione è stata avviata dopo Alice quello è stato commesso.
Aggiorna
Potresti postare una traccia della tua connessione?
Per fare ciò, emetti questo comando subito dopo la connessione:
(New OracleCommand("ALTER SESSION SET SQL_TRACE=TRUE", connection, transaction)).ExecuteNonQuery();
, quindi cerca in $ORACLE_HOME\admin\udump per un nuovo *.trc file