データベースにアクセスするアプリケーションがあります(SQL Server 2014 Enterprise Edition)。アプリケーションはデータベースにアクセスするためにストアドプロシージャを呼び出します。最近、次のエラーの送信を開始してアプリケーションを停止するまで、すべてが正常に機能していました。アプリを再起動すると一時的に問題が解決しますが、同じエラーが発生します。
エラー:サーバーから結果を受信するときに、トランスポートレベルのエラーが発生しました。 (プロバイダー:TCPプロバイダー、エラー:0-指定されたネットワーク名は使用できなくなりました。)
私は多くの調査を行いましたが、それらのほとんどはネットワークの問題として指摘していますが、実際に問題を解決するためのものが見つかりませんでした。この問題を解決するためにデータベース側で行う必要がある変更を誰かが知っていますか?私は提案を高く評価します。
DNSの解決に問題があるか、クエリが長時間実行されているようです。
DNSトラブルシューティング用
バンドエイドとトラブルシューティングの補助として、c:\ windows\system32\drivers\etcにあるアプリサーバー(SQL Serverではない)のホストファイルにエントリを追加します。
SQLServerIPAddress SQLServerName
例:
172.16.0.5 ProductionSQLBox
このようにして、名前解決で何が起こっているかについての実際の問題が見つかるまで、SQL Server名はhostsファイルによって解決されます。
コマンドラインを介してアプリサーバーからSQLボックスにpingを実行し、hostsファイルを確認してテストします。または、代わりに、コントロールパネル内でODBC Administratorを使用してDSNを作成し、そこで接続をテストします。
長時間実行されるクエリの場合
SQL Serverに接続するアプリケーション接続文字列に、より長い コマンドタイムアウト値 を実装します。
例
<connectionStrings>
<add name="webconfigconnectionString" connectionString="server=SQLServerName;database=dbName;uid=userName;password=ABC123;Timeout=120" />
</connectionStrings>
これはデータベースの問題ではありません。この問題を解決できるデータベース側の変更はありません。このエラーは、高いネットワーク帯域幅またはアプリケーションのエラーが原因で発生します。このエラーを会社のWintel/Networkチームに転送することをお勧めします。このエラーを停止するために、ネットワークスイッチを変更したり、ネットワーク帯域幅を管理したりできます。
これはアプリケーションの問題のようです。
私の意見では、アプリケーションはSQL接続が常に利用可能である(コマンドを実行する前にチェックやテストを行わない)ことを前提としているため、回線がダウンしたり、何かが接続をドロップしたり閉じたりすると、メッセージが表示されます。
再現するには、SQLサーバー上のSQLセッションを強制終了すると、 まったく同じ 同様のメッセージ。