SQL Server Data Replication içinde tanımlı abonelikler (subscription) belirlenmiş olan transaction saklama süresi (retention period) içinde senkronize edilmezse otomatik olarak pasif moda çekilebilir veya expire edilebilir. Transactional Replication yönteminde maximum distribution retention period (sp_adddistributiondb prosedürü için @max_distretention parametresi) ve publication retention period (sp_addpublication prosedürü için @retention parametresi) olmak üzere iki temel parametre kullanılır.
@max_distretention parametresi transactionların distribution veritabanından silinmeden ne kadar saat saklanacağını belirtir. Varsayılan değeri 72 saattir. Distribution veritabanına çok önceden replike edilmiş fakat bu parametredeki süreden daha önce oluşmuş transactionları almamış abonelikler, Distributor üzerinde çalışan Distribution clean up isimli job tarafından inactive olarak işaretlenir yeniden ilklendirilmesi gerekir (reinitialize). Bu aboneler için aşağıdaki hata mesajıyla karşılaşırız.
The subscription(s) have been marked inactive and must be reinitialized. NoSync subscriptions will need to be dropped and recreated.
@max_distretention parametresini Enterprise Manager / Management Studio içerisinde “Replication/Publications” bölümünü sağ tıklayıp “Configure Publishing, Subscribers, and Distribution” menüsünden erişilen “Publisher and Distributor Properties” penceresinden set edebiliriz. Bu pencerede distribution veritabanını seçilip Properties buttonu aracılığıyla @max_distretention parametresini set edebiliriz.
Veya aşağıdaki şekilde ilgili prosedürü de kullanabiliriz.
exec sp_changedistributiondb N'distribution', max_distretention, "72"
@retention parametresi snapshot veya transactional publication oluştururken kullanılan bir parametre olup subscription activity için gerekli olan saklama süresini belirtir. Varsayılan değeri 336 saattir. Bu süre içinde aktif olmamış erişilmemiş ulaşılmamış subscriptionlarExpired subscription clean up isimli job tarafından expire edilir ve abonelik listesinden çıkarılır. Bu değer maximum retention period değerinden büyük olabilir. Eğer parametreye 0 değeri verilirse abone expire edilmez pasif moda geçilir. Bu durumda da sözkonusu abonenin yeniden ilklendirilmesi gerekir.
Bu parametre Enterprise Manager aracında “Publication Properties” penceresindeki General sekmesinde değiştirilebilir.
Veya aşağıdaki gibi ilgili prosedür kullanılabilir.
exec sp_changepublication @publication = N'MerkezData', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1, @property = N'retention', @value = N'336'