将文章添加到事务发布而不生成新快照

use*_*528 27 replication sql-server sql-server-2008-r2

使用带有拉取订阅者的 SQL 2008 R2 事务复制,当我们添加一篇文章时,我想避免创建整个快照(数据库约为 80 GB,因此这需要几个小时)。

这篇文章 中,我已经看到了如何通过关闭即时同步来使用部分快照来做到这一点,但这对我们不起作用。

理想情况下,我只想将它作为我们的 db 脚本的一部分运行来创建表,所以如果我们想要复制它,我们会这样做:

Create Table ...    
sp_addArticle ...    
sp_PushThisToOurSubscribersNow    
Run Code Online (Sandbox Code Playgroud)

NTD*_*DLS 13

您可以使用 GUI 通过 SSMS 添加文章,甚至可以对其应用过滤器。只要您不更改文章的任何其他属性,您就不需要生成完整快照。

当您在发布 GUI 中点击“确定”时(添加文章后),它将关闭而不提示重新初始化 - 如果它确实提示重新初始化,那么您已经更改了需要完整快照的内容。如果发生这种情况,请点击取消并重试。

添加文章后,您可以简单地启动快照作业,您会注意到它只为新文章生成快照(称为迷你快照)。

然后检查您的分发作业,并注意它在订阅者处创建了表并批量复制了您的数据。

祝你好运,如果您需要进一步的帮助,请告诉我。


Ima*_*man 9

  1. 在您的出版物属性窗口中添加新文章(取消选中仅显示列表中选中的文章)
  2. 右键单击同一发布节点并转到“查看快照代理状态
  3. 单击开始并注意同一窗口中的日志,该日志显示此新文章仅同步
  4. 不久后,新文章将在订阅者中同步,而无需初始化所有先前同步的内容

在此处输入图片说明


Nat*_*teJ 6

我也有同样的问题,尽管我已经成为 DBA 一段时间了,但我对复制的处理还不够深入,无法完全适应它,所以我认为以下资源和指南很有帮助:

  • 该博客提供了该过程的良好概述。它还提醒我们,如果您有一个大型现有出版物,并且其选项设置为“immediate_sync”,则每次添加或更改文章时都会准备一个全新的快照。所以他有一个方便的技巧来改变这个选项,使用sp_changePublication @publication='MyPub', @property='immediate_sync', @value='false';

  • MSDN 博客文章“repltalk”(听起来像是一个很好的资源!) - 不是“直接直接”相关,但仍然有帮助

  • 这个问题,@Brandon-Williams指出,如果它是Pull订阅,您还应该刷新它,使用sp_refreshSubscriptions @publication = 'MyPub'

  • SSMS 复制监视器 - 按照指南停止和启动代理(快照、日志读取器)的便捷方法。

以下是我遵循的实际步骤,效果很好并且得到了我的主管 DBA 的批准:

  1. 打开复制监视器,选择发布,转到代理,右键单击日志读取器代理,然后单击停止。
  2. 将出版物设置为不允许匿名且不立即同步,使用sp_changePublication- 是的,正如 @cody_konior 指出的那样,这没有充分记录,但在我的情况下它确实工作得很好。青年MMV
  3. 使用脚本在订阅者处手动创建表,使用链接服务器查询填充数据(因为它很小)。您还可以使用 SSIS、BCP 或其他一些方法来执行此操作。如果您同意 repl-snapshot 为您完成此操作,则可能没有必要。我只是想第一次手动准备它。
  4. 使用添加文章(表)sp_addArticle
  5. 使用sp_articleColumn(指定的出版物和文章,未指定列 -> 暗示所有列)添加表的所有列
  6. 执行sp_refreshSubscriptions该发布以刷新拉取器
  7. 再次打开Replication Monitor,选择pub,转到Agents,右键单击Snapshot Agent,单击“启动”。它将运行一次,创建新的快照。
  8. 右键单击日志读取器代理,单击“启动”。它将开始并继续正常运行,并且您的复制现在应该可以再次工作。

虽然是的,您可以使用 SSMS GUI 进行大部分更改,但我发现将其全部编写成脚本很有帮助,因此可以 A) 在源代码控制(更改控制)下,B) 重复部署或部署到多个实例。不幸的是,我没有花时间编写代理停止/启动的脚本,但这应该不会太难,因为它们只是 SQL 代理作业。你只需要完成整个“使用作业名称查找 JobID”技巧(查询sysjobs- 真的吗,MS?)...

希望对未来的读者有所帮助!


Bra*_*ams 5

如向现有出版物添加文章和从现有出版物中删除文章中所述,您必须*为该出版物创建一个新快照。

为了避免在添加新文章时生成所有文章的快照,发布属性immediate_sync必须设置为 0。先调用sp_addarticle,然后sp_addsubscription调用 。如果订阅已取消,您还必须致电sp_refreshsubscriptions。然后生成快照,只会生成新添加的文章的快照。

* 这是 SQL Server 联机丛书中推荐的方法。您的方法的问题在于它很容易出错。