ORA-08177: não é possível serializar o acesso a esta transação
Eu tenho um código muito simples usando o ADO.NET que gera a exceção ORA-08177. Não tenho certeza do que há de errado nisso. Estou tentando isso em uma máquina Windows Vista que tem o cliente Oracle 32 bits instalado. Minha opção de compilação para o visual studio está definida para a plataforma x8
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
Importante notar: (não tenho certeza se eles estão conectados), mas não enfrentarei esse problema se desinstalar as atualizações mais recentes do Windows da minha máquin
Alguém já enfrentou isso ou tem alguma pista sobre o que está acontecendo aqui?
Editar:
Tenho algum progresso em que descobri que esse problema ocorre apenas quando temos o tipo de coluna de blob em questão. para colunas simples, funciona be
Outros detalhes (não tenho certeza se isso faz diferença)
Estou trabalhando na máquina comercial de 64 bits do Windows Vista. Eu instalei o cliente oracle de 32 bits para o Windows Vista (já que o cliente oracle de 64 bits não funciona no Vista). Estou compilando meu projeto para um x86 (ambiente de 32 bits) no visual studio. E esse é um aplicativo de console e eu sei que ninguém mais está acessando o banco de dados no momento. portanto, não pode haver várias transações.
Eu não vejo esse problema se eu desinstalar a atualização mais recente do Windows. (KB963027, KB967190, KB959426, KB960225, KB960803, KB952004, KB956572, KB958687, KB958690, KB958481, KB958483, KB943729)