Transactional Replication – Subscriber Database Adını Değiştirme

Farklı lokasyonlarda bulunan şubelerle merkez arasında transactional replication kullanıyoruz. Tüm şubeler merkezdeki ana SQL Server üzerinde bulunan kendi kodlarıyla ilişkili veritabanına aktarılmaktadır. Gün geldi, merkezdeki veritabanlarının isimlerinde değişiklik yapmak istedik. Merkezdeki abone görevindeki veritabanın adını değiştirdiğimizde Distributor tarafında The process could not access database ‘Veritabanı Adı’ on server ‘MerkezSunucu Adı’. hatası almaya başladık. Yeniden başlangıç senkronizasyonunu yapmadan replikasyonun kaldığı yerden devam edebilmesi için ya “Replication » Local Publication” menüsünden eski subscription database kaydını silip “New Subscriptions” bölümünden yeni abonelik oluşturulur veya Job ve sistem tabloları üzerinde aşağıdaki değişiklikleri yapmak gerekir.

1.Adım : Distributor yani veriyi merkeze gönderen sunucu tarafına geçip “SQL Server Agent » Job”s bölümünden ilgili Job’ı bulacağız. Bu Job’ın Category değeri “REPL-Distribution” olarak set edilmiştir. Bu Job’ın 2.adımını tıklayalım. Burada aşağıdaki komut satırını görürüz.

Bu satırdaki SubscriberDB parametresindeki değeri değiştireceğiz.
2. adım : Replikasyon’daki subscription ile ilgili bilgilerin bulunduğu şu tabloları da aşağıdaki gibi güncellemek gerekir. syssubscriptions (publication veritabanında), MSsubscriptions (distribution veritabanında) ve MSdistribution_agents (distribution veritabanında).

USE publication_veritabani_adi
UPDATE syssubscriptions SET dest_db = 'Yeni_Subscription_db_Adi' where dest_db = 'Eski_Subscription_db_Adi' 

GO

USE distribution
UPDATE MSsubscriptions SET subscriber_db = 'Yeni_Subscription_db_Adi' where subscriber_db = 'Eski_Subscription_db_Adi' 

GO

USE distribution
UPDATE MSdistribution_agents SET subscriber_db = 'Yeni_Subscription_db_Adi' where subscriber_db = 'Eski_Subscription_db_Adi'

Bu işlemleri yaptıktan sonra Agent servisini yeniden başlatıp test etmekte fayda var.

Bir yanıt yazın

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