Linked Server Nedir?

Mehmet Can Tas
4 min readJan 18, 2021

Merhaba,

Bu makalede Linked Server nedir ve ne için kullanılır kısaca ondan bahsedeceğim.

Öncelikle ihtiyacımız olan şeyi size anlatırsam sanırım daha doğru bir başlangıç yapmış olurum. Kendi mağazalarımızın yaptığı satışları, günlük ciroları vb. bilgileri takip ettiğimiz şirket içi bir sistemimiz mevcut. Bu sisteme ek olarak günlük satılan ürünleri de göstermemiz istendi. Ürünlerimiz ve raporlama sistemi iki farklı sunucudaki iki farklı veri tabanında bulunuyordu. Ancak geliştirdiğimiz projenin içersinde herhangi bir ürün listesi mevcut değildi. Ürünlerimizin hepsini bir veri tabanından alıp başka bir veri tabanına kopyalamak yerine bu işlemi daha basit nasıl yapabiliriz diye düşünmeye başladık. Sonunda bulduğumuz çözüm Linked Server oldu.

Bu Linked Server dediğimiz şey tam olarak nedir?

Linked Server SQL Server ile uzaktaki bir veri kaynağından veri okumanıza ya da sorgu çalıştırmanıza olanak sağlayan bir özellik. A ve B veri tabanları arasındaki tablolarda sanki aynı veri tabanındaki tablolarda yapabildiğiniz gibi JOIN vb. işlemleri gerçekleştirebilirsiniz. Bahsettiğimiz veri tabanları aynı sunucu üzerinde olabildiği gibi farklı sunucularda da olabilir.

Nasıl kullanılır?

Biz örneğimizi aynı sunucu üzerinde bulunan 2 farklı veri tabanı ile gerçekleştireceğiz. Örneğimiz için 2 tane veri tabanı oluşturalım birisi ECommerce adında diğeri de Portal adında olsun.

Veri tabanlarımızı oluşturduktan sonra sol menüdeki Server Objects menüsü altındaki Linked Servers seçeneğine sağ tıklayarak New Linked Server seçeneğine tıklayarak yeni bir Linked Server oluşturma ekranını açıyoruz.

Açılan pencere aşağıdaki gibi olacaktır. Burada Linked server kısmına bağlantımızın ismini giriyoruz. Local makinede çalıştığım için adres olarak yine localhost’a bağlanıyorum.

Siz uzaktaki bir veri tabanı ile çalışıyorsanız o zaman bağlantı adresinizi ona göre değiştirmeniz lazım.

Yukarıdaki alanları sırasıyla inceleyecek olursak;

  • Linked Server : Oluşturduğumuz Linked Server için bir isim belirlediğimiz alan.
  • Provider : Burada bağlanmak istediğiniz veri tabanı için bir provider seçmelisiniz. Biz SQL Server ile çalışacağımız için Microsoft OLE DB Provider for SQL Server seçeneğini seçiyoruz.
  • Product name : Bu kısıma istediğiniz ismi verebilirsiniz. Benim tavsiyem eğer farklı sunucudaki bir veri tabanı ile çalışıyorsanız onun sürümünü yazmanızdan yana olacaktır. Örn: MSSQL 2012 Standard
  • Data source : Bağlantı yapacağımız veri tabanı sunucusunun adresi
  • Provider String : Buraya bağlanmak istediğiniz diğer veri tabanının ya da Excel dosyasının bilgisini girebilirsiniz. Örn: Excel 97–2003 sürümleri arası için Excel 8.0 yazabilirsiniz.
  • Catalog : Bağlanmak istediğimiz veri tabanının adı.

Bilgilerimizi düzenledikten sonra OK butonuna tıkladığımızda aşağıdaki hata mesajı karşımıza çıkacaktır.

Bu sorunu çözmek için Security sekmesinden “Be made using the login’s current security context” seçeneğini seçmemiz gerekiyor.

Eğer uzak sunucudaki bir veri tabanı ile çalışacaksanız Be made using this security context seçeneğini seçtikten sonra remote login ve remote password alanlarını doldurmalısınız.

Security kısmında ayrıca Local login, Remote user ve Remote password alanlarının olduğunu farketmişsinizdir. Buradaki Local login bölümü sizin linked server oluşturduğunuz veri tabanında varolan kullanıcıları seçebileceğiniz/yazabileceğiniz alan. Remote user ve password bölümü ise uzaktaki erişmek istediğiniz sunucuda yer alan kullanıcı ve o kullanıcının şifresini gireceğiniz bölüm. Bizim iki veri tabanımız da localde olduğundan dolayı herhangi bir ayar yapmama gerek yok.

Buradaki seçenekleri yakından inceleyelecek olursak;

  • Be made without using a security context : Excel dosyası gibi herhangi bir authentication işlemi gerektirmeyen bağlantılarda kullanılır. Fakat farklı bir SQL Server ile çalışırken Not be made ile aynı şekilde çalışmaktadır ve hata almanıza sebep olabilir.
  • Be made using the login’s current security context : Bu seçenekte ise local login bilgileri ile uzakta olan sunucuya giriş yapmak için kullanılır. Örneğin eğer local sunucuda Windows Authentication seçeneği kullanılıyorsa uzak sunucuda da Windows Authentication seçeneğinde kullanılan bilgilerle giriş yapmayı deneyecektir.
  • Be made using this security context : Bu seçenekte ise remote login ve remote password alanına girilen bilgiler ile sunucuya giriş yapılacaktır. Burada girilen bilgiler karşıda bağlanılmaya çalışılan sunucuda mevcut değilse kullanıcı olmadığına dair bir hata ekranı karşınıza çıkar.

Bilgilerimizi doldurup kaydettikten sonra sorgu çalıştırmak için hazır hale gelmiş oluyoruz. Sorgu çalıştırmanın iki farklı yöntemi mevcut. Birisi OpenQuery dediğimiz yöntem diğeri ise Four-part Name adındaki yöntem. İlk olarak Four-part Name örneğine ardından OpenQuery örneğine bakalım ve makalemizi sonlandıralım.

Four-part Name :

SELECT Name FROM [LOCALSERVER].ECommerce.dbo.Product

OpenQuery :

SELECT * FROM Openquery(LOCALSERVER, ‘select * from Product’)

--

--