SQL Server'a Bağlantı Bazen Çalışır


101

Bir ADO.Net uygulaması yalnızca bazen yerel ağdaki başka bir sunucuya bağlanabilir. Belirli bir bağlantı girişiminin başarılı veya başarısız olması rastgele görünüyor. Bağlantı şu biçimde bir bağlantı dizesi kullanıyor:

Sunucu = THESERVER \ TheInstance; Veritabanı = TheDatabase; Kullanıcı Kimliği = Kullanıcı; Şifre = ThePassword;

döndürülen hata:

Bağlantı Zaman Aşımı Süresi Doldu. Oturum öncesi el sıkışma bildirimini kullanmaya çalışırken zaman aşımı süresi geçti.
Bunun nedeni, giriş öncesi anlaşmanın başarısız olması veya sunucunun zamanında yanıt verememesi olabilir.
Bu sunucuya bağlanmaya çalışırken harcanan süre - [Oturum Öncesi] başlatma = 42030; el sıkışma = 0;

.NET uygulaması, aşağıdaki kodu yürüten küçük bir test uygulamasıdır:

using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
    conn.Open();
    int rowCount = (int)cmd.ExecuteScalar();
}

Tablo küçüktür, sadece 78 satırdır .

Ancak, .NET uygulamasının bu hatayı aldığı aynı makinede , THESERVER'a SSMS ve bağlantı dizesinde adı geçen Kullanıcı Kimliği / Parola kullanarak bağlanabiliyorum.

Bağlantı neden bir ADO.Net uygulamasından başarısız, ancak SSMS'deki aynı kimlik bilgileriyle başarılı olabilir?


Yanıtlar:


94

TCP / IP'nin IPv4 adresi için etkinleştirildiği, ancak IPv6 adresi için etkinleştirilmediği ortaya çıktı THESERVER.

Görünüşe göre bazı bağlantı girişimleri IPv4 kullanılarak sona erdi ve diğerleri IPv6 kullandı.

Her iki IP sürümü için TCP / IP'nin etkinleştirilmesi sorunu çözdü.

SSMS'nin işe yaraması tesadüfi olduğu ortaya çıktı (ilk birkaç denemede muhtemelen IPv4 kullanıldı). Daha sonraki bazı SSMS üzerinden bağlanma girişimleri aynı hata mesajıyla sonuçlandı.

Ek IP adresleri için TCP / IP'yi etkinleştirmek için:

  • Sql Server Configuration Manager'ı başlatın
  • SQL Server Ağ Yapılandırması düğümünü açın
  • MYSQLINSTANCE için Protokoller'e Sol Tıklayın
  • Sağdaki bölmede, TCP / IP'ye sağ tıklayın
  • Özellikler'i tıklayın
  • IP Adresleri sekmesini seçin
  • Listelenen her IP adresi için, Etkin ve Etkin'in her ikisinin de Evet olduğundan emin olun.

Teşekkürler, bu benim için hatayı çözdü. İlginç bir şekilde, tüm IP adresleri devre dışı bırakılmıştı (önceden değillerdi). Benim durumumda yapılandırmanın manuel olarak değiştirileceğini düşünmediğim için bunların devre dışı bırakılmasına neyin sebep olabileceğini bilmek iyi olurdu ...
Matt

IPv6 adreslerimi de hiçbir zaman manuel olarak devre dışı bırakmadım. Ben de nasıl sakat kaldıklarını merak ediyorum.
Eric J.

Bazı nedenlerden dolayı IPv6'yı etkinleştiremiyorum. Değişikliklerin etkili olabilmesi için hizmetin yeniden başlatılması gerektiğini söylüyor ancak hiçbir zaman "Evet" olarak kalmıyor. Nasıl devam edileceğine dair herhangi bir ipucu
Salman

5
Protokol sekmesinde, SQL'e tüm IP'leri dinlemesini söyleyen 'tümünü dinle' geçersiz kılma özelliği olduğundan, tek tek girişlerin devre dışı bırakılmasının bir sorun olduğundan emin değilim. Belgeler için aşağıdaki bağlantıya bakın. msdn.microsoft.com/en-us/library/dd981060.aspx
ShaneH

2
Azure'da bu tür şeyler görüyorum sanırım
tofutim

31

En son Microsoft güncellemelerine (09/02/2016) şüpheli bir şekilde uyan aynı hatayı aldım. ASP.NET uygulamamın "oturum açma öncesi el sıkışma onayını kullanmaya çalışırken geçen zaman aşımı süresi" hatasını döndürürken SSMS'nin sorunsuz bağlandığını buldum

Benim için çözüm, bağlantı dizesine 30 saniyelik bir bağlantı zaman aşımı eklemekti, örneğin:

ConnectionString="Data Source=xyz;Initial Catalog=xyz;Integrated Security=True;Connection Timeout=30;"

Benim durumumda etkilenen tek bağlantı, entegre Güvenlik kullanan bir bağlantıydı ve bağlanmadan önce bir kullanıcının kimliğine bürünüyordum, SQL Kimlik Doğrulaması kullanılarak aynı sunucuya yapılan diğer bağlantılar iyi çalıştı!

2 test sistemi (ayrı istemciler ve Sql sunucuları) aynı anda etkilendi ve beni bir Microsoft güncellemesinden şüphelenmeye yönlendirdi!


Ben de aynı sorunu yaşadım, çözüm için teşekkürler. Bir VPN aracılığıyla entegre güvenlik kullanarak bağlanıyordum ve varsayılan bağlantı zaman aşımını 15 saniyeden 30 saniyeye çıkarmak sorunu benim için çözdü.
Mark G

1
Setup.exe yeni uygulamayı yükledikten sonra SQL 2014 LocalDB ile bu sorunu yaşadım ve başlatma işlemi yeni veritabanını oluşturmaya çalışıyordu. Bu düzeltme beni kukla tükürmekten kurtardı - teşekkürler Shaun!
Scott

1
Bu benim için de sorunu çözdü. Benim durumumda, VPN ile bağlanıyordum ve ana bilgisayar dosyasına bir giriş ekliyordum. Sorun yalnızca ana bilgisayar adı SSMS ve .NET uygulamalarında kullanılırken ortaya çıktı. IP adresini kullanırken sorun oluşmadı.
Dan

BU CEVAP İÇİN TEŞEKKÜRLER!
Konrad

17

Sorunu Eric gibi çözdüm ama diğer bazı değişikliklerle:

  • Sql Server Configuration Manager'ı başlatın
  • SQL Server Ağ Yapılandırması düğümünü açın
  • MYSQLINSTANCE için Protokoller'e Sol Tıklayın
  • Sağdaki bölmede, TCP / IP'ye sağ tıklayın
  • Özellikler'i tıklayın
  • IP Adresleri sekmesini seçin
  • Listelenen her IP adresi için, Etkin ve Etkin'in her ikisinin de Evet olduğundan emin olun.

VE

  • Listelenen her IP adresi için, TCP Dinamik Bağlantı Noktalarının boş olduğundan ve TCP Bağlantı Noktasının = 1433 (veya başka bir bağlantı noktasının) olduğundan emin olun.
  • Windows güvenlik duvarını açın ve bağlantı noktasının Gelen bağlantılarda Açık olup olmadığını kontrol edin

Çözüm benim için çalışmıyor. Web sitesini ve veritabanını içeren bir sunucum var ve bu sorun üzerinde hiçbir zaman oluşmuyor, ancak web sunucusu veritabanı sunucusundan ayrıldığında bu sorunu buldum
Ibrahim Amer

11

Varlık Veri Modeli kurarken, Visual Studio'dan yerel bir ağdaki bir sunucuya (VPN aracılığıyla) bağlanmaya çalışırken aynı sorunu yaşadım.
Yalnızca TransparentNetworkIPResolution=falsebağlantı dizesini ayarlayarak çözmeyi başardı. VS Add Connection Wizard'da, bunu Gelişmiş sekmesinde bulabilirsiniz.


3
Ayar TransparentNetworkIPResolution = False şeklindedir. NET 4.6.1'den itibaren yeni bir özelliktir ve varsayılan olarak açıktır. Bunu yanlış olarak ayarlamak, bu özelliğin oluşturduğu 500 ms zaman aşımını kaldırır. Daha fazla bilgi için: blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/…
Jorriss

Teşekkür ederim. Bu sorunla ilgili saatler süren araştırma. Bu yanıtı beğenmem gerekiyor. @Jorriss tarafından yapılan yorum, nedenini anlamak için çok yardımcı oldu. Doğru anahtar kelimeye sahip olmak için cevabınızı güncelleyebilirsiniz. Jorriss'in doğru referansı var.
TravisWhidden

5

Barındırılan bir sunucuya bağlanırken aynı el sıkışma sorununu yaşadım.

Ağ ve paylaşım merkezimi açtım ve kablosuz ağ bağlantımda IPv6'yı etkinleştirdim.

görüntü açıklamasını buraya girin


3

Bu hatayı Windows Server 2012 ve SQL Server 2012'de IPv6'yı etkinleştirerek ve gelen bağlantı noktası 1433'ün engelini kaldırarak düzelttim.


1
Bunun doğru bir cevap olamayacağını düşünüyorum çünkü soru "sadece bazen" içeriyor. Engellenen bir bağlantı noktası bununla ilgili soruyu yanıtlamaz.
Magier

3

.NET Framework 3.5 kullanılarak oluşturulan yürütülebilir dosyam, bazı Windows Güncellemeleri kısa süre önce yüklendikten sonra (7 Ağustos 2017 haftası) yaklaşık yarısında bu bağlantı sorunlarını bildirmeye başladı.

Bağlantı hataları, hedef bilgisayara yüklenmiş olan .NET Framework 4.7'den kaynaklanıyordu (Windows Güncellemeleri otomatik yükleme açıktı) - https://support.microsoft.com/?kbid=3186539

.NET Framework 4.7'yi kaldırmak bağlantı sorunlarını çözdü.

Görünüşe göre, .Net Framework 4.6.1 - TransparentNetworkIPResolution'da bir değişiklik var .


2

Bizim durumumuzda kullanılabilirlik kümesi yapılandırması nedeniyle sorun oluştu. Bu sorunu çözmek MultiSubnetFailoveriçin bağlantı dizesinde True olarak ayarlamamız gerekiyordu.

MSDN hakkında daha fazla ayrıntı


1

Aynı sorunu yaşadım , SQL Server Configuration Manager'da 1433 ve tcp / ip bağlantı noktasını açıp / etkinleştirerek çözmeyi başardım ve ardından Sunucuyu Yeniden Başlattım

görüntü açıklamasını buraya girin


1

Benim durumumda yukarıda tüm seçenekler zaten vardı.

Bağlantı Zaman Aşımı = 30 artırılarak çözüldü.SQL Server Management Studio


1

Sorunu çözmek için daha fazla zaman kaybetmeden önce, benim gibi , Windows makinenizi yeniden başlatmayı deneyin . Diğer tüm çözümleri uyguladıktan sonra benim için çalıştı.


0

SharePoint 2010'dan 2013'e geçiş yaptığımda bu sorunu yaşadım. Veritabanı sunucusu IP6'yı yönlendirmeyen bir güvenlik duvarının diğer tarafında olduğundan, daha sonra IP6 kullanmaya çalıştığından ve veritabanına bağlanırken başarısız olduğundan şüphelendim.

Sanırım sorun şimdi çözüldü. Hatalar durmuş gibi görünüyor. Yaptığım şey, SharePoint Sunucularındaki ağ bağdaştırıcısı için IP6'yı (işaretini kaldırarak) devre dışı bırakmaktı.


0

Aynı sorunu yaşadım, ancak statik bir IP adresi kullanarak uzak bir veritabanına bağlanıyordum. Yani yukarıdaki çözümlerden hiçbiri sorunumu çözmedi.

Kullandığım güvenlik Oturumu için doğru Kullanıcı Eşlemesini ekleyememiştim, bu nedenle benim için çözüm, Kullanıcı Eşleme ayarının veritabanıma erişecek şekilde ayarlanmasını sağlamaktı.


0

Kullanıcı hesaplarını zorlamaya çalışan IP adresini engelleyerek / kara listeye alarak bu sorunu çözdü. Çok sayıda başarısız oturum açma denemesi için SQL erişim günlüklerinizi kontrol edin (genellikle 'sa' hesabı için).


0

Bana göre, Windows sunucusundaki güvenlik duvarının varsayılan sql sunucu portu olan 1433 portunu engellediği ortaya çıktı. Bu yüzden, bu bağlantıları kabul etmek için bir gelen kuralı eklemek benim için hile yaptı.


0

Benim durumumda, Persist Security Info=truebağlantı dizesinde kullanıcı ve şifre içeren parametre soruna neden oluyor. falseSorunu çözmek için parametre veya setin kaldırılması .


0

Zorlayıcı bir şey yapmadan önce basit bir SQL Server yeniden başlatmayı deneyin. Düzeltebilir. Benim için yaptı


0

Ne yazık ki, Visual Studio'da yüklü Yerel SQL Server ile ilgili sorun yaşadım ve burada birçok çözüm benim için işe yaramadı. Tek yapmam gereken, şu adrese giderek Visual Studio'mu sıfırlamak:

Denetim Masası> Programlar ve Özellikler> Visual Studio Kurulum Başlatıcı

ve Daha Fazla düğmesine tıklayın ve Onar'ı seçin

Bundan sonra Yerel SQL Sunucuma erişebildim ve yerel SQL Veritabanları ile çalışabildim.


0

Son Microsoft Windows güncellemesinden sonra otomatik olarak çözülen aynı sorunu yaşadım, kimse aynı şeyi yaşıyor mu?


0

Tam sorunu yaşadım, birkaç denemeyi denedim, işe yaramadı, son olarak sistemi yeniden başlattım, iyi çalıştı.


0

"Bağlantı Zaman Aşımı süresi doldu" hatasını izlemek için lütfen şunlardan emin olun:

  • SQL Server Database Engine örneği çalışıyor ve çalışıyor.
  • SQL Server Browser hizmeti çalışıyor.
  • TCP / IP etkinleştirildi.
  • Sunucu adı doğru yazılmıştır.
  • Uygulama sunucusundan veritabanı sunucusuna SQL Server Örnek Bağlantısı Nasıl Kontrol Edilir bölümünde belirtildiği gibi ağ sorunları yoktur.
  • Veritabanı Motoru örneğinin TCP / IP bağlantı noktası bir güvenlik duvarı tarafından engellenmez.
  • İstemci ve sunucu aynı ağ protokolünü kullanacak şekilde yapılandırılmıştır.

Daha fazla ayrıntı için lütfen Bağlantı Zaman Aşımı Süresi Doldu seçeneğini kontrol edin . Giriş öncesi el sıkışma onayını kullanmaya çalışırken zaman aşımı süresi geçti


Bu durumlardan hangisinin aralıklı hatalarla ilgisi var?
RonJohn

Üyeliğinizi ifşa etmek için lütfen düzenleyin, gereklidir . Teşekkürler.
Maximillian Laumeister

0

Daha önce kabul edilen yanıta rağmen buraya bir yanıt eklemek. Senaryomun DNS olduğu doğrulandı. Daha spesifik olarak, oturum öncesi anlaşma sırasında bir dns zaman aşımı. DNS adından IP Adresine geçerek (veya Hosts dosya girişini kullanarak), sorunu atlarsınız. Otomatik ip çözünürlüğünü kaybetme pahasına da olsa.

Örneğin, bir Bağlantı Dizesinin zaman aşımı değeri tam bir dakika için 60 olarak ayarlanmış olsa bile, yine de denemenin birkaç saniye içinde gerçekleşebilir. Hangisi, neden belirtilen zaman aşımı süresinden önce zaman aşımına uğradığını sormaya götürür? DNS.

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.