ORA-08177: no se puede serializar el acceso para esta transacción
Tengo un código muy simple usando ADO.NET que arroja la excepción ORA-08177. No estoy seguro de qué hay de malo en esto. Estoy intentando esto en una máquina con Windows Vista que tiene instalado el cliente Oracle 32 bit. Mi opción de compilación para Visual Studio está configurada en la plataforma x86.
Dim connection As OracleConnection = Nothing
Dim transaction As OracleTransaction = Nothing
Try
connection = New OracleConnection("Data Source=ora10;User Id=userid;Password=passwd;")
connection.Open()
transaction = connection.BeginTransaction(IsolationLevel.Serializable)
Dim inputStream As New System.IO.FileStream("Dummy.xls", IO.FileMode.Open)
Dim fileLength As Integer = CType(inputStream.Length, Integer)
Dim input(fileLength) As Byte
Try
inputStream.Read(input, 0, fileLength)
Finally
If inputStream IsNot Nothing Then inputStream.Close()
End Try
Dim deleteSql As String = "DELETE FROM TABLE1 WHERE Version = 'v1' "
Dim cmd As New OracleCommand(deleteSql, connection, transaction)
cmd.ExecuteNonQuery()
Dim insertQuery As String = "INSERT INTO TABLE1 (VERSION, DATA) VALUES (:VERSION, :DATA) "
Dim insertCmd As OracleCommand = New OracleCommand(insertQuery, connection, transaction)
insertCmd.Parameters.Clear()
insertCmd.CommandType = Data.CommandType.Text
insertCmd.Parameters.AddWithValue(":VERSION", "v1")
insertCmd.Parameters.AddWithValue(":DATA", input)
insertCmd.ExecuteNonQuery()
transaction.Commit()
Catch
If transaction IsNot Nothing Then transaction.Rollback()
Throw
Finally
If transaction IsNot Nothing Then transaction.Dispose()
If connection IsNot Nothing AndAlso connection.State <> ConnectionState.Closed Then connection.Close()
End Try
Algo importante a tener en cuenta: (no estoy seguro de si están conectados) pero no enfrento este problema si desinstalo las últimas actualizaciones de Windows de mi máquina.
¿Alguien se ha enfrentado a esto o tiene alguna idea de lo que está pasando aquí?
Editar:
Tengo algún progreso donde descubrí que este problema ocurre solo cuando tenemos el tipo de columna de blob en cuestión. para columnas simples funciona bien.
Otros detalles (no estoy seguro si eso hace la diferencia)
Estoy trabajando en una máquina de negocios Windows Vista de 64 bits. He instalado el cliente Oracle de 32 bits para Windows Vista (ya que el cliente Oracle de 64 bits no funciona en Vista). Estoy compilando mi proyecto para un x86 (entorno de 32 bits) en Visual Studio. Y esta es una aplicación de consola y sé que nadie más está golpeando la base de datos en este momento. entonces no puede haber transacciones múltiples.
Y no veo este problema si desinstalo la última actualización de Windows. (KB963027, KB967190, KB959426, KB960225, KB960803, KB952004, KB956572, KB958687, KB958690, KB958481, KB958483, KB943729)