无法摆脱“物理连接不可用”异常
Posted
技术标签:
【中文标题】无法摆脱“物理连接不可用”异常【英文标题】:Cannot get rid of "physical connection is not usable" exception 【发布时间】:2014-05-08 00:25:10 【问题描述】:我要开枪了。现在花了几个星期试图解决这个问题。我们有一个 ASP.NET MVC 4 Web 应用程序,它使用 SQL Server 2012 和实体框架作为 IoC 的 ORM 和 Unity。 Web 应用程序托管在 Amazon EC2 上。我开始收到“物理连接不可用”异常。它每天发生几次。我搜索了许多文章和论坛并尝试了所有可能的建议:
尝试从连接字符串“Polling=False”中删除池 尝试限制池大小和连接寿命 尝试将 Unity 的 LifetimeManager 更改为 HierarchicalLifetimeManager、PerRequestLifetimeManager。还确保在请求结束后处理实体上下文 删除了所有 TransactionScope 引用当异常发生时,恢复应用的唯一方法就是重启服务器,这很糟糕!!!
这是完全例外:
向服务器发送请求时发生传输级错误。 (提供者:Session Provider,错误:19 - 物理连接不可用)
【问题讨论】:
这篇文章似乎提供了一个线索...social.msdn.microsoft.com/Forums/en-US/…。在我的连接字符串中,我使用服务器的 DNS 名称,ASP.NET MVC 应用程序托管在与 DB 相同的服务器上,因此我将连接字符串中的服务器名称更改为“。” (当地的)。我会监控并回信 您是否遇到过(本地)问题或您的问题再次出现? 【参考方案1】:我现在确认,通过将服务器上的连接字符串更改为使用“。”对于数据源而不是域名,异常似乎已经消失。作为以前使用的域名非常奇怪。必须是 SQL Server 上的某种更新
【讨论】:
【参考方案2】:我知道这是一篇旧帖子,但我最近遇到了这个错误的可怕时刻,并且在任何博客上都没有解决方案。
关于我的问题的具体细节: 带有目标 .NET 框架 4.5、MVC 版本的 ASP.NET Web 应用程序。 5.2.3,实体版。 6.0.0.0,MS SQLServer Express 2014。我的开发系统运行的是 Windows 7 Pro SP1。
症状:错误突然出现(我已经将近三周没有从事该项目,当时它运行良好)。当我启动应用程序时,在登录用户后,实体框架向数据库发送的第二个查询总是生成错误“从服务器接收结果时发生传输级错误。(提供者:会话提供者) ,错误:19 - 物理连接不可用)”。查询哪个表并不重要。该错误不是间歇性的,重新启动服务器没有帮助。使用 IIS 和 IIS express 时发生错误。
SqlConnection.ClearAllPools() 仅阻止 ONE 查询的错误,我不想在程序中的每个 Entity 调用之前添加它。我尝试了所有博客上的每一个解决方案都无济于事,甚至解决了其他传输级错误。我为我的参考回滚了包更新,试图恢复到工作状态。没有!
解决方案:罪魁祸首是 Microsoft SQL Server 2014 SP1 安全更新 (KB3070446)!我回滚了这个更新,一切都像一个魅力!
我失去了两天的开发工作来处理这个问题,希望这篇文章可以帮助其他人避免这种痛苦!
【讨论】:
我也有类似的经历。花了几天时间。将服务器上的连接字符串更改为使用“。”为我修好了。也可能与 SQL Server 升级有关。非常讨厌的问题。【参考方案3】:我有 2 天同样的错误!甚至不知道为什么会突然发生?!
结果是:我遇到了网络身份验证访问问题(由于我的 WiFi 连接).. 一旦我断开/禁用我的 WiFi 并仅通过电缆(安全且稳定)连接进行连接。 . 错误消失了..
我还做了以下,比如:
重新启动所有 SQL Server 服务。重新启动了我的 SQLServer 实例。 将这些道具添加到我的 DEF 连接字符串中..
Connection Lifetime=30; Max Pool Size=350;Connection Timeout=30;Connection Lifetime=0;ConnectRetryCount=3;ConnectRetryInterval=10;
【讨论】:
为什么连接生命周期被指定了两次? 0 是默认值,所以我猜应该只指定 30。但剩下的问题是为什么是 30 而不是其他任意值?【参考方案4】:在我们的例子中,“物理连接不可用”的问题仅在 MultipleActiveResultSets=true 时出现。 我们的客户通过删除“网络数据包分析器”(法语:analyzer de trames réseau)解决了这个问题
【讨论】:
【参考方案5】:在设置 db.Database.CommandTimeout = 0 时删除默认设置为 -1 或无限制的 MaxDegreeOfParallelism 后出现此错误。
建议将 MaxDegreeOfParallelism 显式设置为安全值。
另一种情况: 在应用程序与服务器数据库通信时,网络连接甚至会中断几秒钟。
【讨论】:
【参考方案6】:我也遇到了这个错误。就我而言,问题是连接已被数据库服务器关闭,但连接在我的应用程序的连接池中仍然有效。
重置应用程序池使我的应用程序恢复运行。
【讨论】:
当我遇到这个问题时没有帮助我。我尝试重新启动服务器,回收应用程序池等。更改连接字符串有帮助 同样的事情可能发生在我身上,我杀死了托管我的网络应用程序的 w3wp.exe 进程并修复了它,所以我猜在我的情况下,问题也与 iis 相关,而不是 sql服务器。【参考方案7】:这对我来说是一个 DNS 错误,诊断是因为在连接字符串中使用服务器 name 会产生错误,但使用 IP 工作正常。打开 cmd 提示符,快速运行 ipconfig /flushdns
看看是否有帮助。
【讨论】:
我在单个服务器中有 db 和 iis,并使用了 ip(而不是域名),但这个错误发生在我身上。还没修好。【参考方案8】:数据库连接被数据库服务器关闭。该连接在您应用的连接池中仍然有效;结果,当您获取共享连接字符串并尝试执行时,它无法访问数据库。如果您正在开发 Visual Studio,只需关闭任务栏上的临时 Web 服务器即可。
如果它发生在生产中,为您的网站重置应用程序池应该会回收连接池。
可能是由于入侵防御系统的更新。
请尝试参考以下线程: http://forums.asp.net/t/1908976.aspx
希望对你有帮助。
【讨论】:
【参考方案9】:当我将 nolock 放入 select Query 时,我也遇到了这个问题。
选择 coid 作为 Facility,tnum 作为 [ACCTNO],Convert(varchar(200),tname) 作为 [ACCTName],Convert(varchar(200),errmsg) 作为来自 ccerror (nolock) 的 msg
当我删除 nolock 然后它解决了。
【讨论】:
查询如何影响物理连接?你确定这是同一个例外吗?似乎不太可能。 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于无法摆脱“物理连接不可用”异常的主要内容,如果未能解决你的问题,请参考以下文章
当我在 Windows Azure 上交换暂存和生产部署时出现“错误:19 - 物理连接不可用”
无法摆脱 graphql-spqr-spring-boot-starter 中的“获取数据时异常(/apiName)”
错误记录手机应用无法联网 ( 添加 READ_PRIVILEGED_PHONE_STATE 权限导致手机应用网络不可用 )
错误记录手机应用无法联网 ( 添加 READ_PRIVILEGED_PHONE_STATE 权限导致手机应用网络不可用 )