SQL server初级SQL SERVER Transactional Replication中添加新表如何不初始化整个快照

Posted OldEleven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server初级SQL SERVER Transactional Replication中添加新表如何不初始化整个快照相关的知识,希望对你有一定的参考价值。

在SQL SERVER的复制(Replication)中,有可能出现由于业务需求变更,需要新增一张表或一些表到已有的复制(发布订阅)当中,这种需求应该是很正常,也很常见的。但是在已有的复制(发布订阅)当中增加新表/文章,往往需要将整个快照重新初始化,这样做虽然简单,但是往往在实际应用中会出现一些问题,例如,发布订阅的表比较多,数据量比较大,那么重新初始化快照往往需要很长一段时间,影响系统正常运行。另外就是这样做会增大服务器的负荷,影响网络带宽.

 

    那么是否可以在新增表/文章后,不用初始化整个快照,而只是初始化新增的表呢? 当然可以,下面以一个小案例来讲述一下如何操作:

在数据库learningProc上建立了名为learningProcTest01的发布,要发布的对象为student和course这两张表,在另外一个服务器的数据库Test上订阅了该发布。现在由于需求变跟,需要增加一张表TestTable

 

 

我们可以按照下面三个步骤来操作,如下所示:

 

1:使用sp_helppublication查看该发布的相关信息,如下所示,你会看到默认情况下,\'immediate_sync\' 和 \'allow_anonymous\'这两个属性都是启用的。我们首先需要禁用这两个属性。

       

        allow_anonymous      表示是否允许对发布使用匿名订阅。

       immediate_sync       表示是否在每次快照代理运行时创建或重新创建同步文件。

 

 

EXEC sp_changepublication
@publication = \'RPL_TTT\',
@property = \'allow_anonymous\' ,
@value = \'false\'
GO
EXEC sp_changepublication
@publication = \'RPL_TTT\',
@property = \'immediate_sync\' ,
@value = \'false\'
GO 

 

2:在本地发布当中找到"learningProcTest01",然后在"项目"当中增加表TestTable,当然你也可以使用 sp_addarticle命令添加。如下所示:

 

 

 

3:在发布"learningProcTest01"上,右键单击“查看快照代理状态”,在弹出的窗口上选择“启动”,你会发现快照只会初始化一个表而不是整个三个表。

命令执行完成后,你会发现该表的subscription_status变为了2,如下所示

 

 至于完成后,\'immediate_sync\' 和 \'allow_anonymous\'这两个属性如果你要启动的话,也是非常简单容易的。只需要将false改为True,执行代码就行了,不启用也问题不大。

以上是关于SQL server初级SQL SERVER Transactional Replication中添加新表如何不初始化整个快照的主要内容,如果未能解决你的问题,请参考以下文章

SQL server初级数据库性能优化三:程序操作优化

sqlserver 如何查询出新增表数据的时间

sql server 2008怎么清空日志

Sql Server——查询

SQL Server 始终开启 - 辅助索引

SQL Server 创建触发器