SQL Server Replication 总结

合并复制中,数据库架构的更改要重新生成发布端的快照


 

在SQL Server 合并复制中,如果在发布端做了数据库架构的更改(例如新建表,更改表结构等),原则上来说都需要重新生成发布端的快照,订阅端才能同步这些更改(订阅端要“重新初始化”)。

 

但是我发现目前SQL Server 2016中,如果只是更改发布端表的列类型、甚至新加一列,即便是不重新生成发布端快照,订阅端只要同步一次,那么这些更改也会同步到订阅端表上。但是如果是在发布端表上新增了一个索引,那么就必须重新生成发布端快照,并且重新初始化订阅端,新加的索引才能从发布端同步到订阅端。

所以原则上来说只要是更改了数据库中对象的架构,那么还是推荐大家,重新生成发布端的快照,并且重新初始化订阅端,这样能够百分之百保证发布端和订阅端保持一致。

 

 

订阅端不能做数据库对象架构的更改


 

如果用下面语句更改订阅端数据库的表Person,对其增加一个列Cash会失败,错误如下:

ALTER TABLE [dbo].[Person]
ADD Cash decimal(20,2)

 

Msg 21531, Level 16, State 1, Procedure sp_MSmerge_altertable, Line 377 [Batch Start Line 0]
The data definition language (DDL) command cannot be executed at the Subscriber. DDL commands can only be executed at the Publisher. In a republishing hierarchy, DDL commands can only be executed at the root Publisher, not at any of the republishing Subscribers.
Msg 21530, Level 16, State 1, Procedure sp_MSmerge_ddldispatcher, Line 191 [Batch Start Line 0]
The schema change failed during execution of an internal replication procedure. For corrective action, see the other error messages that accompany this error message.
Msg 3609, Level 16, State 2, Line 1
The transaction ended in the trigger. The batch has been aborted.

可以看到错误提示,只能在发布端执行DDL命令,无法在订阅端执行DDL命令。

 

 

Replication目前的支持度


 

文件表

目前在SQL Server 2016中,FileTable表不支持Replication,如下图所示:

但是如果是包含FILESTREAM列的普通表,是可以支持Replication的

CREATE TABLE Attachment (
    [ID] [UNIQUEIDENTIFIER] ROWGUIDCOL NOT NULL PRIMARY KEY,
    [FileName] NVARCHAR(100) NULL,
    [CreateUser] NVARCHAR(100) NULL,
    [CreateDatetime] DATETIME NULL,
    [Content] VARBINARY(MAX) FILESTREAM NULL  
)
FILESTREAM_ON FileStreamGroupFirst

 

内存优化表

目前在SQL Server 2016中,内存优化表还不支持Replication

下图中表Reseller实际上是一个内存优化表,可以看到在合并复制的Articles中其可以被选中:

但是点击OK按钮后,会提示错误如下:

提示内存优化表不支持Replication,这算是一个遗憾,不知道以后的SQL Server版本是否会让内存优化表支持Replication

 

转载于:https://www.cnblogs.com/OpenCoder/p/10090882.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值