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

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 在SQL SERVER的复制(Replication)中,有可能出现由于业务需求变更,需要新增一张表或一些表到已有的复制(发布订阅)当中,这种需求应该是很正常,也很常见的。但是在已有的复制(发布订阅)当中增加新表/文章,往往需要将整个快照重新初始化,这样做虽然简单,但是往往在实际应用中会出现一些问题,例如,发布订阅的表比较多,数据量比较大,那么重新初始化快照往往需要很长一段时间,影响系统正常运行。

在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命令添加。如下所示:

 

image

 

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

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

image

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

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
4月前
|
SQL 数据库 数据安全/隐私保护
SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
【8月更文挑战第14天】解决SQL Server事务复制Log Reader作业因数据库所有者问题无法启动的方法:首先验证数据库所有者是否有效并具足够权限;若非,使用`ALTER AUTHORIZATION`更改为有效登录名。其次,确认Log Reader使用的登录名拥有读取事务日志所需的角色权限。还需检查复制配置是否准确无误,并验证Log Reader代理的连接信息及参数。重启SQL Server Agent服务或手动启动Log Reader作业亦可能解决问题。最后,审查SQL Server错误日志及Windows事件查看器以获取更多线索。
|
4月前
|
SQL 数据库
如何在 SQL Server 中创建自动增量
【8月更文挑战第10天】
72 3
如何在 SQL Server 中创建自动增量
|
4月前
|
SQL 关系型数据库 MySQL
SQL Server 事务执行、回滚
SQL Server 事务执行、回滚
50 0
|
SQL BI 数据库
SQL Server通过创建临时表遍历更新数据
SQL Server通过创建临时表遍历更新数据
220 0
SQL Server通过创建临时表遍历更新数据
|
SQL 存储 程序员
SQL Server——SQL Server触发器及事务和锁
SQL Server——SQL Server触发器及事务和锁
476 1
|
SQL 数据库
SQL Server 2012 创建数据库快照
原文:SQL Server 2012 创建数据库快照   不是所有的MSSQL数据库版本都支持数据库快照,只有Enterprise版本的才支持。 在其他版本上,以Business Intelligence Edition版本为例,创建快照时,会报如下错误 消息 1844,级别 16,状态 1,第 1 行Business Intelligence Edition 不支持 Database Snapshot。
1867 0
|
SQL 安全 数据库
SQL Server 复制:事务发布
原文:SQL Server 复制:事务发布 一、背景   在复制的运用场景中,事务发布是使用最为广泛的,我遇到这样一个场景:在Task数据库中有Basic与Group两个表,需要提供这两个表的部分字段给其它程序读取放入缓存,程序需要比较及时的获取到这些数据,作为DBA你需要从权限和性能控制的角度出...
1634 0
|
SQL 数据库
SQL Server 2008 中收缩数据库(DUMP,TRANSACTION,TRAN,无效,语法错误)
原文:SQL Server 2008 中收缩数据库(DUMP,TRANSACTION,TRAN,无效,语法错误) 从SQL SERVER 2008 开始,我们已经不能再用以前 DUMP TRAN 数据库名 WITH NO_LOG 的...
1640 0
|
SQL 数据库
SQL Server 临时表的删除
原文:SQL Server 临时表的删除 临时表与一般的表不同,它是保存到tempDb表中。临时表的表名与你所建的表名也不一样,因为他要为不同人的相同操作创建不同的临时表。 1、错误的删除操作: --错误的临时表删除操作,因为所在数据库不同IF  EXISTS (SELECT * FROM sysobjects WHERE object_id = OBJECT_ID(N'[dbo].
1506 0