SQL Server Data Replication (Veri Yineleme) – II

Önceki yazıda replikasyonla ilgili terminolojiyi anlatmaya çalıştık. Bu yazıda SQL 2000 ve 2005 üzerinde replikasyon türlerinin nasıl kurulacağını örneklendirelim. Aynı makine üzerinde koşan iki tane SQL Server 2000 instance’imiz var. Birinin adı WXX diğerinin adı WXX\KAFKA. WXX sunucusunu yayıncı ve dağıtıcı, WXX\KAFKA sunucusunu da abone olarak yapılandıracağız. WXX üstündeki KAYNAK isimli veritabanını yayınlayacağız. Sunucuları ilklendirmek ve full backup’ın snapshot klasörüne sorunsuz yüklenmesi ve diğer işlemler için SQL Server Agent servisinin yetkili bir domain ile başlatmak doğru bir çözüm olur.
İlk adım olarak WXX sunucusunu hem publisher hem de distributor olarak yapılandıracağız. Bunun için üst menüdeki Wizard bölümüden veya sunucu ismini sağ tıklayıp Properties bölümünden replikasyon sihirbazını başlatabiliriz. Enterprise Manager içerisinde WXX sunucunu sağ tıklayıp Properties bölümünden Replication sekmesine girelim. Burada Configure düğmesini tıklayalım.

Karşılama ekranını geçtikten sonra “Select Distributor” penceresine geçelim. “Make ‘WXX’ its own Distributor; SQL Server will create a distribution database and log” seçeneği ile Publisher ve Distributor’un aynı sunucu olacağını belirtelim.

Sonraki ekranda snapshot klasörünü belirteceğiz. Replikasyonun mantığı gereği yayıncı ve abonelerin farklı makinelerde koşuyor olmasından dolayı tüm sunucuların erişmesi için bu klasörün network yolunun tanımlanması daha mantıklı olacaktır. Eğer yerel adres verilirsen sadece push subscription’lar desteklenir. Burada C:\SnapshotYedek klasörü için \\WXX\SnapshotYedek ağ yolunu giriyoruz.

Bir sonraki ekranda yayınlama ve dağıtma ayarları gerçekleştirilir. Burada istenilirse ‘distribution’ veritabanının adı ve ona ait data ve log dosyalarının konumu değiştirilebilir.

Bu ekranla birlikte WXX sunucunun hem yayıncı hem de dağıtıcı rolünde olması sağlandı. Bu bölümdeki adımları bitirdiğimizde WXX üzerinde ‘distribution’ veritabanı oluşturulur ve replikasyon sürecini yönetmek ve takip etmek için “Replication Monitor” aracı aktifleştirilir.

Şu an itibariyle yayımcı ve dağıtıcı sunucularını tanımlamış olduk. Şimdi yayımcı sunucunun ne yayınlanacağını (publication), abonelere gönderilecek artikelleri tanımlayacağız. Bunu farklı menülerden yapabiliriz. Bunun en kısa yolu Enterprise Manager içerisindeki “Tools » Replication » Create and Manage Publications.” menüsünü kullanacağız.

Bu menünün açtığı pencerede WXX altındaki Kaynak veritabanını seçip “Create Publications” düğmesini tıklayarak bu database için bir yayın hazırlayalım. Karşılama ekranından sonra bu yayının hangi replikasyon türüyle yayınlacağı seçilir. Burada en basit olan “Snapshot Replication” yöntemini seçeceğiz.

Sonraki ekranda abonelerin veritabanı sistemi düzeyinde türü seçilir. Aboneler SQL Server sisteminden olduğu gibi Oracle, Access gibi heterojen sistemler de olabilir. Burada SQL Server 2000 seçeneğini işaretleyip bir sonraki ekrana geçelim. Bu yeni ekranda yayınlanacak artikelleri seçeceğiz. Burada Kaynak veritabanı altında örnek olarak oluşturduğumuz Musteri tablosunu seçeceğiz.

Bu ekranda tabloların yanındaki “.” düğmesini tıklayarak artikelin adı ve bu nesnelerin karşı taraftaki adı düzenlenebilir. Sonraki ekranlarda varsa IDENTITY uyarısı yapılır ve “define data filters” seçeneğiyle yatay veya dikey filtreleme yapılabilir. Filtreleme işlemi SQL Server replikasyonunun önemli bir özelliği olup tablonun sadece belli kolon veya satırlarını abonelere göndermemize imkan sağlar. Bu ekranlarda varsayılan seçenekleri işaretleyip yayın tanımlama sürecini bitirelim. Bu işlemden sonra hem Kaynak veritabanının altında hem de Publications bölümünde tanımlanan yayın bilgisi görünür.

Bu aşamada yayıncı ve onun yayınlayacağı makaleler ve bunları dağıtacak dağıtıcı tanımlanmış oldu. Şimdi bu yayınlara abone olacak üyeleri tanımlayacağız. Bunun için “Tools » Replication” menüsü kullanılabildiği gibi Replications bölümü altındaki yayın (Kaynak) sağ tıklanarak “Push New Subscription” menüsü kullanılabilir. “Push Subscription Wizard” ekranında bir veya daha fazla muhtemel abone seçilebilir. Burada WXX\KAFKA sunucusunu seçeceğiz.

Sonraki ekranlarda Kaynak veritabanının karşı taraftaki karşılığının ne olacağı ve Distribution Agent’in bir kere mi yoksa belli peryotta mı çalışıp çalışmayacağı belirtilir. Üye makinelerde Kaynak veritabanının oluşturulmuş olması lazım. Bunu bu ekranda “Browse or Create” buttonuyla sağlayabiliriz.
Görüldüğü gibi SQL Server ortamında replication işlemini yapmak çok kolay. Bu yazıda örnek Snapshop replication türünü ele aldık. Replikasyon türünün seçildiği ekranda Transactional veya Merge türleri seçilerek bu yöntemler de yapılandırılabilir. Transactional replikasyon için sözkonusu tablolar üzerinde primary key’in tanımlı olması gerekir.
SQL Server 2005’te replikasyon işlemini yapmak daha da kolaylaştı. Bu işlemi yapılandırmak için Management Studio’da Replication bölümü kullanılır. Aşağıdaki şekilde AHMETKAYMAZ isimli aynı sunucu üzerinde Kaynak1 veritabanı Kaynak2 veritabanını aktarılmıştır.

SQL Server replikasyonla ilgili olarak aşağıdaki notlarla yazımızı bitirelim.

  • Sadece üzerinde Primary Key tanımlı tablolar replike edilebilir.
  • Kaynak veritabanındaki tablo TRUNCATE edilemez.
  • Eğer hedef veritabanında bir Primary Key silinirse ve daha sonra kaynaktan o primary key ilgili bir güncelleme gelirse replikasyon bu kaydın karşılığını bulamadığı için hata verecektir. Sonraki işlemleri de COMMIT etmeyecektir.
  • Kaynaktaki tabloya ait yeni kolonu replikasyona dahil etmek veya var olan bir kolonu replikasyonda çıkarmak istediğimizde aboneleri bundan nasıl etkileneceği yani yeniden snapshot replikasyonun yapılıp yapılmayacağını Publication Properties » Articles sekmesindeki tablo çift tıklanarak Table Article Properties bölümü açılır ve oradan ilgili işlemler belirtilir
  • SQL Server 2005 ile aynı replikasyonda topolojisinde bulunacak SQL Server sürümü en az SQL Server 7.0 (SP4) ve SQL Server 2000 (SP3) olması gerekir.
  • Diskte veri saklama formatları aynı olduğu için SQL Server’in 32-bit ve 64-bit sürümleri aynı replikasyon modelinde kullanılabilir.
  • Farklı SQL Server sürümleri arasında replikasyon kurulacağı zaman Distributor sunucunun versiyonu Publisher’dan daha eski olmamalı.
  • SQL Server 2005 ancak publisher modunda olan SQL Server 2005 ve SQL Server 2000 için Distributor olabilir. SQL Server 7.0 için dağıtıcılık yapamaz.

MSDN’den alınmış aşağıdaki tablolar hangi SQL Server sürümlerinin aynı topolojide bulunabileceğini göstermektedir.
Salt-Okunur Aboneler için Transactional Replication ve Snapshot Replication

Distributor SQL Server 7.0 SQL Server 2000 SQL Server 2005
Publisher SQL Server 7.0 SQL Server 7.0
SQL Server 2000
SQL Server 2000
SQL Server 2005
Subscribers SQL Server 7.0
SQL Server 2000
SQL Server 2005
SQL Server 7.0
SQL Server 2000
SQL Server 2005
SQL Server 7.0
SQL Server 2000
SQL Server 2005

Güncellenebilen Aboneler için Transactional Replication

Distributor SQL Server 7.0 SQL Server 2000 SQL Server 2005
Publisher SQL Server 7.0 SQL Server 7.0
SQL Server 2000
SQL Server 2000
SQL Server 2005
Subscribers SQL Server 7.0 SQL Server 7.0
SQL Server 2000
SQL Server 2005
SQL Server 7.0
SQL Server 2000
SQL Server 2005

Merge Replication

Distributor SQL Server 7.0 SQL Server 2000 SQL Server 2005
Publisher SQL Server 7.0 SQL Server 7.0
SQL Server 2000
SQL Server 2000
SQL Server 2005
Subscribers SQL Server 7.0 SQL Server 7.0
SQL Server 2000
SQL Server 7.0
SQL Server 2000
SQL Server 2005

Bu yazıda SQL Server 2000 replication ve SQL Server 2005 replication işlemlerinin nasıl yapılacağını öğrenmiş olduk.

SQL Server Data Replication (Veri Yineleme) – II” hakkında 17 yorum

  1. Mehmet Yazıcı

    Peki aynı replikasyon işlemini co-locate sunucu için yapabilirmiyiz? yani şirket içerisinde bulunan sunucumdaki SQL Server 2005 üzerindeki veritabanımı, datacenter’ da bulunan Serverımdaki Sql server’ a replikasyon işlemini yapabilirmiyim?

    Cevapla
  2. Ahmet Kaymaz Yazar

    Replikasyon gibi teknolojilerin amacı zaten dağıtık sitemler arasında aktarım yapılmasını sağlamaktır. Bahsettiğiniz 2 sunucu birbirini gördükten sonra kolayca replikasyon kurabilirsiniz.

    Cevapla
  3. savas

    replication ı oluşturduktan sonra çalıştırmak için job mı yazmamız gerekiyor?
    eger oyleyse nasıl olacağı hakkında bilgi verirmisiniz.

    Cevapla
  4. Ahmet Kaymaz Yazar

    Replication kurulduktan sonra çeşitli JOB’lar kurar. Bu Joblar zamanı geldikçe devreye girer. Eğer snapshot ihtiyacı varsa Snapshot Agent’i bir kereye mahsus olmak üzere manual veya otomatik çalıştırmanız gerekmektedir.

    Cevapla
  5. savas

    snapshot agent i nereden çalıştıracağım hakkında yardımcı olurmusunuz yada. 2 bilgisayarım arasında replication sistemi kurmak istiyorum ama publisher olan sql server standart , subscriber ise express versiyon.. replication kurdum ama subscriber tarafında oluşmuyor table lar anlamadım 3 gündür uğraşıyorum lütfen yardım edin..
    teşekkürler

    Cevapla
  6. Ahmet Kaymaz Yazar

    Savaş,SQL Server 2005 için Object Explorer içerisindeki Replication menüsünün altındaki Local Publications altındaki yayını sağ tıklayıp “View Snapshot Agent Status” programını çalıştırırsan orada Start düğmesini görebilirsin. Eğer replikasyonu “automatic initialization” olarak kurduysan snapshot dosyaları oluşturulduktan sonra karşıdaki aboneye ilgili tabloları ve kayıtları aktaracaktır.

    Cevapla
  7. Muhsin AKYÜZ

    Trans Replikasyon işlemi başlatıldıktan sonra. Subscriber olarak belirlenen alanda herhangi bir silme işlemi gerçekleşirmi.Yani veritabanı ve/veya table larda bir veri kaybı yaşarmıyım.?

    Cevapla
  8. Oğuzhan TEKİN

    Öncelikle makaleniz için teşekkür ederim.Transactional Replikasyon sırasında abone olarak tanımlanan bölgenin databaseinde bir değişiklik veya silinme gerçekleşirmi?

    Cevapla
  9. Ahmet Kaymaz Yazar

    Oğuzhan,kaynak sistemde yani Publisher tarafında silme olursa ve bu işlemleri de replikasyona dahil ediyorsanız doğal olarak abone tarafında da silme olur.

    Cevapla
  10. Zekeriya

    Merhabalar, Replikasyon işlemini yalnızca local serverler arasındamı yapabiliyoruz? Uzak serverlar arasında da uygulayabilirmiyiz?

    Cevapla
  11. Ahmet Kaymaz Yazar

    Zekeriya,replikasyonu birbirine erişebilen yerel veya uzak hiç farketmez iki sunucu arasında kurabilirsiniz.

    Cevapla
  12. Kemal Ata

    Merhaba Ahmet bey,

    Paylaşımlarınız için teşekkürler.

    Benim için kritik bir öneme sahip Truncate konusunda bir çözüm öneriniz varsa yardımınızı rica ederim.

    Transactional Repl. Modelinde Publisher tarafındaki Truncate Subscriber’a yansımıyor ve hata verip Replikasyon duruyor. Zaten yazınızda da belirtmişsiniz. İki uzak sunucu interneti çok iyi durumda olmadığı için Transactional Repl. en uygunu gözüküyordu benim açımdan çünkü değişen veriler alış veriş halinde bildiğiniz gibi.

    Truncate sorunun nasıl aşabilirim veya başka bir Relp. Modeli üzerinden mi çözmeliyim, fikrinize ihtiyacım var. Teşekkürler.

    Cevapla
  13. Ahmet Kaymaz Yazar

    Kemal merhaba,

    transactional veya merge replication edilen bir tabloda TRUNCATE edilmemektedir maalesef. Uzun sürmüyorsa tablo üzerindeki trigger’lari kaldırıp DELETE yapman daha doğru olacaktır. Ya replikasyonu bozacaksın ya da kendin bir EXE uygulaması (third party application) yazacaksın. Aklıma başka bir çözüm gelmiyor.

    Kolay gelsin,

    Cevapla
  14. Berhan

    Merhaba Hocam,

    Serverlarım arasında replikasyon bağlantısı var, publisher sqlserver 2008 subscriber sqlserver 2016.
    Versiyon değişikliği veya farklı bir sebepten ötürü replikasyon bazen fail oluyor.
    Sorum subscripber tarafına bir yapı tasarlamak eğer fail olursa mail atmasını sağlayan bir sistem oluşturmak istiyorum. Herhangi bir döküman paylaşabilir misiniz ?

    Cevapla
  15. Ercan ÇETİN

    Ahmet Bey merhaba,
    bu güzel ve açıklayıcı makale için çok teşekkür ederiz.
    identity kolununa sahip veritabanlarını nasıl replike etmek lazım, en doğru yöntem hangisi olacaktır? Range kullanmak bir yere kadar çözüm gibi dursada sürekli büyüyen veritabanında ayrıca yöntilmesi gereken bir konu olup önümüze çıkıyor.
    Tavsiyeniz ne olurdu?
    Saygılarımla.
    Ercan ÇETİN

    Cevapla

Alper için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir