SQL Server Replication Nedir?
Replication High Availability çözümlerinden biridir. Günlük hayatta bu amaçla kullanıldığını çok görmedim. HA(High Availability) çözümü olarak Always ON dünyamıza girmeden önce SQL Server Failover Cluster ya da Database Mirroring kullanırdık. Artık genellikle Always ON kullanıyoruz.(Ben diskim yeteri kadar olduğu sürece Always On kullanmayı tercih ediyorum)
Replication’ı genelde raporlama amaçlı başka bir sunucuya tablo ya da tabloların düzenli olarak aktarılması gerektiğinde kullanırız. Replication’da verileri aktardığımız yerde asıl sunucudan bağımsız olarak index tanımlayabiliyoruz. Bu da raporlama amaçlı kullanma amacımızı pekiştiriyor. Always ON’da secondary’de, primary’den bağımsız olarak index tanımlayamıyoruz.
Replication’ı bizim için diğer High Availability seçeneklerinden ayıran en önemli özelliklerden biride tablo bazında replication yapılabilmesidir. Diğer HA çözümlerinde hatırlarsanız böyle bir şey yapamıyorduk. Diğer HA çözümleri için aşağıdaki makalelerimi okuyabilirsiniz.
“Database Mirroring Nedir ve Nasıl Yapılır? Mirroring Hataları ve Çözümleri..“,
“SQL Server Always ON AG(Availability Group) Oluşturmak“,
“SQL Server Failover Cluster Kurulumu“,
“SQL Server Log Shipping Kurulumu“
Replication’ı kullanmamız gereken başka durumlar olabilir. Mesela bir merkezi veritabanından dağınık yapıdaki abonelere düzenli olarak veri aktarılması gereken durumlar olabilir. Bu gibi durumlarda tercih edebiliriz.
Replication’da sadece merkezi veritabanından abone olarak niteleyeceğimiz dağınık lokasyonlardaki istemcilere veri dağıtılmaz. Bazı durumlarda abonelerden merkezi veritabanına veri aktarılması ve verinin merkezi lokasyonda toplanması gerekebilir.
Replication’ın birkaç çeşidi vardır. Yukarda anlattığımız senaryoları aşağıdaki replication tipleriyle gerçekleştirebilirsiniz.
- Transactional Replication
- Peer To Peer Transactional Replication
- Snapshot Replication
- Merge Replication
Yukardaki replication tiplerinin detaylarını ve nasıl gerçekleştirildiklerini aşağıdaki makalelerimde bulabilirsiniz.
“Transactional Replication Kurulumu“,
“Peer to Peer Transactional Replication Kurulumu“
“Snapshot Replication Kurulumu“,
Replication’ı anlayabilmek için Replication’ı oluşturan kavramların ne olduklarını bilmemiz gerekir. Aşağıda bu kavramlara ait açıklamaları bulabilirsiniz.
Article(Makele) |
Veritabanındaki bir objedir.(Table,view,stored procedure vb.) |
Publication(Yayın) |
Bir veya birden fazla article(makale) dan oluşan bir koleksiyondur. Publication’ı bir gazete olarak, article’ları da bu gazete de yayınlayan haberler, yazılar olarak düşünebilirsiniz. |
Subscriber(Abone) |
Replike olan datayı alan sql server instance’ıdır. Gazete, yazı örneğini devam ettirecek olursak gazeteye abone olan üyelerdir. |
Publisher(Yayıncı) |
Yayınlanacak olan publication(yayın)’ları Subscriber(Abone)’lara dağıtılması için üzerinde hazır bulunduran instance’tır.Gazete’nin ana binası olarak düşünebiliriz. |
Distributor (Dağıtıcı) |
Bir ya da birden fazla publisher(yayıncı)’ın deposu gibi davranan instance’tır. Örneğimize devam edecek olursak publisher gazetenin ana binası ise, Distributor(dağıtıcı) basılan gazetelerin depolandığı yerdir. Genelde Publisher ve Distributor aynı instance üzerinde olur. Buna local Distributor denir. Distributor farklı bir instance üzerinde ise de remote distributor denir.
Her publisher, distributor’da “distribution” isimli bir veritabanı ile ilişkilidir. “distribution” veritabanında repkilasyon durumu, publisher metadata’sı ve bazı durumlarda verinin publisher’dan subscriber’a teslim edilmesi işlemleri yapılır. Örneğimizi devam ettirirsek Gazetenin ana binasının içinde gazete deposu olduğunu ve bu deponun içinde bir stok takip personeli olduğunu düşünün. Bu depo Distributor. Bu depoda çalışan stok takip personelide “distribution” veritabanı. Stok takip personelinin görevleri bazı durumlarda(replication tipine göre) gazeteyi alıp abonelere de götürebiliyor. |
Subscribtion(abonelik türü) |
Publication’ın hangi yolla ve ne zaman publisher’dan subscriber’a aktarılacağını belirler. İki türü vardır.
Push Subscription: Subscriber’dan bir istek gelmeden yayınların subscriber’a iletilmesi durumudur. Örneğimize bakacak olursak Stok Takip Personeli bu abonelik türünde biraz yoğun olacak.. Bütün gazeteleri abonelere dağıtması gerekiyor.
Pull Subscription: Subscriber’ın gazeteyi publisher’dan talep etmesi gerekiyor. Örneğimize bakacak olursak Stok Takip Personelimizin bu subscription türünü sevdiğini söyleyebiliriz. Çünkü dağıtım işinden kurtulmuş oluyor. Aboneler depoya gelip gazetelerini kendileri alıyor gibi düşünebiliriz. |
Replication asıl veritabanında oluşan değişiklikleri izleyerek değişen dataların diğer instance’lardaki veritabanına aktarılmasını sağlar. Bu işlemi agent adını verdiği bazı programlar ile gerçekleştirir. Bu agentları ve hangisinin ne iş yaptığını aşağıda bulabilirsiniz.
Snapshot Agent |
Yukarda bahsettiğimiz bütün replication tiplerinde kullanılır. Yayınlanacak tabloların ve diğer objelerin schema bilgilerini ve başlangışta bu tablolarda/objelerde bulunan verileri subscriber’a aktarılması için hazır hale getirir. Snapshot dosyasını(aktarılacak tablonun schema bilgisi ve tablonun içinde o anda mevcut olan datanın fotografı gibi düşünebilirsiniz) ve senkronizasyon durumunu “distribution” veritabanında saklar. Distributor üzerinde çalışır. |
Log Reader Agent |
Sadece Transactional Replication tipinde kullanılır. Publisher üzerindeki transaction log dosyasında replike edilmek üzere işaretlenmiş olan transaction’ları Publisher’dan alır ve “distribution” veritabanına aktarır. Transactional Replication kullanılarak publish edilen her veritabanının kendi Log Reader Agent’ı vardır. Distributor üzerinde çalışır. |
Distribution Agent |
Snapshot ve Transactional Replication tiplerinde kullanılır. Başlangıçta alınan snapshot’ı(aktarılacak tablonun schema bilgisi ve tablonun içinde o anda mevcut olan datanın fotografı gibi düşünebilirsiniz) ve “distribution” veritabanında tutulan transaction’ları subcribers’lara aktarır. |
Merge Agent |
Merge Replication tipinde kullanılır. Başlangıçta alınan snapshot’ı(aktarılacak tablonun schema bilgisi ve tablonun içinde o anda mevcut olan datanın fotografı gibi düşünebilirsiniz) subscriber’lara aktarır ve bütün subscriber’larda gerçekleşen veri değişikliklerini uyumlu bir şekilde bir araya getirir. “Merge Replication Kurulumu” isimli makalemi okuduğunuzda ne demek istediğimi daha net anlayacasınız. |
Queue Reader Agent |
Queued updating seçeneği aktif hale getirilirse Transactional Replication tipinde kullanılır. Subscriber’da yapılan değişikliklerin Publisher’a geri aktarılmasından sorumludur. |