TCP 提供程序:远程主机强制关闭了现有连接



我遇到SQL客户端随机断开与服务器的连接并显示TCP连接强制关闭错误消息的问题。

设置如下:

  • SQL 2014 Express 在 Windows Server 2008 上运行。
  • 客户端Microsoft Surface 3-Standard 或 4-PRO 的 Wi-Fi 连接, 运行 Windows 10 版本 1703。
  • 在大多数情况下,Wi-Fi基础设施是Aruba AP-105,少数思科 美联社在某些地方。
  • 客户端应用程序(用 VB6 编写,使用 SQLNCLI 11 数据库 驱动程序)定期连接到 SQL 服务器(每 15 个 秒左右)。

随机 SQL 连接将断开,报告

  • "TCP 提供程序:现有连接被 远程主机。

这可能在任何时间(包括使用应用程序的过程中)发生,不一定在PC休眠一段时间后发生。

我们有一些客户端使用硬连线 LAN 连接,这些客户端永远不会断开连接,导致我们认为问题与短暂的 Wi-Fi 丢失有关。

在测试中,我们无法重现错误,即使关闭Wi-Fi(以及我们能想到的任何其他LAN干扰)并重新打开,软件也会恢复,没有故障指示。

谷歌一直非常"乐于助人",并且有很多关于这个问题的引用,通常指的是服务器上的TCP烟囱卸载设置。一旦我们了解了这些是关于什么的,他们就被尝试过,但没有产生任何区别。

那么,谁能建议可能发生的事情?

我们历来使用SQLOLEDB驱动程序,并遇到"一般网络故障"错误(不是特别有用!),切换到SQLNCLI以查看它是否改善了情况,它没有,但确实暴露了真正的错误消息。

连接字符串如下所示:

sqlConnectionString = "Provider=SQLNCLI11;" & _
"Server=" & gblSQLDataSource & ";" & _
"Database=" & strDB & ";" & _
"Uid=" & oUser.DecryptSQLUser & ";" & _
"Pwd=" & oUser.DecryptSQLPass & ";" & _
"MARS Connection=True;" & _
"DataTypeCompatibility=80;"

吉姆

我遇到了同样的问题并找到了解决方法。 检查您的 sql 命令中是否有"with (nolock)"子句,这意味着您从表中读取未提交的数据,如果此表具有像 big varchar(max) 这样的大型对象,则 sql 主机有时会断开连接。 在我的情况下,大约每 10 - 15 分钟一次,所以当我删除"with(nolock)"时,问题已解决

相关内容

  • 没有找到相关文章