Está utilizando una transacción serializable que espera a que otra transacción bloquee la misma tabla para ROLLBACK .
Si esta otra transacción no retrocede sino que se confirma, obtendrá este error.
El escenario parece ser el siguiente:
-
Aliceabre su sesión de navegador que llama aDELETE FROM TABLE1 WHERE Version = 'v1'Bobabre su sesión que llama aDELETE FROM TABLE1 WHERE Version = 'v1'después deAlicelo hizo pero antes de comprometerse.
BobLa transacción de espera desdeAlicebloqueó las filas conVersion = 'v1'-
Aliceconfirma su transacción -
BobLa transacción falla conCannot serialize access
Para evitar esto, establezca TRANSACTION ISOLATION LEVEL a READ COMMITTED :
transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted)
En este caso, Bob La consulta de se volverá a emitir después de Alice confirma sus cambios, como si Bob La transacción de se inició después de Alice el de uno fue cometido.
Actualizar
¿Podría publicar un rastro de su conexión?
Para hacer esto, emita este comando justo después de conectarse:
(New OracleCommand("ALTER SESSION SET SQL_TRACE=TRUE", connection, transaction)).ExecuteNonQuery();
, luego busque en $ORACLE_HOME\admin\udump para un nuevo *.trc archivo