使用 SQLCMD 实用工具时发生间歇性连接错误
本文可帮助你解决使用 SQLCMD 命令行工具时出现的间歇性连接“OS 错误 10054”问题。
错误
你会收到以下警告和错误消息:
警告:proc_procname返回 HResult 0x2746,级别 16,状态 1
TCP 提供程序:远程主机强行关闭了现有连接。
SQLCMD.EXE:Sqlcmd:错误:Microsoft SQL Server Native Client 10.0:客户端无法建立连接
这些错误的一个可能原因是驱动程序不受支持。
要考虑的问题
查看以下方案以确定问题是否匹配:
收集网络跟踪并了解 TLS 1.0 和 1.1 已禁用,TLS 1.2 已启用。 在运行 SQL Server 的服务器上,在应用程序服务器上启用 TLS 1.0、1.1 和 1.2。
使用适用于 SQL Server 的 Microsoft OLE DB 提供程序和 SNAC 11 提供程序在应用程序服务器上运行 UDL 测试。 连接失败。 你还会收到一条消息,指出“Microsoft OLE DB Provider for SQL Server”驱动程序已弃用,不支持 TLS 1.2。
应用程序服务器使用 SQL Server Native Client 11 成功测试 ODBC 数据源。 如果不支持 SQL Server Native Client 10.0,可能会收到以下错误消息:
连接失败,SQL 状态为“08001”SQL Server错误:10054 [Microsoft][SQL Server Native Client 10.0]TCP 提供程序:远程主机强行关闭了现有连接。 [Microsoft][SQL Server Native Client 10.0] 客户端无法建立连接。
显示此消息的原因可能是应用程序服务器使用较旧版本的 Diffie-Hellman 算法 (v1) ,并且SQL Server使用较新版本 (v2) 。 这种不匹配会导致间歇性 TLS 故障。
解决方案
要解决这些问题,请执行以下步骤:
在连接字符串中指定SQL Server Native Client 11。
注意
Microsoft 不再支持 SNAC 11。 如果在使用 SNAC 11 时遇到任何问题,必须先升级到受支持的 Microsoft 驱动程序版本,然后才能提供技术支持。
将应用程序驱动程序升级到受支持的驱动程序。
如果不对连接使用加密,请使用 MSOLEDBSQL v18 或 ODBC v17。 如果在应用程序服务器上对连接使用加密,请使用 MSOLEDBSQL v19 或 ODBC v18。 默认情况下,这些驱动程序与加密一起包含在一起。 有关详细信息,请参阅以下文章:
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈