Du bruger en serialiserbar transaktion, som venter på, at en anden transaktion låser den samme tabel for at ROLLBACK .
Hvis denne anden transaktion ikke rulles tilbage, men i stedet forpligtes, får du denne fejl.
Scenariet ser ud til at være følgende:
-
Aliceåbner hendes browsersession, som kalderDELETE FROM TABLE1 WHERE Version = 'v1'Bobåbner sin session, som kalderDELETE FROM TABLE1 WHERE Version = 'v1'efterAlicegjorde det, men før hun forpligtede sig.
Bobs transaktion venter sidenAlicelåste rækkerne medVersion = 'v1'-
Alicebegår sin transaktion -
Bobs transaktion mislykkes medCannot serialize access
For at omgå dette skal du indstille TRANSACTION ISOLATION LEVEL til READ COMMITTED :
transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted)
I dette tilfælde Bob 's forespørgsel vil blive genudstedt efter Alice begår sine ændringer, som om Bob s transaktion blev startet efter Alice sin ene var begået.
Opdater
Kan du sende et spor af din forbindelse?
For at gøre dette skal du afgive denne kommando lige efter tilslutning:
(New OracleCommand("ALTER SESSION SET SQL_TRACE=TRUE", connection, transaction)).ExecuteNonQuery();
, se derefter i $ORACLE_HOME\admin\udump for en ny *.trc fil