我正在尝试使用Entity Framework(ODP.Net)将具有潜在大量二进制数据的插入到远程Oracle(11g)数据库中。它适用于非常小的文件(<5 KB),但对于较大的文件(例如44 KB),我收到错误:“ORA-03135:连接失去联系”。
我不认为它超时,因为异常发生在执行命令的一秒钟内。
我尝试在连接字符串中设置以下两项,但无济于事:
Validate Connection=true
Pooling=false
我还查看了远程计算机上的listener.log
文件。它显示正在建立的连接,但没有异常或终止连接的迹象。
我想要建议的修复或故障排除方法。
修改
访问本地网络上的Oracle实例时,相同的SQL操作都有效。
答案 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;
在打开连接之前