Microsoft SQL Server 予期しない接続切断
SQL Server を利用していて厄介なトラブルのひとつに「予期しない接続切断」があります。
●「サーバーに要求を送信しているときに、
トランスポート レベルのエラーが発生しました。
(provider: Shared Memory Provider, error: 0 - パイプの他端にプロセスがありません。)」
●「サーバーに要求を送信しているときに、
トランスポート レベルのエラーが発生しました。
(provider: TCP プロバイダ, error: 0 - 既存の接続はリモート ホストに強制的に切断されました。) 」
ネットワーク中継器機器に何らかの問題がある場合や、ネットワークやマシンの負荷、SQL Server サービスの停止、
タイムアウトなど、さまざまな要因があり、一筋縄で解決することはできません。
(参考) Troubleshooting Connectivity #3 – 予期しない接続切断
予防策
Microsoftでもこの現象を認識しており、
Scalable Networking Pack を推奨しているようです。
アプリケーションが SQL Server に接続するとエラー メッセージ "一般的なネットワーク エラーです"、"通信リンクが失敗しました"、または "トランスポート レベルのエラー" が表示される
対策
そうはいっても、きっちり予防しても発生する場合もあるので、
アプリ側で対策を嵩じる必要があります。
中でも最も有用な手段として、セッションの確認があります。
「select * from sys.dm_exec_sessions where host_name is not NULL」
上記SQLを実行すると以下のような結果が返ってきます。
例えば、where 句に program_name = '製品名' などを与えことで、
特定のアプリケーションからの接続状態を確認することができます。
あとは、try〜chatchブロックの中にアクセス文を記述し、
SqlExceptionを拾うようにします。
(参考) SqlException クラス
また、SQL Server 側の設定で、多くはAuto Close が Trueになっていることで
発生することもあるようです。
この場合は、AUTO_CLOSE データベース オプションを OFF に設定 するようにしてください。
(参考) AUTO_CLOSE データベース オプションを OFF に設定
【このカテゴリーの最新記事】
- no image
- no image
- no image
- no image