サーバーから結果を受信中にトランスポートレベルのエラーが発生しました[終了]


169

SQL Serverエラーが発生します。

サーバーから結果を受信中に、トランスポートレベルのエラーが発生しました。(プロバイダー:共有メモリプロバイダー、エラー:0-ハンドルが無効です。)

SQL Server 2008 SP1、Windows 2008 Standard 64ビットを実行しています。

これは.Net 4.0 Webアプリケーションです。サーバーにリクエストが送信されると発生します。断続的です。どうすればそれを解決できますか?


3
これは、AUTO_CLOSEをTrueに設定したSQL Express / MSDEの古いバージョンでデータベースが作成された場合に発生することがあります。または、SQL Serverサービスインスタンスが再起動されました。
devstuff '19

1
私はあなたのdbの保留中の行動によって引き起こされる可能性があります。これにより、DBロックが発生します。
pix

4
マークされた答えは答えではありません。以下のMichael Oliveroによる答えは実際にコンテンツを提供し、それに従うことで私がそれに遭遇したときの問題を解決しました。(手動で開発マシンの一時Webサーバーを閉じます。)回答を変更することをお勧めします。
Adam Miller

3
@Flexoこれはトピック外としてクローズされていますか?VS 2017とMS SQL 2016 Enterpriseを新しくインストールしただけで、それが起こりました。VS 2015 Communityで問題なく動作していました。
エドワード

1
これは話題外であってはなりません。この問題は使用中のコードとは関係がないため、MCVEを作成することはできません。また、閉鎖の理由は次のように述べthis one was resolved in a manner unlikely to help future readersています。
Nisarg

回答:


102

データベース接続は、データベースサーバーによって閉じられます。接続はアプリの接続プールで引き続き有効です。その結果、共有接続文字列を取得して実行しようとしても、データベースにアクセスできません。Visual Studioを開発している場合は、タスクバーの一時的なWebサーバーを閉じるだけです。

本番環境で発生した場合、Webサイトのアプリケーションプールをリセットすると、接続プールがリサイクルされます。


1
これが実際の答えです。
TheHuge_

2
私の特定のケースではMultipleActiveResultSets=True、同じエラーを引き起こす接続文字列の設定がありました。
Semyon Vyskubov

17

コマンドプロンプトで次のコマンドを試してください。

netsh interface tcp set global autotuning=disabled

これにより、ネットワークスタックの自動スケーリング機能がオフになります


20
実際に何が行われているのか詳細を教えてください。そのような値をグローバルに設定することに何らかの理由がありますか?
Drew Noakes、2010

1
ネットワークスタックの自動スケーリング機能をオフにします。
Simmo

Windows XP SP3では機能しません。Netshインターフェイスには、Windows XPではtcpサブコマンドがありませんが、Windows 7 SP1ではうまく機能します。
ナラヤナン

私はこれが古いことを知っていますが、これが私にとって有効な唯一の解決策でした(ほとんどの問題/解決策はWebサーバー/アプリを中心に展開し、私の状況はデスクトップアプリとローカルネットワークサーバーで、IISなどはありません)。自動チューニング/自動スケーリングをオフにするとこの問題が解決するのはなぜですか?
トレント

1
私の場合、SQL Server Management StudioのReOpenが問題を解決しました
Alex

15

私も同じ問題を抱えていました。Visual Studioを再起動して問題を修正しました


12

IISを使用していない場合、Visual Studio 2010でデバッグするときにこの問題が発生しました。すべてのデバッガープロセスを終了しました。問題を解決したWebDev.WebServer40.EXE。


これらのプロセスをどのように終了したかについての手順を教えてください。私は初心者です、私は「すべてのデバッガプロセスを終了する」ことにより、あなたは何を意味するのか分からない
アンブレイカブル

@Unbreakableタスクマネージャーを使用しました。タスクマネージャーで、WebDev.WebServer40.EXEという名前の実行中のすべてのプロセスを確認できます。Windowsプロセスを強制終了する方法については、betanews.com / 2015/10/08 / how-to-kill-a-windows-processを参照してください。
jth_92 2017

8

トランスポートレベルのエラーは、多くの場合、SQLサーバーへの接続が切断されていることにリンクしています。

タイムアウトの期限切れは、SQLクエリの実行に時間がかかりすぎる場合に通常スローされます。

そのため、いくつかのオプションは次のとおりです。

  1. VPN(使用している場合)またはその他のツールで接続を確認します。
  2. IISを再起動します
  3. マシンを再起動します
  4. SQLクエリを最適化します。

簡単な答えですが、時間を節約できました。
カーク


4

Microsoft SQL Server Managementを介してデータベースに接続している場合は、すべての接続を閉じて再試行してください。別のAzureデータベースに接続したときにこのエラーが発生し、閉じたときに問題が発生しました。それでも理由がわかりません。


これは私にとって有効な修正でした。SQL Server Management Studioをシャットダウンした後、このエラーが発生することはありません。
Beevik 2013

4

常に約5分の操作の後、これを取得していました。調査の結果、失敗する前にe1iexpressからの警告が常に発生していることがわかりました。これは明らかに、特定のTCP / IPアダプタに関連するエラーです。しかし、WiFiからハードワイヤードに変更しても影響はありませんでした。

プランBを試してVisual Studioを再起動しました。その後、うまくいきました。

よく調べてみると、正しく機能している場合The Thread '<No Name>' has exited with code 0、以前の試行で実行がクラッシュしたほぼ正確なタイミングでメッセージが発生していることに気付きました。一部のGooglingは、サーバーがスレッドプールをトリミングしているときに(特に)、そのメッセージが表示されることを明らかにしています。

おそらくスレッドプールに偽のスレッドがあり、サーバーが「トリム」しようとするたびにアプリがダウンしました。


4

このエラーの詳細については、MSDNブログをご覧ください。

接続の削除

接続プーラーは、長時間アイドル状態になった後、またはサーバーとの接続が切断されたことをプーラーが検出した場合に、プールから接続を削除します。

サーバーとの通信を試みた後にのみ、切断された接続を検出できることに注意してください。サーバーに接続されなくなった接続が見つかると、無効とマークされます。

無効な接続が接続プールから削除されるのは、それらが閉じられるか再利用されるときだけです。

消えたサーバーへの接続が存在する場合、接続プーラーが切断された接続を検出していないとしても、その接続をプールから引き出すことができます。

これが当てはまるのは、接続がまだ有効であることを確認するオーバーヘッドによって、サーバーへの別のラウンドトリップが発生することにより、プーラーを使用する利点がなくなるためです。

これが発生すると、接続を使用する最初の試行は、接続が切断されたことを検出し、例外がスローされます。

基本的に、表示されているのは最後の文の例外です。

接続は接続プールから取得されます。アプリケーションは、物理接続が失われたことを認識していません。物理接続がまだ存在していることを前提として、接続の使用が試みられます。

そして、あなたはあなたの例外を取得します。

これにはいくつかの一般的な理由があります。

  1. サーバーが再起動されました。これにより、既存の接続が閉じます。

この場合、通常は次の場所にあるSQL Serverログを確認してください:C:\ Program Files \ Microsoft SQL Server \\ MSSQL \ LOG

起動のタイムスタンプが非常に新しい場合は、これがエラーの原因であると考えられます。このタイムスタンプを例外の時間と関連付けるようにしてください。

2009-04-16 11:32:15.62サーバー 'SQL Serverメッセージをファイル' C:\ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERRORLOG 'に記録します。

  1. 使用中のSPIDが誰かによって停止されました。

ここでも、SQL Serverログを確認します。キルを見つけた場合は、このタイムスタンプを例外の時間と関連付けてみてください。

2009-04-16 11:34:09.57 spidXXプロセスID XXはホスト名xxxxx、ホストプロセスID XXXXによって強制終了されました。

  1. フェイルオーバーが(たとえばミラーセットアップで)再び発生した場合は、SQL Serverログを確認してください。

フェイルオーバーがある場合は、このタイムスタンプを例外の時刻と関連付けてみてください。

2009-04-16 11:35:12.93 spidXXミラーリングされたデータベース「」は、フェイルオーバーのために「PRINCIPAL」から「MIRROR」にロールを変更しています。


3

このメッセージは、スクリプトが何らかの理由でSQLサービスを停止したときに表示されます。したがって、SQLサービスを再度開始すると、おそらく問題は解決されます。


SQLサービスを開始する手順を教えてください。私は初心者で、asp.net mvc 5アプリケーションを作成しました。「enable-migrations」を実行すると、すべてが問題なく、「add-migration "sdfd」を実行し、すべてが問題なく、update-databaseをクリックすると、このエラーが発生します。ガイドしてください
Unbreakable

3

私はこれがすべての人に役立つとは限らないことを知っています(知っているかもしれませんが、そうかもしれません)が、同じ問題があり、しばらくして、原因はコード自体に原因があることがわかりました。

サーバーに到達しようとしているコンピューターが別のネットワークにあり、接続を確立できたがドロップされました。

これを修正するために使用した方法は、コンピューターに静的ルートを追加して、ファイアウォールを通過せずにサーバーに直接アクセスできるようにすることでした。

route add p YourServerNetwork mask NetworkMask Router 

サンプル:

route add p 172.16.12.0 mask 255.255.255.0 192.168.11.2 

私はそれが誰かを助けることを願っています、少なくとも手がかりとしてこれを持っていることがより良いので、あなたがそれに直面した場合、あなたはそれを解決する方法を知っています。


2

Visual Studion 2012開発環境でも同じエラーが発生し、IIS Expressを停止してアプリケーションを再実行すると、動作し始めました。


2

私の場合、「SQL Server」サーバーサービスが停止しました。クエリを実行してエラーを解消できるサービスを再起動すると、

クエリを調べて、クエリがこのサービスを停止した理由を確認することもお勧めします

ここに画像の説明を入力してください


1

同じ問題がありました。SQL Server LOGを切り捨てて解決しました。それを確認し、この解決策が役に立ったかどうかを教えてください。


1

私にとっての答えは、OSを2008R2から2012R2にアップグレードすることです。iisresetまたは再起動アプリプールのソリューションは私にとってはうまくいきませんでした。また、TCP Chimney Offload設定をオフにしてみましたが、サーバーは運用サーバーであり、機能しなかったため、サーバーを再起動しませんでした。


1

私にとって、解決策はまったく異なりました。

私の場合、datetimestampパラメータを必要とするオブジェクトソースがありました。そのODSパラメータConvertEmptyStringToNullがtrueであったとしても、1/1/0001がSelectMethodに渡されていました。これにより、その日時がSQLサーバーに渡されたときに、SQL日時オーバーフロー例外が発生しました。

datetime.year!= 0001の追加チェックを追加し、それで解決しました。

トランスポートレベルのエラーがスローされ、日時オーバーフローエラーがスローされないのは奇妙です。いずれかの方法..


1
これが関連する方法はありません、それは偶然だったに違いありません
ミシェル・コーニール2014

1

最近、ビジネスサーバーとデータベースサーバーの間でこのエラーが発生しました。私たちの解決策は、ネットワークインターフェイスで「IPオフロード」を無効にすることでした。その後、エラーはなくなりました。


1

このエラーが発生した理由の1つは、接続文字列の「Packet Size = xxxxx」です。xxxxの値が大きすぎると、このエラーが発生します。この値を削除して、SQLサーバーに処理させるか、ネットワークの機能に応じて低く維持します。


1

SQLデータベースを復元しようとしてOptionsタブのチェックボックスをオンにしたときに、

ここに画像の説明を入力してください

これはスタンドアロンのデータベースサーバーであるため、SSMSを閉じて再度開くだけで問題は解決しました。


1

これは、データベースが削除され、一部の共有リソースがまだデータベースが存在することを考慮している場合に発生するため、再作成後に実行クエリを再実行してデータベースにテーブルを作成すると、エラーは再び表示されず、Command(s) completed successfully.メッセージも表示されません。エラーメッセージの代わりに表示されますMsg 233, Level 20, State 0, Line 0 A transport-level error has occurred when sending the request to the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)

データベースを削除して再作成する場合はこのエラーを無視して、心配することなくDDLクエリを再実行してください。


0

最近同じ問題に直面しましたが、Googleで回答を得ることができませんでした。それをここで共有することを考え、将来誰かを助けることができるようにしました。

エラー:

クエリの実行中、クエリはほとんど出力を提供しないため、以下のエラーがスローされます。

「サーバーから出力を受信するときにトランスポートレベルエラーが発生しました(TCP:プロバイダー、エラー:0-指定されたネットワーク名は使用できなくなりました」

解決:

  1. そのリンクサーバーのプロバイダーを確認する
  2. そのプロバイダーのプロパティで、その特定のプロバイダーの「プロセスを許可」オプションを有効にして、問題を修正します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.