2015-07-14 2 views
0

У нас есть настройка репликации транзакций, где подписчик также является издателем второго набора подписчиков. Я думаю, что это связано с медленной связью между основным издателем и подписчиком. Абонент публикует один и тот же набор статей нескольким местным подписчикам.Репликация транзакционной репликации SQL Server

Одна из проблем, с которой мы сталкиваемся, заключается в том, что первичная настройка издателя/подписчика должна быть повторно инициализирована, нам нужно удалить вторую настройку издателя/подписчика. Мы получаем ошибки в отношении отбрасывания таблиц в противном случае. Они не могут быть удалены процессом инициализации, потому что они используются для репликации второй установкой.

Возможно, так оно и должно быть сделано, но мне интересно, есть ли лучший способ. Поиск любых советов или предложений.

Спасибо, Kevin

+0

Это слияние или транзакционная репликация? – Greg

ответ

0

Может быть. Процедура добавления статьи (sp_addarticle) принимает параметр @pre_creation_cmd, который указывает, что делать перед созданием статьи. По умолчанию «drop», но может быть «none» (ничего не делать), «удалить» (удаляет все данные в таблице назначения) или «усекать» (обрезает таблицу назначения). В вашем случае я бы выбрал «delete», так как вы не можете обрезать реплицированную таблицу.

Но я должен сказать, что если бы это был я, я бы тоже этого не сделал. Я бы сделал мой повторно инициализации написать сценарий SQLCMD скрипт, который выглядит примерно так:

:connect $(REPEATER_INSTANCE) 
use [$(REPEATER_DB)]; 
declare arts cursor for 
    select p.name as pub, a.name as art 
    from sysarticles as a 
    join syspublications as p 
     on a.pubid = p.pubid; 
open arts; 
declare @p sysname, @a sysname; 
while(1=1) 
begin 
    fetch next from arts into @p, @a 
    if (@@fetch_status <> 0) 
     break; 
    exec sp_droparticle @publication = @p, @article @a; 
end 
close arts; 
deallocate arts; 

:connect $(PUBLISHER) 
use [$(PUBLISHER_DB)]; 
--whatever script you use to create the publication here 

Примечание: это совершенно непроверенные (я не имею репликации установить у себя дома), но должно быть довольно близко.

И, наконец, (и риторически), почему вы так часто инициализируетесь? Это должно быть редкое событие. Если это не так, у вас может возникнуть проблема с конфигурацией (например, если вы постоянно отстаете до тех пор, пока вы превысите удержание дистрибьютора, увеличьте удержание дистрибьютора).