U gebruikt een serialiseerbare transactie die wacht op een andere transactie die dezelfde tabel vergrendelt op ROLLBACK .
Als deze andere transactie niet wordt teruggedraaid maar in plaats daarvan wordt vastgelegd, krijgt u deze foutmelding.
Het scenario lijkt als volgt te zijn:
-
Aliceopent haar browsersessie dieDELETE FROM TABLE1 WHERE Version = 'v1'aanroeptBobopent zijn sessie dieDELETE FROM TABLE1 WHERE Version = 'v1'aanroept naAlicedeed het maar voordat ze zich beging.
Bob's transactie wacht sindsAlicede rijen vergrendeld metVersion = 'v1'-
Alicevoert haar transactie uit -
Bob's transactie mislukt metCannot serialize access
Om dit te omzeilen, stelt u TRANSACTION ISOLATION LEVEL . in om READ COMMITTED :
transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted)
In dit geval Bob 's query wordt opnieuw uitgegeven na Alice begaat haar wijzigingen, alsof Bob 's transactie zijn gestart na Alice die van haar is gepleegd.
Bijwerken
Kun je een spoor van je verbinding posten?
Om dit te doen, geeft u deze opdracht direct na het verbinden:
(New OracleCommand("ALTER SESSION SET SQL_TRACE=TRUE", connection, transaction)).ExecuteNonQuery();
, kijk dan in $ORACLE_HOME\admin\udump voor een nieuwe *.trc bestand