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 中点击“确定”时(添加文章后),它将关闭而不提示重新初始化 - 如果它确实提示重新初始化,那么您已经更改了需要完整快照的内容。如果发生这种情况,请点击取消并重试。
添加文章后,您可以简单地启动快照作业,您会注意到它只为新文章生成快照(称为迷你快照)。
然后检查您的分发作业,并注意它在订阅者处创建了表并批量复制了您的数据。
祝你好运,如果您需要进一步的帮助,请告诉我。
我也有同样的问题,尽管我已经成为 DBA 一段时间了,但我对复制的处理还不够深入,无法完全适应它,所以我认为以下资源和指南很有帮助:
该博客提供了该过程的良好概述。它还提醒我们,如果您有一个大型现有出版物,并且其选项设置为“immediate_sync”,则每次添加或更改文章时都会准备一个全新的快照。所以他有一个方便的技巧来改变这个选项,使用sp_changePublication @publication='MyPub', @property='immediate_sync', @value='false';
MSDN 博客文章“repltalk”(听起来像是一个很好的资源!) - 不是“直接直接”相关,但仍然有帮助
这个问题,@Brandon-Williams指出,如果它是Pull订阅,您还应该刷新它,使用sp_refreshSubscriptions @publication = 'MyPub'
SSMS 复制监视器 - 按照指南停止和启动代理(快照、日志读取器)的便捷方法。
以下是我遵循的实际步骤,效果很好并且得到了我的主管 DBA 的批准:
sp_changePublication- 是的,正如 @cody_konior 指出的那样,这没有充分记录,但在我的情况下它确实工作得很好。青年MMVsp_addArticlesp_articleColumn(指定的出版物和文章,未指定列 -> 暗示所有列)添加表的所有列sp_refreshSubscriptions该发布以刷新拉取器虽然是的,您可以使用 SSMS GUI 进行大部分更改,但我发现将其全部编写成脚本很有帮助,因此可以 A) 在源代码控制(更改控制)下,B) 重复部署或部署到多个实例。不幸的是,我没有花时间编写代理停止/启动的脚本,但这应该不会太难,因为它们只是 SQL 代理作业。你只需要完成整个“使用作业名称查找 JobID”技巧(查询sysjobs- 真的吗,MS?)...
希望对未来的读者有所帮助!
如向现有出版物添加文章和从现有出版物中删除文章中所述,您必须*为该出版物创建一个新快照。
为了避免在添加新文章时生成所有文章的快照,发布属性immediate_sync必须设置为 0。先调用sp_addarticle,然后sp_addsubscription调用 。如果订阅已取消,您还必须致电sp_refreshsubscriptions。然后生成快照,只会生成新添加的文章的快照。
* 这是 SQL Server 联机丛书中推荐的方法。您的方法的问题在于它很容易出错。
| 归档时间: |
|
| 查看次数: |
49461 次 |
| 最近记录: |