sql >> Database >  >> RDS >> Oracle

ORA-08177:kan toegang voor deze transactie niet serialiseren

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:

  1. Alice opent haar browsersessie die DELETE FROM TABLE1 WHERE Version = 'v1' aanroept

    • Bob opent zijn sessie die DELETE FROM TABLE1 WHERE Version = 'v1' aanroept na Alice deed het maar voordat ze zich beging.

    Bob 's transactie wacht sinds Alice de rijen vergrendeld met Version = 'v1'

    • Alice voert haar transactie uit

    • Bob 's transactie mislukt met Cannot 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




  1. Wat is STATISTIEKENPROFIEL in SQL Server?

  2. Voorkom nummerconflicten met Microsoft SQL-reeksen

  3. Hoe de uitvoer van DBMS_OUTPUT.PUT_LINE omleiden naar een bestand?

  4. Hoe kan ik in SQL Server overal een kolom vinden waarnaar wordt verwezen?