SQL Serverのエラーが発生しています。
トランスポートレベルのエラーが発生しました
サーバーから結果を受け取る際に サーバーから結果を受信すると(プロバイダ。共有メモリ プロバイダー、エラー。0 - そのハンドルは 無効です)
SQL Server 2008 SP1、Windows 2008 Standard 64bitを使用しています。
.Net 4.0のWebアプリケーションです。サーバーにリクエストがあると発生します。断続的に発生します。どうしたら解決できるでしょうか?
トランスポートレベルのエラーは、多くの場合、壊れているSQLサーバーへの接続にリンクされています。 ... 通常ネットワーク。
Timeout Expiredは通常、SQLクエリの実行に時間がかかりすぎる場合にスローされます。
したがって、いくつかのオプションは次のようにすることができます。
1。 VPN(使用されている場合)またはその他のツールでの接続を確認します。 2。 IISを再起動します。 3。 マシンを再起動します。 4。 sqlクエリを最適化します。
このエラーの詳細を示すMSDNブログを見てください。
接続の削除。 。 接続プーラーは、接続後にプールから接続を削除します。 長い間アイドル状態であったか、プーラーがそれを検出した場合。 サーバーとの接続が切断されました。 。 切断された接続は、試行した後にのみ検出できることに注意してください。 サーバーと通信します。 接続が見つかった場合は、いいえ。 サーバーに接続されている時間が長くなると、無効としてマークされます。 。 無効な接続は、接続プールから削除されるのは、次の場合のみです。 それらは閉じているか、埋め立てられています。 。 。 。 消えたサーバーへの接続が存在する場合、これは。 接続プーラーであっても、プールから接続を引き出すことができます。 切断された接続を検出しておらず、無効としてマークしています。 。 これは、接続を確認するオーバーヘッドが原因です。 まだ有効であれば、プーラーを利用することの利点がなくなります。 サーバーへの別の往復が発生します。 。 これが発生すると、接続を使用する最初の試みが検出されます。 接続が切断され、例外がスローされたこと。 。 基本的にあなたが見ているのは、最後の文の例外です。 。 接続は接続プールから取得され、アプリケーションは取得されます。 物理的な接続がなくなったことを知らない、それを使用する試みです。 物理的な接続がまだそこにあるという仮定の下で行われます。 。 そして、あなたはあなたの例外を取得します。 。 。 。 これにはいくつかの一般的な理由があります。 。 。 。 1。 サーバーが再起動されました。これにより、既存の接続が閉じます。 。 この場合、通常は次の場所にあるSQL Serverログをご覧ください。 C:\ Program Files \ Microsoft SQL Server \< your instance> \ MSSQL \ LOG。 。 起動のタイムスタンプが非常に最近のものである場合、それを疑うことができます。 これがエラーの原因です。 このタイムスタンプと相関するようにしてください。 例外の時間。 。 。 。 2009-04-16 11:32:15.62サーバーログSQL Serverメッセージのファイル。 「C:\ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERORLOG」。 。 。 。 2。 誰かまたは何かが使用されているSPIDを殺しました。 。 繰り返しになりますが、SQL Serverログをご覧ください。 殺害を見つけた場合は、試してみてください。 このタイムスタンプを例外の時間と関連付けます。 。 。 。 2009-04-16 11:34:09.57 spidXXプロセスID XXが殺されました。 ホスト名xxxxx、ホストプロセスID XXXX . 。 。 。 3。 フェイルオーバー(ミラー設定など)が再びあります。SQLServerログをご覧ください。 。 フェイルオーバーがある場合は、このタイムスタンプを時間と相関させるようにしてください。 例外。 。 。 。 2009-04-16 11:35:12.93 spidXXミラー化されたデータベース「< your。 データベース>」により、役割が「PRINCIPAL」から「MIRROR」に変更されています。 フェイルオーバー。
これは、常に約5分の操作の後に行われました。 調査したところ、e1iexpressからの警告は常に障害の前に発生していることがわかりました。 これは明らかに、特定のTCP / IPアダプターに関連するエラーです。 しかし、WiFiからハードワイヤードに変更しても影響はありませんでした。
プランBを試して、Visual Studioを再起動しました。 その後、それはうまくいきました。
よく調べてみると、正しく機能しているときに、「スレッド '<名前なし>」というメッセージが表示されていることに気づきました。コード0で終了したのは、以前の試行でランがクラッシュしたほぼ正確な時刻です。 一部のグーグルは、サーバーが(とりわけ)スレッドプールをトリミングしているときにそのメッセージが表示されることを明らかにしています。
おそらくスレッドプールに偽のスレッドがあり、サーバーが「トリミング」しようとするたびにアプリがダウンしました。
これはすべての人に役立つとは限らないことは知っています(知っているかもしれませんが、おそらくそうです)。同じ問題があり、しばらくして、原因がコード自体から何かであることに気づきました。
サーバーに到達しようとしているコンピューターは別のネットワーク内にあり、接続を確立できましたが、その後削除されました。
修正に使用した方法は、静的なルートをコンピューターに追加して、ファイアウォールを通過せずにサーバーに直接アクセスできるようにすることでした。
route add –p YourServerNetwork mask NetworkMask Router
サンプル:
route add –p 172.16.12.0 mask 255.255.255.0 192.168.11.2
私はそれが誰かを助けることを願っています、少なくとも手がかりとしてこれを持っている方が良いので、あなたがそれに直面した場合、あなたはそれを解決する方法を知っています。
これは、データベースが削除されて再作成されたときに発生します。一部の共有リソースは、データベースがまだ存在することを考慮しているため、実行クエリを再実行して、データベースが再作成された後にテーブルを作成すると、エラーが再び表示されず、 コマンドが正常に完了しました。
メッセージはエラーメッセージの代わりに表示されます Msg 233、レベル20、状態0、行0サーバーにリクエストを送信するときにトランスポートレベルのエラーが発生しました。 (プロバイダー:共有メモリプロバイダー、エラー:0-パイプのもう一方の端にプロセスはありません。)
。
データベースをドロップして再作成する場合は、このエラーを無視し、心配することなくDDLクエリを再実行してください。
私にとっての解決策はまったく異なっていました。
私の場合、datetimestampパラメーターを必要とするオブジェクトソースがありました。 そのODSパラメータConvertEmptyStringToNullがtrueであったとしても、1/1/0001はSelectMethodに渡されていました。 これにより、その日時がSQLサーバーに渡されたときに、SQL日時オーバーフローの例外が発生しました。
datetime.yearの追加チェックを追加しました。 != 0001そしてそれは私のためにそれを解決しました。
デートタイムのオーバーフローエラーではなく、トランスポートレベルのエラーが発生するのは奇妙です。 とにかく。.