错误19 - 物理连接错误

时间:2017-11-29 17:05:34

标签: azure azure-sql-database hybrid

从服务器接收结果时发生传输级错误。 (提供程序:会话提供程序,错误:19 - 物理连接不可用) - 间歇性地发生,使用混合连接器从Azure API连接到本地数据库

我尝试从应用服务资源(Web API)连接到本地服务器上的SQL数据库。配置经典混合连接端点到内部部署数据库。

2 个答案:

答案 0 :(得分:7)

根本原因:

在SQL数据库中,有一个属性“自动关闭”'在“选项”选项卡中,默认情况下设置为TRUE。

Azure Service(API)建立与SQL Server的连接时。 Azure尝试维护相同的连接池并尝试重用并重新连接到它。

由于我们已将“自动关闭”设置为“TRUE”,因此SQL数据库会在某段时间后清除现有连接。 Azure尝试重新连接已由SQL数据库清除的早期连接。这导致物理连接不可用 - 错误19'。

解决方案:

在SQL db中,转到数据库属性。导航到' OPTIONS'页面并展开自动选项卡并设置'自动关闭'财产为' FALSE'

确保重新启动Azure应用程序和数据库服务器,以确保不使用旧连接。

问题已解决。

注意:这是其中一个原因(发生在我身上)。

摆脱此错误的另一个有用方法是使用Entity Framework 1.1.0的RETRY LOGIC

services.AddDbContext<DbContext>(options => options.UseSqlServer('yourconnectionstring',
                 sqlServerOptionsAction: sqlOptions =>
                 {
                     sqlOptions.EnableRetryOnFailure(
                         maxRetryCount: 5,
                         maxRetryDelay: TimeSpan.FromSeconds(30),
                         errorNumbersToAdd: new List<int>() { 19 });
                 }));

在重试逻辑中,不包括错误19。因此,您必须传递错误代码19以设置错误代码19的重试逻辑。

答案 1 :(得分:0)

似乎您需要按照here所述向Web API添加重试逻辑。 &#34;物理连接不可用&#34;错误可能由瞬态错误引起,如this Microsoft文档中所述。

&#34;瞬态故障错误通常表现为来自客户端程序的以下错误消息之一:+
•服务器上的数据库当前不可用。请稍后重试连接。如果问题仍然存在,请联系客户支持,并为其提供会话跟踪ID •服务器上的数据库当前不可用。请稍后重试连接。如果问题仍然存在,请联系客户支持,并为其提供会话跟踪ID。 (Microsoft SQL Server,错误:40613) •远程主机强制关闭现有连接。 •System.Data.Entity.Core.EntityCommandExecutionException:执行命令定义时发生错误。有关详细信息,请参阅内部异常---&GT; System.Data.SqlClient.SqlException:从服务器接收结果时发生传输级错误。 (提供者:会话提供者,错误:19 - 物理连接不可用) •对辅助数据库的连接尝试失败,因为数据库正在进行重新配置,并且在主数据库上处于活动转换过程中时正忙于应用新页面。&#34;