博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL SERVER Transactional Replication中添加新表如何不初始化整个快照
阅读量:6511 次
发布时间:2019-06-24

本文共 1227 字,大约阅读时间需要 4 分钟。

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

 

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

 

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

 

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

 

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

       

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

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

use TTT;
go
 
sp_helppublication;
 
 
use TTT;
go
 
exec sp_helppublication  'RPL_TTT';

 

 

 
--Run on your publisher database
use TTT;
go
 
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:在本地发布当中找到"RPL_TTT",然后在"项目"当中增加表WipNoToLoosen,当然你也可以使用 sp_addarticle命令添加。如下所示:

 

 

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

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

至于完成后,'immediate_sync' 和 'allow_anonymous'这两个属性如果你要启动的话,也是非常简单容易的。不启用也问题不大。

转载地址:http://sgdfo.baihongyu.com/

你可能感兴趣的文章
Exchange 2013服务器常用的性能监视器
查看>>
find 使用name选项
查看>>
w32tm 排错时间
查看>>
SuSE zypper命令基本使用
查看>>
Linux常用命令--ls、cd、date用法
查看>>
CentOS6.5 heartbeat高可用集群的详解及工作流程
查看>>
Excel技巧续
查看>>
电子产业没有想透的问题、未被开发的未来 品牌盛会告诉你
查看>>
Mysql用户密码设置修改和权限分配
查看>>
安装centos7
查看>>
DB Commit Time
查看>>
第一课 PHP学习要求
查看>>
postfix相关问题整理及处理
查看>>
Linux Redhat系统的三种包的使用
查看>>
修改mysql的监听地址(unknown variable ‘defaults-file) 10 Apr, 2008 mysql
查看>>
实用的网站
查看>>
nginx服务器安装设置全部知识
查看>>
快捷方式的小箭头
查看>>
表字段部分更新
查看>>
“ABC”时代,IT变革下的驱动数据价值之路
查看>>