【问题标题】:A transport-level error has occurred... (Existing connection closed by the server) Sql Server 2008发生传输级错误...(现有连接被服务器关闭)Sql Server 2008
【发布时间】:2020-04-15 16:01:55
【问题描述】:

我有一个 Web 应用程序,它目前在 Windows XP 操作系统上运行,带有 SQL Server 2005 数据库和 IIS 6.0。

现在,我们正在尝试将它升级到 Windows Server 2008 和 SQL Server 2008 数据库上的 IIS 7.0。

当我运行应用程序时,它会随机抛出“向服务器发送请求时发生传输级错误。(提供者:TCP 提供者,错误:0 - 现有连接被远程主机强行关闭。)”不同的数据库调用。

我已经使用 "sp_who" 验证了仅打开了我正在使用的一个连接。

谁能告诉我,这个问题的原因可能是什么?

【问题讨论】:

  • 任何解决方案?

标签: sql-server-2008


【解决方案1】:

Michael Aspengrenblog post 解释了错误消息“向服务器发送请求时发生传输级错误。”

【讨论】:

    【解决方案2】:

    也许数据库设置为自动关闭?这曾经是在旧 MSDE/Express 版本上创建的数据库的默认设置。

    ALTER DATABASE YourDatabaseName SET AUTO_CLOSE OFF;
    

    更多:

    SQL Server 2005 Express Edition Overview 声明:

    在 SQL Server Express 中默认启用自动关闭和将数据库复制为文件的功能...

    我不记得是哪个服务包更改了默认值,但 Management Studio Express SP3 版本中的新数据库 UI 将 Auto Close 设置默认为 false

    【讨论】:

    • MSDE,是的。这是哪个 Express 版本的默认设置?
    • @devstuff - 有效,但每次重新启动 SQL Server 时都需要执行。有什么办法让它永久化?
    【解决方案3】:

    这是连接到数据库时由于无法从 Sql Server 处理的与较低层网络相关的错误而发生的错误。

    如果用于连接的 API 能够处理此错误,那就太好了,但 AFAIK 并没有。解决此问题的唯一方法是在发生此错误时重试连接到数据库。

    您应该尝试重新连接至少几次,以确保错误不会持续存在,如果是这种情况,则抛出异常。我的经验告诉我,尝试重新连接,99.9% 的时间都会成功。

    【讨论】:

      【解决方案4】:

      通常是数据库脱机/关闭或 SQL 实例重新启动/脱机

      【讨论】:

        【解决方案5】:

        就我而言。我们有 DELL R720、板载 NIC 和 PCI Broadcom NetXtreme 千兆以太网卡。我们遇到了两个问题。

        1. HyperV VM 的网络速度非常慢。解决办法是禁用HyperV主机Broadcom网卡属性窗口的“虚拟机队列”。它位于“高级”选项卡中。

        2. SQL 客户端存在此传输级别问题。它每10-15分钟只发生一次。同时RDP服务也会不时踢出客户端。解决办法是禁用HyperV主机Broadcom网卡属性窗口的“Large Send Offload V2”。它位于“高级”选项卡中。

        【讨论】:

          【解决方案6】:

          检查您的连接字符串中是否设置了MultipleActiveResultSets=true;

          【讨论】:

            【解决方案7】:

            传输级别错误通常与连接到 sql server 的连接被破坏...通常是网络。

            当 sql 查询运行时间过长时,通常会抛出 Timeout Expired。这是你的情况吗?像存储过程需要太多时间来执行或者是否有批处理作业被执行?

            【讨论】:

              【解决方案8】:

              与 dispose 一起使用 clearpool(urSQLconnection)。这将清除脏连接。你可以打开新的连接。

              【讨论】:

                【解决方案9】:

                试图在 .net 中的一个连接对象上执行来自多个线程的命令,这是一个愚蠢的错误。锁定它或为每个线程使用单独的连接可以解决此问题。

                【讨论】:

                  【解决方案10】:

                  就我而言,它是预安装的 McAffee。可以判断它是否与其他解决方案冲突。连接在 VPN 上,在 WiFi 上。也许这将对将来的某人有所帮助。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-08-12
                    • 1970-01-01
                    • 2015-05-28
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多