【问题标题】:SQLServer AlwaysOn and .net SqlConnection resetSQLServer AlwaysOn 和 .net SqlConnection 重置
【发布时间】:2018-02-02 07:23:23
【问题描述】:

在我们的环境中,我们使用带有两台服务器的 SQLServer Always on 集群。

其中一个用于写入,第二个用于读取。在应用程序服务中,SqlConnection 每秒打开和关闭一次以执行短查询。但是在切换或关闭 Always On 集群中的一台服务器后,我的应用程序服务开始出现异常。

这表明它不能在只读数据库中插入任何数据。我想主要原因是 SqlConnection 实现中的连接池。

所以问题是如何手动重置该连接池。或者,如果还有其他问题 - 请告诉我您对此行为的看法。

【问题讨论】:

    标签: c# .net sql-server sql-server-2012 sql-server-2016


    【解决方案1】:

    需要在连接字符串中设置MultiSubnetFailover = True并实现重试逻辑:

    如果 SqlClient 应用程序连接到 AlwaysOn 数据库, 故障转移,原始连接断开,应用程序必须 在故障转移后打开一个新连接以继续工作。

    SqlClient Support for High Availability, Disaster Recovery

    还有:

    .NET Framework 不需要将 MultiSubnetFailover 设置为 true 4.6.1 或更高版本。

    【讨论】:

    • “MultiSubnetFailover”设置仅确保 .net 将同时连接到由 dns 解析的两个(或多个)端点,并使用首先回复的连接。最初的问题是,连接成功,但连接到的服务器不是作为当前 ag 和数据库的主服务器运行的服务器。
    • @Stephen Ryer:使用 AG 的设置 MultiSubnetFailover = True 连接到当前活动的服务器。我没有看到您的陈述:“最初的问题是,连接成功,但连接到的服务器不是作为当前 ag 和数据库的主服务器运行的服务器”是正确的。
    • 我刚刚在 alwayson 设置中的可用性组上运行了一些测试。我连接,选择服务器名称并对数据库进行查询。在进行故障转移时,会发生不同的情况,但其中一种情况是,选择服务器名成功(但显示旧的主服务器仍然连接到,因此在尝试访问实际数据库时 qeury 将失败)。因此,使用 MultiSubnetFailover 不会涵盖这种情况 - 这只是我的观点。
    • “但显示旧的主节点仍处于连接状态”——这似乎很不寻常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多