【问题标题】:SQL Server: "a connection was successfully established with server....existing connection was forcibly closed by the remote host."SQL Server:“与服务器建立连接成功......现有连接被远程主机强行关闭。”
【发布时间】:2012-03-27 13:53:57
【问题描述】:

是的,伙计们,又是这个。

"与服务器成功建立连接,但随后 登录过程中发生错误(提供者:TCP Provider, 错误:0 - 远程强制关闭现有连接 主持人。)”

对不起...我在 Google 上搜索过这个,我阅读了有关此问题的其他 StackOverflow 文章,并且我 em> 尝试了各种建议,但没有任何效果。

这里有一些关于我们所看到的内容的说明。

  1. SQL Server Management Studio 本身偶尔会出现此问题(执行任何类型的数据库活动...获取数据库中的表列表,查看存储过程,等)

  2. 它也发生在 Visual Studio 2010 本身,当它试图从服务器获取数据时(例如,在创建 .dbml 文件时等)

  3. 有时也会发生在我们的 .Net(ASP、WPF、Silverlight)应用程序中。

  4. 我们的 SQL Server 2005 和 2008 服务器都基于世界各地数据中心的虚拟机,我们有时会在每个服务器上看到此错误。但大多数时候,它们都工作得很好。

  5. 当错误确实发生时,我们可以“重试”导致错误的原因,然后它就会正常工作。

  6. 我们认为.. 如果我们在特定城市的数据中心有一个 IIS Web 服务器,并且它访问同一个数据中心的 SQL Server,那么我们查看问题。

  7. 我们认为.. 如果我们连接到服务器,并指定要使用的用户 ID 和密码,与仅使用 Active Directory 身份验证相比,它会更频繁地导致此错误。

把所有这些放在一起,在我看来,这听起来像是某种网络问题。
但是谁能建议要寻找什么?

这不是我们的 .Net 应用程序中的错误,因为即使是 SQL Server Management Studio 也会因为这个错误“绊倒”。

这让我们感到困惑。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    以防万一其他人遇到这个问题,我们终于找到了解决方案。

    我们公司使用 Riverbed 软件来压缩数据,当数据在不同位置之间传递时,这会导致一些连接断开。

    我们的 IT 专家找到了最终解决此问题的配置设置。

    我相信那里有一个设置可以关闭来自 SQL Server(或类似的东西)的压缩结果。这为我们解决了问题。

    【讨论】:

    • 能否请您添加 MSSQL 配置设置来解决问题?
    【解决方案2】:

    可能是任意数量的网络问题。任何会阻止代码到达服务器的任何事情,即使是在进行一次查询所需的几毫秒内。

    这也可能是故障转移的结果。当我们从单个 SQL Server 转到集群环境时,我们会在故障转移期间看到这种情况。在这种情况下,它原来是我们的连接池。本质上,SQL 集群背后有一个控制器和两台服务器。 A 和 B。

    假设我们的网络应用程序正在使用服务器 A 就好了,连接池在双方创建一个连接。服务器知道这一点,Web 应用程序也知道这一点。一旦集群故障转移到第二台服务器,Web 应用程序知道连接,但服务器 B 不知道,因此我们收到错误。

    关键是,任何可以想象的网络问题的可能原因都可能是原因。对服务器的 DOS 攻击,中间人攻击拦截和改变流量。有人在以太网电缆上绊倒,它在插孔中松动。你说出它的名字,如果它会导致连接问题,它可能就是原因。

    您的问题听起来也像我们最近遇到的问题 - 我们还有一个虚拟环境,其中包含根据负载平衡需要将虚拟机从一台主机移动到另一台主机的软件。每隔一段时间,我们就会被同样的错误轰炸。原来是其中一台主机上的 NIC 驱动程序存在问题,因此每当 VM 移动到该特定主机时,就会发生错误。

    这真的不是编程问题。这是一个环境问题,您需要训练有素的专业人员来直接访问您的环境来研究和解决这个问题。

    【讨论】:

    • 也许您可以建议一些调试技术或软件来追踪其他环境中的问题根源?
    【解决方案3】:

    我遇到了同样的问题,我们的应用程序与多个 Azure SQL DB 交互。我相信(和你一样)我在 C# 代码中没有导致这个问题的错误。我们通过一个简单的 for 循环 解决了这个问题,其中包含一个额外的尝试,如果之前的尝试失败,则尝试再次连接到 Azure SQL,然后运行查询。

    大多数时候一切都运行良好,但有时我们可以看到循环被启动,并且在第二次或第三次它正确执行而没有下面提到的错误。之后,我们在日志文件中看到所有不成功尝试的错误如下:

        A connection was successfully established with the server,
    but then an error occurred during the login process. (provider: TCP
    Provider, error: 0 - An existing connection was forcibly closed by the
    remote host.)
    

    尽管这是一个不那么漂亮的解决方案,但它让我们能够不间断地运行我们的应用程序。我知道您已经提到尝试再次连接(以引入一些连接失败容限)解决了问题,不幸的是,这也是我迄今为止找到的唯一正确的解决方案。

    我应该提到我们已经尝试了许多调试策略来解决这个问题。 现在这一切都指向我们尝试连接的数据库的可用性,即:如果超过允许的数据库连接数,就会发生这种情况。 (或者现在看来)

    【讨论】:

    • SQL Azure 也发生了这个错误,但我真正的问题是我在调试时打开连接的时间过长 - 让应用程序自然运行正常工作。可能只需要增加连接超时 - SqlConnection.ConnectionTimeout,而不是 CommandTimeout
    • 我记得我们曾经在 Azure 数据库上用完连接,错误消息明确告诉我们是这种情况。我有同样的问题,但我有一个重试队列。我认为问题可能与网络问题或 SynAck 攻击预防有关。
    【解决方案4】:

    我的问题是我无意中使用无线网络连接到我们的网络,因为以太网电缆出现故障。这在修复 SQL Server 后,按照其他地方的建议运行 Winsock 重置...

    【讨论】:

      【解决方案5】:

      当我们打开 oracle 的 dbconnection 并将 DBtype 作为 SQL 传递到我们的数据库对象中时,它发生在我们的代码中。

      【讨论】:

        【解决方案6】:

        在我的情况下 - 错误是微软的第一个建议: 客户端正在连接不受支持的 SQL Server Native Client 版本。

        【讨论】:

          【解决方案7】:

          在我们的例子中,我们在将 sql server 更新到 sp3 时遇到了这个错误。我们无法从 SSIS 包连接到数据库。

          我们更新了本机客户端和配置。我们能够连接。

          本地客户端下载链接 - https://www.microsoft.com/en-us/download/confirmation.aspx?id=50402

          配置设置和进一步故障排除的链接 - https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms187005(v=sql.105)

          希望对你有帮助。

          干杯!

          【讨论】:

            【解决方案8】:

            遇到相同类型的问题。在我的情况下,它有点复杂......我可以通过 SSMS 从“ServerB”连接到“ServerA”,但是使用 sqlcmd 会失败。错误是一样的:

            Sqlcmd:错误:Microsoft SQL Server Native Client 11.0:TCP 提供程序:现有连接被远程主机强行关闭。

            我还可以使用 SSMS 和 sqlcmd 从“ServerC”连接。以下是虚拟机上的版本:

            ServerA: Microsoft Windows Server 2012 R2 Datacenter / Microsoft SQL Server 2012 (SP3-CU10) (KB4025925) - 11.0.6607.3 (X64) 
            ServerB: Microsoft Windows Server 2012 R2 Datacenter / Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
            ServerC: Microsoft Windows Server 2012 R2 Datacenter / Microsoft SQL Server 2012 (SP3-CU10) (KB4025925) - 11.0.6607.3 (X64)
            

            底线是“不受支持的版本”。我注意到 ServerC 和 ServerB 之间的“sqlncli11.dll”不匹配,因此我将其复制到 System32 文件夹中。在此之后, sqlcmd 就像一个魅力。以下是我的版本:

            Failed:
            FileVersion:      2011.0110.5058.00
            ProductVersion:   11.0.5058.0
            
            Worked:
            FileVersion:      2011.0110.6607.03
            ProductVersion:   11.0.6607.3
            

            【讨论】:

              【解决方案9】:

              我同时从事 2 个项目(在 2 台不同的机器上)并且都使用 SQL Server。

              当我用 1 台机器断开 SQL 时,errorMessage 消失了。可能您也可以使用 IP 地址来解决问题。

              【讨论】:

                【解决方案10】:

                在我的情况下,我从连接到位于同一服务器机房中的 SQL 服务器的 .Net 应用程序间歇性地看到此错误。事实证明,某些数据库已打开自动关闭,导致服务器关闭池中的连接。当应用程序尝试使用已关闭的池连接之一时,它会抛出此错误,并且我在 SQL 服务器上看到一条日志消息,表明它正在尝试连接的数据库正在启动。这些数据库的自动关闭功能现已关闭,此后再也没有出现该错误。

                此外,自动关闭是 SQL Express 数据库的默认行为,它们最初是在测试期间在 Express 实例上创建的,然后迁移到我们看到错误的生产服务器。

                【讨论】:

                  【解决方案11】:

                  此答案适用于那些对 Azure Sql 服务器数据库有此问题的人。

                  当你到达垫子池时会发生这种情况

                  首先从连接字符串中删除Persist Security Info=False 其次在 azure 门户中检查您的数据库计划并增加您的数据库计划的 PTU。

                  【讨论】:

                    【解决方案12】:

                    关闭您的 VPN 关闭 VPN 解决了​​我的问题

                    【讨论】:

                    【解决方案13】:

                    在 SSMS“连接到服务器”屏幕中单击选项,然后在“连接属性”选项卡上将“网络协议”更改为“命名管道”

                    【讨论】:

                      【解决方案14】:

                      试试这个 -

                      • 单击开始,指向所有程序,然后单击 SQL Server 配置管理器。
                      • 单击展开 SQL Server 网络配置,然后单击客户端协议。
                      • 右键单击 TCP/IP 协议,然后单击启用。
                      • 右键单击命名管道协议,然后单击启用。
                      • 如果出现提示,请重新启动 SQL Server 服务。

                      【讨论】:

                        【解决方案15】:

                        请查看MShttps://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/apps-forcibly-closed-tls-connection-errors的这篇文章

                        我们禁用了 PCT 1.0、SSL2.0、SSL 3.0 和 TLS 1.1 等旧协议,应用开始运行。

                        【讨论】:

                          猜你喜欢
                          • 2012-01-18
                          • 2021-05-12
                          相关资源
                          最近更新 更多