Bu makalemizde Sql Server Configuration Manager içerisinde yer alan Sql Server Network Configuration sekmesini inceleyeceğiz. Genelde bir bağlantı sorunu olduğunda akla 2 şey gelmektedir: client'ın ağ yapılandırması veya client'ın ve server'ın ağ yapılandırmalarının uyumsuzluğu.
İsterseniz daha yakından inceleyelim bu konuyu. Sql Server'ın kullandığı bir yapıya bakalım: NetLibraries (ya da kısaca NetLibs). Peki nedir bu NetLibs..? NetLibs, Sql Server için uygun network protokolünü implemente eden DLL'lerdir. Birazdan inceleyeceğimiz protokoller için NetLibs'ler mevcuttur. NetLibs dediğimiz kavram, Sql Server ile sisteminizdeki diğer nesneler arasında soyut bir katmandır aslında. Burada NetLibs'e bir virgül koyup protokollere geçeceğim arkadaşlara. Tekrar bu noktaya geri geleceğiz.
Protokoller:
Protokol dediğimiz şey, iletişimin kurallarını belirleyen yapılardır. 2 farklı bilgisayar aynı ya da uyumlu protokol kullanarak iletişim kurabilirler. Örnek vermek gerekirse, bir Japon ile yazıştığınızı düşünün. Eğer o Türkçe bilmiyorsa, siz de Japonca bilmiyorsanız anlaşamazsınız değil mi. Eğer ortak bilinen bir dil varsa, örneğin İngilizce, bu şekilde iletişim kurabilirsiniz. İngilizce de protokol olmuş oluyor bir nevi. Sql Database Engine'e bağlanmak için en azından bir protokolü aktif tutmanız gerekmektedirGördüğünüz üzere 4 adet protokol mevcut. Bunlar:
- 1.Shared Memory
2.Named Pipes
3.TCP/IP
4.VIA
Sadece Shared Memory varsayılan olarak aktiftir. Daha önceki versiyonlarda varsayılan olarak TCP/IP de aktifti. Ancak bu güvenlik açığı yaratmakta olduğundan bundan vazgeçildi. Akla gelebilecek yegane soru da:"Neden hepsini aktifleştirmiyoruz" olacaktır. İlk nedenini az önce söyledik. Bir diğer nedeni de, bunun iletişimde yavaşlama yaratmasıdır.
Şimdi bunları yakından inceleyelim.
Named Pipes:
TCP/IP olmadığında ya da TCP/IP altındaki server'ları isimlendirmeye izin veren DNS olmadığı durumlarda kullanışlı olabilir (ancak isim yerine IP ile bağlandığınızda böle bir sorun da kalmaz). Named Pipes kullanımı azalmaktadır. Local ağlarda kullanılır daha çok. Bir process'in çıktısı ikinci bir process'in girdisi şeklindedir iletişim. İkinci process local(aynı makine) de olabilir, uzakta da olabilir(remote).TCP/IP:
En çok kullanılan protokoldür. Sql Server'a uzaktan bağlanırken kullanabilirsiniz. Çünkü IP kullanan tek protokoldür. Ağ trafiği yönlendiren ve gelişmiş güvenlik özelliklerinin bir standartını bulundurur.Shared Memory:
En basit ve ayar gerektirmeyen protokoldür çünkü client ile Server aynı makinededir. Varsayılan olarak aktiftir. Client, server'ın veriyi sakladığı bellek dosyasına direkt erişir (çünkü aynı makinede). Dolayısıyla bu yöntem oldukça hızlıdır. Daha ziyade diğer protokollerde problem yaşadığında kullanılır. Microsoft bu konuda bir de uyarı yapıyor: Microsoft Data Access Components (MDAC) 2.8 ve öncesini kullananların bu protokolü kullanamayacağını, kullanmaya kalkışsa bile Named Pİpes protokolüne yönlendirilecekleri belirtiliyor.VIA:
Virtual Interface Adapter. Özel uygulamaları değişkenlik gösterir. İki sistem arasındaki bağlantıya özel bir ağ ara yüzüdür ancak çok yüksek performans gösterir. Bunun sebebi de, özel olarak o bağlantı için tasarlamış donanımdır.Protokoller bu şekilde arkadaşlar. Şimdi ara verdiğimiz konuya geri gidelim: NetLibs.Sql Server'daki NetLibs'ler:
- 1.Shared Memory
2.Named Pipes
3.TCP/IP
4.VIA
Gördüğünüz gibi bu protokollerin aynı zamanda NetLibs'leri var. NetLibs, client uygulaması ile ağ protokolü arasında bir yalıtkan gibidir. Pek tabidir ki server tarafında da aynı mekanizma mevcuttur.
Hem client hem de server'da birbirleriyle uyumlu NetLibsler seçilmelidir. Eğer uyumsuz olursa Specified Sql Server Not Found hatasını alırsınız.
NetLibs kavramının iyice oturması için şöyle anlatayım: Eğer network TCP/IP protokolünü kullanıyorsa, Sql Server da TCP/IP NetLib'ini kullanır ki TCP/IP ile nasıl konuşacağını, iletişim kuracağını bilebilsin.
Kullanılan sürücü türünden (Sql Native Client, ODBC, OLEDB) bağımsız olarak, her zaman NetLib ile konuşan bir sürücü olacaktır. İstemci uygulaması sürücü ile konuşur. Sürücü de istemci tarafındaki NetLib'i çağırır. NetLib de uygun ağ protokolü ile(hangisi kullanılıyorsa), veriyi server tarafındaki NetLib'e iletir. Server tarafındaki NetLib de istekleri server'a aktarır. Server da buna cevap verir. Bu cevap da aynı yoldan geri döner.
NetLiblerle ilgili son bir konu daha var arkadaşlar. Sql Server'ı başlattığınızda karşınıza bir ekran çıkıyor bildiğiniz gibi. Orada Server Name alanı var. Eğer orada localhost anlamına gelen bir değer girerseniz(. ya da 127.0.0.1 gibi), Sql Server, client ile aynı bilgisayarda olduğundan, bağlantı için seçilen NetLibs ne olursa olsun, Shared Memory NetLibs kullanılacaktır. Eğer bu alana gerçek server adını girerseniz, server ile iletişiminiz aynı makina üzerinde olduğuna bakılmaksızın TCP/IP NetLibs'ini kullanacaktır.
Bir makalemizin daha sonuna geldik. Tekrar görüşene dek hoşça kalın..
Gürkan Alkan
İstanbul Üniversitesi Bilgisayar Mühendisliği
Kaynaklar: Robert Vieira - Professional SQL Server 2005 Programming
http://msdn.microsoft.com/en-us/library/ms187892.aspx
1 yorum:
Bu konu hakkındaki nadir yazılardan biri.Teşekkürler arkadaşım.
Yorum Gönder