SQL Server Replication, verilerin ve veritabanı nesnelerinin bir veritabanından diğerine kopyalanması ve ardından tutarlılığı sağlamak amacıyla bu verilerin senkronize edilmesi işlemidir. Genellikle veriyi farklı lokasyonlara dağıtmak, raporlama yükünü ana sunucudan ayırmak veya yedekli bir yapı kurmak için tercih edilir.
Replication kullanımının temel amacı “doğru veriyi, doğru zamanda, doğru yere” ulaştırmaktır. Temel kullanım senaryoları şunlardır:
- Yük Dengeleme (Load Balancing): Okuma (Read) operasyonlarını (raporlama, analiz) ana sunucudan (Publisher) alıp kopyalara (Subscriber) aktararak ana sunucunun performansını artırmak.
- Veri Dağıtımı: Merkezdeki veriyi şubelere veya uzak ofislere taşımak.
- Çevrimdışı Çalışma: Saha çalışanlarının veriyi kendi yerel cihazlarına alıp, internete bağlandıklarında değişiklikleri merkeze göndermelerini sağlamak.
- Veri Konsolidasyonu: Farklı şubelerden gelen verileri tek bir merkezde toplamak.
Avantajları Nelerdir:
- Esneklik: Veritabanının tamamını değil, sadece belirli tabloları, hatta tabloların belirli satır ve sütunlarını (Filtering) replike edebilirsiniz.
- Düşük Gecikme: Transactional Replication ile veriler milisaniyeler içinde diğer sunucuya aktarılır.
- Bağımsızlık: Abone (Subscriber) olan sunucu, ana sunucudan bağımsız olarak kendi verisi üzerinde işlem yapabilir (özellikle Merge Replication’da).
- Heterojen Destek: SQL Server dışındaki veritabanlarına da (belirli sınırlar dahilinde) veri gönderilebilir.
SQL Server Replication Türleri ve İşlevleri
1. Transactional Replication
En yaygın kullanılan türdür. Ana sunucuda yapılan her bir işlem (INSERT, UPDATE, DELETE) gerçek zamanlıya yakın bir şekilde aboneye iletilir.
- Kullanım: Yüksek performanslı raporlama sunucuları oluşturmak için idealdir.
- Mantık: Log Reader Agent, Transaction Log’daki değişiklikleri okur ve dağıtıcıya iletir.
2. Snapshot Replication
Belirli zaman aralıklarıyla verinin o anki halinin topluca karşı tarafa gönderilmesidir.
- Kullanım: Verinin seyrek değiştiği ve anlık güncelliğin kritik olmadığı durumlar (örneğin fiyat listeleri).
- Mantık: Mevcut veriyi tamamen siler ve yeni halini üzerine yazar.
3. Merge Replication (Birleştirmeli Çoğaltma)
Hem ana sunucuda hem de abonede veri değişebilir. Değişiklikler daha sonra birleştirilir.
- Kullanım: İnternet bağlantısı sürekli olmayan saha operasyonları (Laptop kullanıcıları gibi).
- Mantık: Çakışma çözme (Conflict Resolution) mekanizması vardır; aynı kayıt değişirse hangisinin üstün geleceğine karar verilir.
4. Peer-to-Peer Replication
Transactional Replication’ın gelişmiş bir türüdür. Çoklu düğüm (node) üzerinde verinin hem okunup hem yazılmasını sağlar. Genelde global ölçekli uygulamalarda kullanılır.
Replication Mimarisini Oluşturan Temel Bileşenler
Replication yapısı, yayıncılık dünyasındaki terimlerle ifade edilir:
- Publisher (Yayıncı): Kaynak verinin bulunduğu sunucu.
- Distributor (Dağıtıcı): Veriyi yayıncıdan alıp aboneye ileten “postacı” görevindeki sunucu. Metadata ve geçmiş bilgileri distribution veritabanında tutar.
- Subscriber (Abone): Veriyi alan hedef sunucu.
- Articles (Makaleler): Replike edilen en küçük birimler (Tablo, View, Stored Procedure).
- Publication (Yayın): Bir veya birden fazla Article’ın bir araya gelmiş hali.
- Subscription (Abonelik): Yayının bir aboneye nasıl ulaştırılacağını belirleyen kurallar (Push veya Pull).
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.
Diğer High Availability (HA) Seçeneklerinden Farkı
SQL Server Replication bir “High Availability” (Yüksek Erişilebilirlik) çözümü olarak tasarlanmamıştır, ancak bu amaçla destekleyici olarak kullanılabilir.
| Özellik | Replication | Always On Availability Groups (AG) | Log Shipping |
| Kapsam | Nesne bazlı (Tablo, View) | Veritabanı bazlı | Veritabanı bazlı |
| Veri Değişimi | Abone üzerinde veri değiştirilebilir | Sadece Read-Only (Secondary) | Standby modunda Read-Only |
| Otomatik Failover | Yok (Manuel müdahale gerekir) | Var (Otomatik) | Yok (Manuel) |
| Şema Gereksinimi | Primary Key zorunluluğu (Transactional) | Yok | Yok |
| Kullanım Amacı | Veri dağıtımı ve raporlama | Yüksek erişilebilirlik ve DR | Felaket kurtarma (DR) |
Eğer ihtiyacınız olan şey veritabanının bir kopyasını başka bir yerde yedeklemekse Always On veya Log Shipping daha mantıklıdır. Ancak, “Ben sadece şu 10 tablonun raporlanmasını istiyorum” veya “Şubeler veriyi kendi lokallerinde güncellesin, akşam merkeze aksın” diyorsanız, SQL Server Replication rakipsiz bir çözümdür.
SQL Server Replication, veriyi bir yerden bir yere taşırken “kopyala-yapıştır” mantığından ziyade, iş akışını yöneten özel servisler kullanır. Bu servisler genellikle SQL Server Agent altında birer “job” olarak çalışır.
1. Snapshot Agent (Kuruluş Uzmanı)
Replication’ın “temel atma” ekibidir. Tüm replication türleri (Transactional, Merge, Snapshot) hayatına bununla başlar.
- Görevi: Yayınlanacak tabloların yapısını (schema) ve o anki mevcut verisini bir paket haline getirir. Buna “Snapshot dosyası” diyoruz.
- Nerede Çalışır: Distributor (Dağıtıcı) sunucu üzerinde çalışır.
- Kritik Detay: Veriyi doğrudan hedefe göndermez; veriyi bir klasöre (Snapshot Folder) yazar ve bu bilgiyi distribution veritabanına kaydeder.
2. Log Reader Agent (İz Sürücü)
Sadece Transactional Replication dünyasında karşımıza çıkar.
- Görevi: Publisher üzerindeki Transaction Log (.ldf) dosyasını sürekli tarar. Replike edilmek üzere işaretlenmiş (INSERT, UPDATE, DELETE gibi) işlemleri yakalar ve bunları Distributor üzerindeki distribution veritabanına taşır.
- Kritik Detay: Her yayınlanan (published) veritabanı için arka planda çalışan ayrı bir Log Reader Agent vardır. Bu, performansın bölünmemesini sağlar.
3. Distribution Agent (Sevkiyat Birimi)
Verinin son durağa ulaştırılmasından sorumludur. Snapshot ve Transactional Replication‘ın lojistik sorumlusudur.
- Görevi: Snapshot Agent’ın hazırladığı başlangıç paketini ve Log Reader’ın yakaladığı anlık işlemleri alır, Subscriber’a (Abone) yazar.
- Nerede Çalışır: Abonelik tipine göre (Push veya Pull) ya Distributor’da ya da Subscriber’da çalışabilir.
4. Merge Agent (Hakem ve Birleştirici)
En karmaşık agent budur çünkü Merge Replication‘da veri her iki tarafta da değişebilir.
- Görevi: Hem ana sunucudaki hem de abonelerdeki değişiklikleri okur. İki tarafta aynı satır değişmişse, önceden belirlenmiş kurallara göre “çakışmaları” (conflicts) çözer ve veriyi her iki tarafta eşitler.
- Kritik Detay: Sadece veri taşımaz, aynı zamanda bir karar vericidir.
5. Queue Reader Agent (Geri Bildirim Aracı)
Bu agent, Transactional Replication’da “Queued Updating” özelliği açıldığında devreye girer.
- Normalde Transactional Replication tek yönlüdür (Yayıncı -> Abone). Ancak abone tarafında bir değişiklik yapılırsa, bu agent o değişikliği bir kuyruğa alır ve ana sunucuya (Publisher) geri yansıtır.
Özet Karşılaştırma Tablosu
| Agent | Hangi Tipte Var? | Temel Görevi |
| Snapshot | Hepsi | İlk senkronizasyon paketini hazırlar. |
| Log Reader | Transactional | Log dosyasından değişiklikleri toplar. |
| Distribution | Snapshot & Transactional | Toplanan veriyi aboneye aktarır. |
| Merge | Merge | İki yönlü senkronizasyon ve çakışma yönetimi yapar. |
| Queue Reader | Transactional (Opsiyonel) | Abonedeki güncellemeleri yayıncıya iletir. |
Bu yapıları bilmek, özellikle replication bozulduğunda veya gecikme (latency) yaşandığında hangi noktaya müdahale edeceğinizi belirlemek açısından hayati önem taşır.
Başka makalede görüşmek dileğiyle..
Gelecek Allahtan Korkanlarındır.Taha-132
