解决SQLServer发布数据库同步后每次新增同步项目(表,视图之类的)都要重新生成全部快照的问题

最近在用SQLServer做数据库同步功能,一开始发布了一些表,后面新增了一些表后,每次都是要重新启动代理生成全部快照。有时候遇到同步的表数据量比较大,经常把数据库搞卡死了。后来网上看到一个方法,可以实现每次新增同步的表,视图后,只需要生成新的表,视图的快照即可。大大缩减了生成快照的时间,也防止了数据库卡死的情况出现。


下面我们来看一下怎么操作。首先我们用正常的方法发布一个数据库。比如我这里新增了一个发布叫Ecard


假设现在只发布了一个表T_1,那么现在另一台服务器订阅后。这台发布的服务器只需要生成T_1的快照即可。


然后假设我们现在新增了一张表T_2,然后把这张表也进行同步。那么按照正常的情况,这时要重新生成快照,系统会重新将T_1、T_2都生成。这样的话就比较耗时,而且如果这2张数据量很大的话,生成快照也会比较久。


所以我们需要修改一下,实现新增T_2后,只需要生成T_2表的快照就可以了。



首先我们来查看一下需要同步的数据库的属性


USE 数据库名;
sp_helppublication;

我们可以看到,默认的immediate_sync和allow_anonymous字段的值都是1的。此时我们需要将它们同时修改成0来实现每次生成快照只生成新表、视图的即可。

use 数据库名;
EXEC sp_changepublication
@publication = '发布的名称,比如我上面截图里面的Ecard',
@property = 'allow_anonymous' ,
@value = 'false'
GO

EXEC sp_changepublication
@publication = '发布的名称,比如我上面截图里面的Ecard',
@property = 'immediate_sync' ,
@value = 'false'
GO 

完成上面的语句执行后,此时我们的发布已经改变了。以后新增了表、视图、函数或者存储过程的同步,生成快照只会生成新增的这些项目。速度快了很多,耗时大大减少了。

  1. 本网站所收集的部分资料来源于互联网,本站不对其真实性负责,也不构成任何其他建议。如果您发现有侵犯您权益的内容,请与我们取得联系,我们会及时修改或删除。
  2. 传递知识、传递力量,欢迎各位网友对本站的文章进行转载和分享。
  3. 本站QQ群交流群:904314688  群号:904314688
发表评论
 
评论列表(目前共有 条评论)
暂时还没有评论哦~

文章搜索

商家广告


版权所有:秋风雅居 (www.198933.com) ©2024 All Rights Reserved.

粤ICP备20031662号