MSSQL Server Synonym Nedir

Bu makalede sql server üzerinde bulunan veritabanlı bazlı çalışan Synonym konusunu ele almış olacağız. Önceki yapmış olduğumuz Aliases makalesinin bir benzeri olarak karşımıza çıkmaktadır. Aliases makalesini sayfamızda okumanızı öneririm. Synonym veritabanı altında çalışan tablolarımızın son kullanıcının görmeyeceği bir şekilde farklı bir isim verilerek kullanmasını sağlayan bir özellik ve aynı zamanda veritababıadı.schemeadi.tabloadı şeklinde ifade yazmamıza gerek kalmadan kullandığımız bir özellik olarak karşımıza çıkmaktadır. Büyük kod parçacıklarında kullanıcının veritabanı adı,şema adı,tablo adına gerek kalmadan bu özelliği kullanması arka planda yapılacak herhangi bir değişiklik kodlarımızı etkilemeyecek bir şekilde çalışmaktadır. Genellikle tablo,view,function ve stored procedure’lerde kullanılmaktadır.

Normalde bir sorgu çalıştırdığımızda aşağıdaki gibi veritabanı adı şema adı ve tablo adı şeklinde belirtilmektedir.

SELECT * FROM [AdventureWorks2014].[Person].[Person]

Şimdi yapacağımız Synonym sayesinde   artık uzun uzadıya veritabanı adı şema adı ve tablo adı yazmamıza gerek kalmayacaktır.

Veritabanı altında bulunan Synonym ifadesine sağ tıklayıp New Synonym…  ifadesine tıklıyoruz.

Gelen ekranda Synonym name kısmında sorgularımızda tablomuzu çağıracağımız ifadeyi giriyoruz. Sizde kendi yapınıza göre farklı bir isim verebilirsiniz. Synonym schema kısmında oluşturacağımız Synonym  yapının şema yapısını belirtiyoruz. Ben dbo olarak belirttim sizde farklı bir şema belirtebilirsiniz. Eğer yeni bir scheme oluşturmak isteniyorsa Database altında bulunan security sekmesinde Schemas kısmından oluşturulabilir.

Server name kısmında veritabanımızın bulunduğu sunucu ve instance adını yazmamız gerekmektedir.

Database name kısmında hangi veritabanı üzerinde işlem yapılacaksa ilgili veritabanı seçilmesi gerekmektedir.

Schema kısmında veritabanı altında Synonym yapacağımız tablonun şemasını girmemiz gerekmektedir.

Object type kısmında table,view,function ve stored procedure’lerden birini seçiyoruz.

Object name kısmında tablomuzun gerçek adını yazmaktayız.

General sekmesinden sonra Permissions bölümünde  bu Synonym yapımızda  veritabanı altında bulunan  yetkili herhangi bir kullanıcıya bu synonym üzerinde yetkilendirebiliriz.

Not: Synonym üzerinde yapılan INSERT, UPDATE, DELETE işlemleri, gerçek tabloya doğrudan yansır.Çünkü synonym sadece bir yönlendirme yapısıdır ve asıl nesneye erişimi sağlar

Yukarıda yapılan işlemin script’i:

USE [AdventureWorks2014]
GO
CREATE SYNONYM [dbo].[YU] FOR [S1\TEST23].[AdventureWorks2014].[Person].[Person]
GO

Yukarıdaki şekilde Synonym yapımızı oluşturduktan sonra şimdi uygulamalı bir şekilde oluşturduğumuz  Synonym yapısına select çekelim.

SELECT * FROM [dbo].[YU]

Yukarıda Not bölümünde Synonym yapımızın üzerinde yapılan değişikliklerin gerçek tabloyada aktarılacağını söyleşmiştik. Şimdi uygulamalı bir şekilde yapalım.

UPDATE [dbo].[YU]  SET FirstName = 'YUNUSYUCEL' WHERE BusinessEntityID = 1

İlgili değerimizin güncellendiğini görmüş oluyoruz.

Synonym  yapısının Dezavantajlar:
Performans Kazancı Sağlamaz, Hatta Ekstra Maliyet Getirebilir. Synonym, doğrudan bir nesneye yönlendirdiği için performans açısından ekstra bir hız kazandırmaz. Bazı durumlarda SQL Server execution plan’ını oluştururken synonym’in yönlendirdiği nesneye ulaşmada ek bir işlem yapar.
Synonym’in yönlendirdiği nesne değişirse veya silinirse, SQL Server bunu fark etmez ve hata alırsın.
Örneğin, synonym’in gösterdiği tabloyu silersen ve sonra synonym üzerinden sorgu çalıştırırsan şu hatayı alırsın:

Msg 208, Level 16, State 1, Line 1
Invalid object name ‘YU’.


Index ve Performans Tuning Yapılamaz. Synonym’in kendisine özgü index veya performans ayarı yapılamaz. Gerçek tablo veya view üzerinde indeksleme ve optimizasyon yapmalısın.

Bu makalede mssql server Synonym   yapısını görmüş olduk. Başka bir makalede görüşmek dileğiyle.

Sabır ve namazla yardım dileyin. Bu, şüphesiz, huşû duyanların dışındakiler için ağır (bir yük)dır. Bakara Suresi, 45. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir