TL; DR; SQL Server örneğiniz, çalışmayan dinamik bağlantı noktaları kullanıyor. SQL Server'ı 1433 numaralı statik bağlantı noktasını kullanmaya zorlayın.
Tam Ayrıntılar : Öncelikle, varsayılan ve adlandırılmış örnek veya yalnızca adlandırılmış örneklerin (bu benim durumum) bir karışımını kullanıyorsanız bu sorun daha olasıdır.
Anahtar kavram : Bilgisayara yüklenen her Microsoft SQL Server örneği, gelen bağlantı isteklerini dinlemek için farklı bir bağlantı noktası kullanır. SQL Server'ın varsayılan örneği # 1433 numaralı bağlantı noktasını kullanır. Adlandırılmış örnekleri yüklediğinizde, adlandırılmış SQL Server örneğine karşılık gelen Windows hizmetinin başlatılması sırasında karar verilen dinamik bağlantı noktalarını kullanmaya başlarlar.
Kodum, VM'imdeki tek adlandırılmış SQL Server örneğine bağlanamıyordu (hata kodu 40 ile). Olası çözümleri aşağıda deneyebilirsiniz:
1. Çözüm : SQL Server örneğine bağlanmaya çalışan istemci kodu, adlandırılmış örneğinizin gelen bağlantıları dinlediği bağlantı noktası numarasını bulmak için SQL Server tarayıcı hizmetinden yardım alır. Bilgisayarınızda SQL tarayıcı hizmetinin çalıştığından emin olun.
Çözüm # 2 : Adlandırılmış SQL Server örneğinizin aşağıdaki anlık görüntüde gösterildiği gibi SQL Server yapılandırma yöneticisinden kullandığı bağlantı noktasını (sarı renkte) kontrol edin:
Bu bağlantı noktası numarasını açıkça bağlantı dizenizde veya sqlcmd
aşağıda gösterilen şekilde kullanın :
sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt
Çözüm # 3 : Adlandırılmış örneğinizi, varsayılan örnek tarafından kullanılan # 1433 numaralı bağlantı noktasını kullanmaya zorlayın. Bunun, varsayılan SQL Server örneği zaten 1433 numaralı bağlantı noktasını kullanarak kullanacağı için bilgisayarınızda herhangi bir varsayılan SQL Server örneğiniz yoksa işe yarayacağını unutmayın. Aynı bağlantı noktası numarası iki farklı Windows hizmeti tarafından kullanılamaz.
Mark TCP Dynamic ports
boş ve tarla TCP Port
1433 için sahada.
Bağlantı dizenizdeki bağlantı noktası numarasını aşağıda gösterildiği gibi değiştirin:
sqlcmd -s mymachinename\instanceName -i deleteDB.sql -o SQLDelete.txt
VEYA
sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt
Not : TCP / IP ayarlarındaki her değişiklik, karşılık gelen Windows hizmetinin yeniden başlatılmasını gerektirir.
İlginç bir şekilde aynı hatayı yeniden oluşturmak için dinamik bağlantı noktası ayarına geri döndüğümde hatayı çözdükten sonra yeterli değildi. Emin değilim neden.
SQL Server'ın dinamik bağlantı noktaları hakkında daha fazla bilgi edinmek için lütfen aşağıdaki ilginç konuları okuyun:
Birden çok örnekte SQL Server Portu nasıl yapılandırılır?
Dinamik Bağlantı Noktası ne zaman “dinamik” olur?
TCP dinamik bağlantı noktası ne zaman ve TCP Bağlantı Noktası ne zaman kullanılır?
Bu blogdan sorunumun çözümüne yol açtım .