【问题标题】:SQL Server transactional replication republicationSQL Server 事务复制重新发布
【发布时间】:2023-03-28 07:39:01
【问题描述】:

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

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

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

谢谢, 凯文

【问题讨论】:

  • 这是合并复制还是事务复制?

标签: sql sql-server replication


【解决方案1】:

也许吧。添加文章 (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

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

最后(在修辞上),你为什么经常重新初始化?这应该是一个罕见的事件。如果不是,您可能会遇到配置问题(例如,如果您一直落后到超过分销商保留率,请增加分销商保留率)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2021-04-08
    • 2010-12-16
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多