Sunucudan sonuçlar alınırken aktarım düzeyinde bir hata oluştu [kapalı]


169

Bir SQL Server hatası alıyorum:

Sunucudan sonuçlar alınırken aktarım düzeyinde bir hata oluştu. (sağlayıcı: Paylaşılan Bellek Sağlayıcısı, hata: 0 - Tanıtıcı geçersiz.)

Sql Server 2008 SP1, Windows 2008 Standard 64 bit kullanıyorum.

Bu bir .Net 4.0 web uygulamasıdır. Sunucuya bir istek yapıldığında olur. Aralıklı. Nasıl çözeceğime dair bir fikrin var mı?


3
Veritabanı, AUTO_CLOSE True olarak ayarlanmış SQL Express / MSDE eski bir sürümünde oluşturulmuşsa oluşabilir. Veya SQL Server hizmet örneği yeniden başlatıldı.
devstuff

1
Ben senin db bekleyen bir eylem neden olabilir. bu bir DB kilidiyle sonuçlanır.
pix

4
İşaretli cevap bir cevap değildir. Aşağıdaki Michael Olivero'nun aslında içerik sağlayan cevabı, onu takip ettiğimde sorunu çözdü. (Geliştirme makinemdeki geçici web sunucusunu el ile kapatma.) Yanıtın değiştirilmesini öneririm.
Adam Miller

3
@Flexo Bu konu dışı mı? VS 2017 ve MS SQL 2016 Enterprise'ın yepyeni yüklemeleri ile başlamıştım. VS 2015 Topluluğu ile gayet iyi çalışıyorken.
Edward

1
Bu konu dışı olmamalı. Sorunun kullanımdaki kodla ilgisi yoktur, bu nedenle bunun için bir MCVE oluşturulamaz. Ayrıca, kapanış nedeni şunları belirtiyor: this one was resolved in a manner unlikely to help future readers- ancak 179 bin kişi bu soruya rastladı.
Nisarg

Yanıtlar:


102

Veritabanı bağlantısı, veritabanı sunucusu tarafından kapatılır. Bağlantı, uygulamanızın bağlantı havuzunda geçerli kalır; Sonuç olarak, paylaşılan bağlantı dizesini alıp yürütmeye çalıştığınızda veritabanına erişemezsiniz. Visual Studio geliştiriyorsanız, görev çubuğunuzdaki geçici web sunucusunu kapatmanız yeterlidir.

Üretim gerçekleşirse, uygulama havuzunuzu web siteniz için sıfırlamak bağlantı havuzunu geri dönüştürmelidir.


1
Bu asıl cevap.
TheHuge_

2
Benim durumumda, MultipleActiveResultSets=Truebağlantı dizesinde aynı hataya neden olan bir ayar vardı .
Semyon Vyskubov

17

Komut isteminde aşağıdaki komutu deneyin:

netsh interface tcp set global autotuning=disabled

Bu, ağ yığınının otomatik ölçeklendirme yeteneklerini kapatır


20
Bunun gerçekte ne yaptığına dair bazı ayrıntılar verebilir misiniz? Küresel olarak böyle bir değer belirlemenin herhangi bir nedeni var mı?
Drew Noakes

1
ağ yığının otomatik ölçeklendirme yeteneklerini kapatır.
Simmo

Windows XP SP3'te çalışmaz. Netsh arabiriminin Windows XP'de tcp alt komutu yoktur, ancak Windows 7 SP1'de iyi çalışır.
Narayanan

Bunun eski olduğunu biliyorum, ama bu benim için çalışan tek çözüm (çoğu sorun / çözüm bir web sunucusu / uygulama etrafında dönüyor, durumum masaüstü uygulaması ve yerel ağ sunucusu, IIS yok veya böyle bir şey). Otomatik ayarlama / otomatik ölçeklendirmeyi kapatmak neden bu sorunu çözer?
Trent

1
benim durumumda, SQL Server Management Studio ReOpen sorunu çözdü
Alex

15

Ben de aynı problemi yaşadım. Visual Studio'yu yeniden başlattım ve bu sorunu çözdü


12

IIS kullanmayanlar için, Visual Studio 2010 ile hata ayıklama sırasında bu sorunu vardı. Tüm hata ayıklayıcı işlemleri sona erdi: WebDev.WebServer40.EXE sorunu çözdü.


Lütfen bu süreci nasıl sona erdirdiğinize ilişkin adımları anlatın. Ben acemiyim ve "tüm hata ayıklayıcı işlemi sona erdi" ile ne demek istediğini bilmiyorum
Kırılmaz

@ Kırılmaz Görev Yöneticisi'ni kullandım. Görev yöneticisinde, WebDev.WebServer40.EXE adıyla çalışan tüm işlemleri görebilirsiniz. Windows işleminin nasıl öldürüleceği hakkında bilgi için betanews.com/2015/10/08/how-to-kill-a-windows-process adresine bakın .
jth_92

8

Aktarım düzeyi hataları genellikle kesilen sql sunucusuyla bağlantıya bağlıdır ... genellikle ağ.

Zaman aşımı süresi doldu, bir sql sorgusunun çalıştırılması çok uzun sürdüğünde genellikle atılır.

Bu yüzden birkaç seçenek olabilir:

  1. VPN'de (kullanılıyorsa) veya başka bir araçta bağlantı olup olmadığını kontrol edin
  2. IIS'yi yeniden başlat
  3. Makineyi yeniden başlat
  4. SQL sorgularını optimize edin.

Basit cevap ama zamanımı kurtardı.
Kirk

7

Tek ihtiyacınız olan ASP.NET Development Server'ı durdurmak ve projeyi yeniden çalıştırmaktır


4

Veritabanınıza Microsoft SQL Server Yönetimi ile bağlıysanız, tüm bağlantılarınızı kapatın ve tekrar deneyin. Başka bir Azure Veritabanına bağlandığında bu hata oluştu ve kapatıldığında benim için çalıştı. Hala nedenini bilmiyorum ..


Bu benim için işe yarayan bir düzeltmeydi. SQL Server Management Studio'yu kapattım ve bu hatayı bir daha asla görmedim.
Beevik

4

Her zaman yaklaşık 5 dakika ameliyattan sonra bunu alıyordum. Soruşturuldu ve hatadan önce her zaman e1iexpress'ten bir uyarı oluştuğunu tespit etti. Görünüşe göre bu, belirli TCP / IP bağdaştırıcılarıyla ilgili bir hatadır. Ancak WiFi'den kablolu bağlantıya geçmek onu etkilemedi.

Plan B'yi denedim ve Visual Studio'yu yeniden başlattı. Sonra iyi çalıştı.

Daha yakın bir çalışmada, doğru çalışırken, mesajın The Thread '<No Name>' has exited with code 0tam olarak önceki denemelerde çarpışma anında gerçekleştiğini fark ettim . Bazı Google çalışanları (diğer şeylerin yanı sıra) sunucu iş parçacığı havuzunu kırptığında bu iletinin geldiğini gösterir.

Muhtemelen iş parçacığı havuzunda sahte bir iş parçacığı vardı ve sunucu "kırpmak" her çalıştığında app aldı.


4

Bak MSDN blogunda bu hatayı dışarı ayrıntıları:

Bağlantıları Kaldırma

Bağlantı havuzu oluşturucu, uzun süre boşta kaldıktan sonra veya havuz sunucusu sunucuyla bağlantı koptuğunu algılarsa bağlantıyı havuzdan kaldırır.

Kesik bir bağlantının yalnızca sunucuyla iletişim kurmaya çalıştıktan sonra tespit edilebileceğini unutmayın. Artık sunucuya bağlı olmayan bir bağlantı bulunursa, geçersiz olarak işaretlenir.

Geçersiz bağlantılar, bağlantı havuzundan yalnızca kapatıldıklarında veya geri alındıklarında kaldırılır.

Kaybolan bir sunucuya bağlantı varsa, bağlantı havuzu kesilen bağlantıyı algılamamış ve geçersiz olarak işaretlese bile bu bağlantı havuzdan alınabilir.

Bağlantının hala geçerli olup olmadığını denetleme yükü, sunucuya başka bir gidiş dönüş gerçekleştirerek bir havuzcuya sahip olmanın faydalarını ortadan kaldıracağı için böyle bir durum söz konusudur.

Bu durumda, bağlantıyı kullanmaya yönelik ilk girişim bağlantının kesildiğini algılar ve bir istisna atılır.

Temelde gördüğünüz şey, son cümledeki istisna.

Bağlantı havuzundan bir bağlantı alınır, uygulama fiziksel bağlantının gittiğini bilmez, fiziksel bağlantının hala orada olduğu varsayımı altında bunu kullanma girişimi yapılır.

Ve sen de istisnan var.

Bunun birkaç yaygın nedeni vardır.

  1. Sunucu yeniden başlatıldı, bu mevcut bağlantıları kapatır.

Bu durumda, genellikle şu adreste bulunan SQL Server günlüğüne bakın: C: \ Program Files \ Microsoft SQL Server \\ MSSQL \ LOG

Başlangıç ​​için zaman damgası çok yeni ise, hatanın nedeni bu olduğundan şüphelenebiliriz. Bu zaman damgasını istisna zamanı ile ilişkilendirmeye çalışın.

2009-04-16 11: 32: 15.62 Sunucu 'C: \ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERRORLOG' dosyasında SQL Server mesajlarını günlüğe kaydetme.

  1. Birisi veya başka bir şey kullanılan SPID'yi öldürdü.

Yine, SQL Server günlüğüne bir göz atın. Bir öldürme bulursanız, bu zaman damgasını istisna zamanıyla ilişkilendirmeye çalışın.

2009-04-16 11: 34: 09.57 spidXX İşlem Kimliği XX, ana bilgisayar işlem kimliği XXXX olan ana bilgisayar adı xxxxx tarafından öldürüldü.

  1. Yine bir yük devretme (örneğin bir ayna kurulumunda), SQL Server günlüğüne bir göz atın.

Bir yük devretme varsa, bu zaman damgasını istisna zamanıyla ilişkilendirmeye çalışın.

2009-04-16 11: 35: 12.93 spidXX Yansıtılmış “” veritabanı, Yük Devretme nedeniyle rolleri “PRINCIPAL” dan “MIRROR” a değiştiriyor.


3

Komut dosyanız SQL Service'i bazı nedenlerden dolayı durdurduğunda bu mesajı alırsınız. SQL Hizmetini yeniden başlatırsanız, belki de sorununuz çözülecektir.


Lütfen SQL Hizmetini başlatma konusunda adımlar verin. Ben bir acemi ve ben sadece bir asp.net mvc 5 uygulaması oluşturdu. Ben "enable-göçler" çalıştırdığınızda ve her şeyi ben "add-göç 'Ben bu hatayı alıyorum update-veritabanı tıkladığında herşey sonra gayet ve' sdfd çalıştırmak sonra gayet bana yol lütfen.
Kırılmaz

3

Bu herkesin (belki evet bilir) yardımcı olmayabilir biliyorum, ama aynı sorunu vardı ve bir süre sonra neden kodun dışında bir şey olduğunu fark etti.

Sunucuya ulaşmaya çalışan bilgisayar başka bir ağdaydı, bağlantı kurulabilir, ancak kesilebilir.

Bunu düzeltmek için kullandığımız yol, bilgisayara statik duvar eklemek ve güvenlik duvarından geçmeden sunucuya doğrudan erişim sağlamaktı.

route add p YourServerNetwork mask NetworkMask Router 

Örneklem:

route add p 172.16.12.0 mask 255.255.255.0 192.168.11.2 

Umarım birine yardımcı olur, en azından bir ipucu olarak buna sahip olmak daha iyidir, bu yüzden yüzleşirseniz, nasıl çözeceğinizi bilirsiniz.


2

Visual Studion 2012 geliştirme ortamında aynı hatayı aldım, IIS Express'i durdurdum ve uygulamayı yeniden çalıştırdım, çalışmaya başladı.


2

Benim durumumda "SQL Server" Sunucu hizmeti durdu. Sorguyu çalıştırmamı ve hatayı ortadan kaldırmamı sağlayan hizmeti yeniden başlattığımda.

Sorgunun bu hizmeti neden durdurduğunu öğrenmek için sorgunuzu incelemek de iyi bir fikirdir.

resim açıklamasını buraya girin


1

Aynı sorunu yaşadım. SQL Server LOG'u keserek çözdüm. Bunu kontrol edin ve sonra bu çözümün size yardımcı olup olmadığını bize bildirin.


1

Benim için cevap, işletim sistemini 2008R2'den 2012R2'ye yükseltmektir, iisreset'in çözümü veya yeniden başlatma uygulaması benim için işe yaramadı. Ayrıca TCP Baca Boşaltma ayarını çevirmeye çalıştım, ancak sunucuyu yeniden başlatmadı, çünkü o da çalışmayan bir üretim sunucusu.


1

Benim için çözüm tamamen farklıydı.

Benim durumumda datetimestamp parametresi gerektiren bir objectource vardı. Bu ODS parametresi ConvertEmptyStringToNull doğru olmasına rağmen 1/1/0001 SelectMethod'a geçiriliyordu. Bu datetime sql sunucusuna geçirildiğinde sql datetime taşması istisnasına neden oldu.

Datetime.year! = 0001 için ek bir kontrol eklendi ve bu benim için çözdü.

Tarih-saat taşma hatası değil, bir taşıma seviyesi hatası atacağını garip. Neyse..


1
bununla ilgili bir yol yok, tesadüf olmalı
Michiel Cornille

1

Bu hatayla son zamanlarda iş sunucumuz ve veritabanı sunucumuz arasında karşılaştık. Bizim için çözüm, ağ arayüzlerinde "IP Boşaltma" yı devre dışı bırakmaktı. Sonra hata gitti.


1

Bu hata için bulduğum nedenlerden biri bağlantı dizesinde ' Paket Boyutu = xxxxx '. xxxx değeri çok büyükse, bu hatayı göreceğiz. Ya bu değeri kaldırın ve ağ yeteneklerine bağlı olarak SQL sunucusunun bunu ele almasına veya düşük tutmasına izin verin.


1

Bir SQL veritabanını geri yüklemeye çalıştığımda ve Optionssekmedeki Onay Kutusunu izlediğimde başıma geldi ,

resim açıklamasını buraya girin

Tek başına bir veritabanı sunucusu olduğu için sadece SSMS'yi kapatıp yeniden açmak sorunu benim için çözdü.


1

Bu, veritabanı bırakıldığında ve yeniden oluşturulduğunda bazı paylaşılan kaynaklar hala veritabanının hala var olduğunu düşünüyor, bu nedenle, yeniden oluşturulduktan sonra veritabanında tablolar oluşturmak için sorguyu yeniden çalıştırdığınızda hata tekrar gösterilmeyecek ve Command(s) completed successfully.ileti görüntülenecektir. hata mesajı yerine gösterilecekMsg 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.) .

Veritabanlarını bırakıp yeniden oluştururken bu hatayı yok sayın ve endişelenmeden DDL sorgularınızı yeniden çalıştırın.


0

Son zamanlarda aynı sorunla karşılaştım, ancak Google'da cevap alamadım. Bu yüzden burada paylaşmayı düşündüm, böylece gelecekte birine yardımcı olabilir.

Hata:

Sorgu yürütülürken, sorgu birkaç çıktı sağlar ve ardından hatanın altına atar.

"Sunucudan çıktı alınırken aktarım düzeyi hatası oluştu (TCP: sağlayıcı, hata: 0- belirtilen ağ adı artık mevcut değil"

Çözüm:

  1. Bağlı sunucunun sağlayıcısını kontrol edin
  2. Bu sağlayıcı özelliklerinde, söz konusu sağlayıcının sorunu düzeltmesi için "Süreçte izin ver" seçeneğini etkinleştirin.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.