SQL Server事务性复制再发布



我们有一个事务性复制设置,其中订阅者也是第二组订阅者的发布者。我认为这是因为主发布者和订阅者之间的连接缓慢。订阅者向多个本地订阅者发布同一组文章。

我们遇到的一个问题是,当主发布者/订阅者设置需要重新初始化时,我们必须删除第二个发布者/订阅者设置。否则我们会得到关于删除表的错误。它们不能被初始化过程删除,因为它们正在被第二次设置用于复制。

也许这是必须做的,但我想知道是否有更好的方法。寻找任何提示或建议。

谢谢,凯文

也许吧。添加文章(sp_addarticle)的过程接受一个参数@pre_creation_cmd,该参数指定在创建文章之前要做什么。默认值是"drop",但也可以是"none"(什么都不做)、"delete"(删除目标表中的所有数据)或"truncate"(截断目标表)。在您的情况下,我会选择"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

注意:这是完全未经测试的(我没有在家里设置复制),但应该相当接近。

最后(也是修辞上的),为什么要如此频繁地重新初始化?这应该是一个罕见的事件。如果不是,你可能有一个配置问题(例如,如果你一直落后到超过了分发器的保留,增加分发器的保留)。

最新更新