Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle.DataAccess.Client.OracleException ORA-03135:conexão perdida contato


Isso acontece porque seu código solicita uma conexão do Oracle Connection Pool e o pool de conexões retorna uma conexão desconectada/obstante ao banco de dados Oracle. O ODP.NET não testa o status da conexão enviada ao cliente.

Portanto, para estar seguro, verifique o connection status == Open para a conexão recebida do pool quando você faz um Connection.Open()

OU

deixe o ODP.NET fazer a verificação para você definindo Validate Connection = true em sua string de conexão em web.config.

Ambos os métodos têm impacto no desempenho, pois testam o status da conexão sempre que você precisa se conectar ao banco de dados.

Uma terceira opção que eu uso é o uso de exceções. Primeiro, seja otimista e use qualquer conexão que seja retornada do pool de conexões. Se você obtiver um ORA - 3135, solicite uma nova conexão e execute sua consulta novamente como um loop while. Na melhor das hipóteses, você pode obter sua primeira conexão como válida e sua consulta será executada. Na pior das hipóteses, todas as conexões em seu pool estão obsoletas, caso em que o código será executado N vezes (onde N é o tamanho do pool de conexões).