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:
-
Alice
apre la sua sessione del browser che chiamaDELETE FROM TABLE1 WHERE Version = 'v1'
Bob
apre la sua sessione che chiamaDELETE FROM TABLE1 WHERE Version = 'v1'
dopoAlice
l'ha fatto ma prima che si impegnasse.
Bob
La transazione è in attesa daAlice
bloccato le righe conVersion = 'v1'
-
Alice
commette la sua transazione -
Bob
La 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