千家信息网

C#程序错连SQL Server镜像库问题

发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,运维中遇到的一个问题,SQL Server配置了镜像,C#程序在连接SQL Servr数据库时出现登录失败,应用程序日志如下:SQL Server主库无异常日志,镜像库日志记录如下:Login fai
千家信息网最后更新 2024年09月21日C#程序错连SQL Server镜像库问题

运维中遇到的一个问题,SQL Server配置了镜像,C#程序在连接SQL Servr数据库时出现登录失败,应用程序日志如下:

SQL Server主库无异常日志,镜像库日志记录如下:

Login failed for user 'XXX'. Reason: Could not find a login matching the name provided.[CLIENT:XXX.XXX.XXX.XXX]
Error:18456, Serverity:14, State:5.

Login failed for user 'XXX'. Reason: Failed to open the explicitly specified database.[CLIENT:XXX.XXX.XXX.XXX]
Error:18456, Serverity:14, State:38.

以下是出现该问题的web程序配置,
配置1:
web服务器:.net framework4.5
web.config:timeout=300s,Min Pool Size=10,无";Failover Partner=PartnerServerName".
配置2:
web服务器:.net framework4.7
web.config:timeout=20s,Min Pool Size=10,无";Failover Partner=PartnerServerName".

微软的解释如下:

This issue occurs because of an error in the connection-retry algorithm for mirrored databases.
When the retry-algorithm is used, the data provider waits for the first read (SniReadSync) call to finish. The call is sent to the back-end computer that is running SQL Server, and the waiting time is calculated by multiplying the connection time-out value by 0.08. However, the data provider incorrectly sets a connection to a doomed state if a response is slow and if the first SniReadSync call is not completed before the waiting time expires.
Note The slow response in this case may be triggered either by the server or by network latency.
链接:https://support.microsoft.com/en-us/help/2605597/fix-time-out-error-when-a-mirrored-database-connection-is-created-by-t

出现此问题的原因是镜像数据库的连接重试算法中存在错误,程序第一次连接的等待时间为timeout*0.08,如果响应慢并且在等待时间内未完成,则进行重连,如下:

链接:https://docs.microsoft.com/zh-cn/sql/database-engine/database-mirroring/connect-clients-to-a-database-mirroring-session-sql-server

解决方案:
1) .NET Framework升级到4.5.2及以上
2)Timeout增大(预期值除以0.08),设置Min Pool Size

已确认通过该方法可以解决这个问题(已应用到生产环境)

如果耐心看完所有资料的,可能会发现微软的资料上说明配置了镜像的sqlserver需要在应用程序连接串中显式指定Failover Partner,即";Failover Partner=PartnerServerName". 为什么应用程序会在没有显式指定镜像库也会出现重连?
请看《Clarification on the Failover Partner in the connectionstring in Database Mirror setup》这篇文章。

程序 镜像 配置 问题 应用 应用程序 日志 数据 数据库 时间 服务器 资料 链接 微软 服务 C# 耐心 原因 方案 方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库还原备份文件 vpn免流服务器成本 汽车之家软件开发多少年了 网络技术安全方面存在的问题 化妆品安全评估数据库搭建 数据库有条件的插入数据 橡胶树育种数据库 如何使用网络文件服务器 ecs服务器图片上传 和龙软件开发哪家不错 汽车车载网络技术教学大纲 宽城区有名的网络技术有哪些 网络安全服务游戏 行政许可 前端数据库操作 联想3650服务器进入raid 我的世界服务器杀死一切生物 税务局安全接入服务器地址 网站的数据库如何设计 u8怎么把账套引入数据库 网络技术职业稳定期的计划 淄博党建设计软件开发系统 安卓软件开发学校排行 创建数据库的命名命令是 软件开发传递函数作用 邮储软件开发岗笔试题 qt达梦数据库查询当前连接数 广轻和广科的软件开发水平 Wix建站需要购买服务器 网络技术应用教案全套教科版 电话接通后提示无法连接到服务器
0