我们有一个事务复制设置,其中订阅者也是第二组订阅者的发布者。我认为这是因为主要发布者和订阅者之间的联系缓慢。订阅者向多个本地订阅者发布相同的文章集。
我们遇到的一个问题是,当主要发布者/订阅者设置需要重新初始化时,我们必须删除第二个发布者/订阅者设置。否则我们会得到关于丢弃桌子的错误。它们不能被初始化过程删除,因为它们被第二次设置用于复制。
也许这就是它必须要做的方式,但我想知道是否有更好的方法。寻找任何提示或建议。
谢谢, 凯文
答案 0 :(得分:0)
也许。添加文章(sp_addarticle
)的过程采用参数@pre_creation_cmd
,该参数指定在创建文章之前要执行的操作。默认值为“drop”,但可以是“none”(不执行任何操作),“delete”(删除目标表中的所有数据)或“truncate”(截断目标表)。在您的情况下,我选择“删除”,因为您无法截断复制表。
但我必须说,如果是我,我也不会这样做。我让我的重新初始化脚本成为一个类似于:
的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
注意:这是完全未经测试的(我没有在家中设置复制),但应该非常接近。
最后(和修辞),为什么你经常重新初始化?这应该是一个罕见的事件。如果不是,您可能会遇到配置问题(例如,如果您到目前为止一直落后于超出分销商保留期,请增加分销商保留率。)