使用 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。
您可以使用 Microsoft OLE DB Provider for SQL Server 和 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。 根據預設,這些驅動程式會與加密一起包含在一起。 如需詳細資訊,請參閱下列文章: