sql >> Database teknologi >  >> RDS >> Oracle

ORA-08177:kan ikke serialisere adgang til denne transaktion

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:

  1. Alice åbner hendes browsersession, som kalder DELETE FROM TABLE1 WHERE Version = 'v1'

    • Bob åbner sin session, som kalder DELETE FROM TABLE1 WHERE Version = 'v1' efter Alice gjorde det, men før hun forpligtede sig.

    Bob s transaktion venter siden Alice låste rækkerne med Version = 'v1'

    • Alice begår sin transaktion

    • Bob s transaktion mislykkes med Cannot 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




  1. SQL Server 2016:Opret en tabel

  2. Sådan installeres PostgreSQL 12 på Fedora 33

  3. Sådan formateres tal som valuta i SQL Server (T-SQL)

  4. SQL Server ventehændelser -2