8

我正在尝试使用实体框架(ODP.Net)将可能大量的二进制数据插入到远程 Oracle(11g)数据库中。它适用于非常小的文件(<5 KB),但对于较大的文件(例如 44 KB)我得到一个错误:“ORA-03135:连接丢失联系”。

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

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

  • Validate Connection=true
  • Pooling=false

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

我愿意提供建议的修复或故障排除方法。

编辑:

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

4

3 回答 3

3

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

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

回答: orr 实用程序显示 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 语法检查操作系统 PID 是否仍然存在。

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

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

Windows XP -> 控制面板 -> 安全 -> 选项卡“高级”

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

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

于 2014-02-19T13:14:19.840 回答
2

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

于 2016-05-09T14:29:12.530 回答
0

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

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

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

于 2021-03-10T11:41:22.673 回答