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 が有効になります。
アプリケーション サーバーで UDL テストを実行するには、Microsoft OLE DB Provider for SQL Serverと SNAC 11 プロバイダーの両方を使用します。 接続が失敗します。 また、"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 プロバイダー: 既存の接続がリモート ホストによって強制的に閉じられました。 [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 を使用します。 既定では、これらのドライバーは暗号化と共に含まれます。 詳細については、次の記事を参照してください。