SQLCMD ユーティリティの使用時に断続的な接続エラーが発生する
この記事は、SQLCMD コマンド ライン ツールを使用するときに発生する断続的な接続 "OS エラー 10054" の問題を解決するのに役立ちます。
エラー
次の警告メッセージとエラー メッセージが表示されます。
警告: proc_procname返された HResult 0x2746、レベル 16、状態 1
TCP プロバイダー: 既存の接続がリモート ホストによって強制的に閉じられました。
SQLCMD.EXE: Sqlcmd: エラー: Microsoft SQL Server Native Client 10.0: クライアントが接続を確立できない
これらのエラーの考えられる原因の 1 つは、サポートされていないドライバーです。
考慮すべき質問
次のシナリオを確認して、問題が一致するかどうかを判断します。
ネットワーク トレースを収集し、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 State: '08001' SQL Server エラー: 10054 [Microsoft][SQL Server Native Client 10.0]TCP Provider: 既存の接続がリモート ホストによって強制的に閉じられました。 [Microsoft][SQL Server Native Client 10.0]クライアントが接続を確立できません。
このメッセージは、アプリケーション サーバーが以前のバージョンの Diffie-Hellman アルゴリズム (v1) を使用し、SQL Server が新しいバージョン (v2) を使用しているために表示されることがあります。 この不一致により、断続的な TLS エラーが発生します。
解決方法
これらの問題を解決するには、次の手順に従います。
接続文字列で SQL Server Native Client 11 を指定します。
Note
Microsoft は SNAC 11 をサポートしなくなりました。 SNAC 11 の使用中に問題が発生した場合は、テクニカル サポートを提供する前に、サポートされているバージョンの Microsoft ドライバーにアップグレードする必要があります。
サポートされているドライバーにアプリケーション ドライバーをアップグレードします。
接続に暗号化を使用していない場合は、MSOLEDBSQL v18 または ODBC v17 を使用します。 アプリケーション サーバー上の接続に暗号化を使用している場合は、MSOLEDBSQL v19 または ODBC v18 を使用します。 既定では、これらのドライバーは暗号化と共に含まれます。 詳細については、次の記事をご覧ください。