插入大文件时“ORA-03135:连接失去联系”

时间:2012-08-28 16:12:48

标签: c# oracle odp.net

我正在尝试使用Entity Framework(ODP.Net)将具有潜在大量二进制数据的插入到远程Oracle(11g)数据库中。它适用于非常小的文件(<5 KB),但对于较大的文件(例如44 KB),我收到错误:“ORA-03135:连接失去联系”。

我不认为它超时,因为异常发生在执行命令的一秒钟内。

我尝试在连接字符串中设置以下两项,但无济于事:

  • Validate Connection=true
  • Pooling=false

我还查看了远程计算机上的listener.log文件。它显示正在建立的连接,但没有异常或终止连接的迹象。

我想要建议的修复或故障排除方法。

修改

访问本地网络上的Oracle实例时,相同的SQL操作都有效。

3 个答案:

答案 0 :(得分:3)

这可能是一个复杂的问题,有许多不同的可能原因和解决方案。从这里开始:

http://www.dba-oracle.com/t_ora_03135_connection_lost_contact.htm

  

答案:oerr实用程序显示ORA-03135错误:

     

ORA-03135:连接失去联系

     

原因:1)服务器意外终止或被迫终止。       或2)服务器超时连接。

     

操作:1)检查服务器会话是否已终止。           2)检查是否正确设置了超时参数              SQLNET.ORA。

     

当防火墙终止连接时远程连接时,ORA-03135错误很常见。

     

ORA-03135错误的一个解决方案是增加sqlnet.ora文件中sqlnet.ora expire_time参数的值或检查SQL * Plus配置文件中的expire参数。

     

要诊断ORA-03135错误,请首先使用ps -ef | grep语法检查OS PID是否仍然存在。

     

检查客户端和服务器之间是否存在网络地址转换(NAT)

     

在Windows中,检查Windows防火墙是否正在检查您的本地连接:

     

Windows XP - &gt;控制面板 - &gt;安全 - &gt;标签“高级”

     

此外,将参数sqlnet.inbound_connect_timeout和inbound_connect_timeout_listenername设置为0可以停止ORA-03135错误。

同样如上所述,检查数据库警报日志,查看连接丢失的同时发生的错误。有时它可能是由ora-600或ora-7445引起的。它不应出现在侦听器日志中,因为只有在握手完成后才会出现此错误。

答案 1 :(得分:1)

这种情况通常由断开连接/陈旧连接引起,是从连接池中获取的。如果在Pooling = false之后出现此异常,则很可能防火墙因 tcp空闲超时而阻止连接。确保tcp空闲超时值大于预期的命令执行时间

答案 2 :(得分:0)

尽量使用 KeepAlive 设置,这样可以防止连接丢失的池错误。

https://github.com/oracle/dotnet-db-samples/issues/58(最初这是针对 .NET Core 和不低于 2.19.100 的 Oracle.ManagedDataAccess.Core 版本)

connection.KeepAlive = true; 在打开连接之前