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


在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

SQL Server Replication 总结的更多相关文章

  1. SQL Server Replication 中关于视图的点滴

    在服务器A数据库TEST新建了一个本地发布(Local Publications)RPL_GES_MIS_TEST,在服务器B数据库RPL_TEST上创建了一个本地订阅(Local Subscript ...

  2. 如何用SQL脚本在SQL Server Replication中创建合并复制,以及怎么创建分区合并复制

    假设我们要创建合并复制的发布端数据库是EFDemo其中有四张表,订阅端数据库是EFDemoSubscription,如下图所示: 首先创建发布端快照代理Sql agent job:"EFDe ...

  3. SQL Server Replication的分发服务器的快照文件夹位置查找

    SQL Server分发服务器配置中,需要配置快照文件夹(Snapshot Folder),用于存储发布的数据和架构文件的工作目录,那么如何查找当前SQL Server数据库服务器的分发服务器的快照文 ...

  4. SQL Server Replication issues-the row was not found at the subscriber end

    Issue type: 1.find out the number 0x0006F18F00006082002300000000 from publication end. 2.use below s ...

  5. 通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...

  6. SQL Server翻译目录

    从SQLServerCentral翻译部分Stairways文章,设置目录方便阅读(2015-12更新)SQL Server代理系列第一篇 SQL Server代理概述第二篇 SQL Server代理 ...

  7. SQL Server复制入门(一)----复制简介【转】

    SQL Server复制入门(一)----复制简介 简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是 ...

  8. sql server 2008数据复制

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数 ...

  9. SQL Server事务 事务日志

    事务 (SQL Server) 一.事务概念    事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.因此事务是一个不可分割的工作逻辑单元.在数据库系统 ...

随机推荐

  1. 配置Codis-Service主机

    Codis-Service配置在三台机器上,每台机器分别配置3个redis,如下: ip:(redis-.redis-.redis-) ip:(redis-.redis-.redis-) ip:(re ...

  2. Jmeter报错之jmeter.gui.action.ActionRouter: Error processing gui.action.Start@1b7c473a java.lang.ArrayIndexOutOfBoundsException

    一个使用了很久的Jmeter脚本,运行时Jmeter的UI界面上点击绿色按钮后,完全无反应,只有log报错,如下: 2017/06/28 14:29:23 ERROR - jmeter.gui.act ...

  3. curl 详解【转】

    原文:https://blog.csdn.net/lansesl2008/article/details/14523303 用途说明 curl命令是一个功能强大的网络工具,它能够通过http.ftp等 ...

  4. XSS事件(一)

    前言 ​ 最近做的一个项目因为安全审计需要,需要做安全改造.其中自然就包括XSS和CSRF漏洞安全整改.关于这两个网络安全漏洞的详细说明,可以参照我本篇博客最后的参考链接.当然,我这里并不是想写一篇安 ...

  5. Spring Security认证配置(三)

    学习本章之前,可以先了解下上篇Spring Security认证配置(二) 本篇想要达到这样几个目的: 1.登录成功处理 2.登录失败处理 3.调用方自定义登录后处理类型 具体配置代码如下: spri ...

  6. js 中格式化时间

    在js中常常要求对时间的输出格式进行格式化,比如 2017-01-01 10:10,比较麻烦的是月,日,小时,分.它们的格式一般要求两位,如果小于10的话需要在前边补0,当然这算不上什么问题,可以通过 ...

  7. EasyUI 添加一行的时候 行号出现负数的解决方案

    原因是:在jquery_easyui.js 看方法 insertRow : function(_736, _737, row) 以下小代码算行号,if (opts.pagination) { _73c ...

  8. [日常] go语言圣经-声明,变量,赋值,类型,包和文件习题

    go语言圣经-声明1.四种类型的声明语句:var.const.type和func,分别对应变量.常量.类型和函数实体对象的声明2.包一级声明语句声明的名字可在整个包对应的每个源文件中访问,局部声明的名 ...

  9. 中国网建SMS短信接口调用(java发送和接收手机短信)

    1.先注册账号,一定要填写好签名格式.不填会返回-51错误.   代码信息接口详细==>http://sms.webchinese.cn/api.shtml   . 2.测试代码 package ...

  10. springboot学习-springboot使用spring-data-jpa操作MySQL数据库

    我们在上一篇搭建了一个简单的springboot应用,这一篇将介绍使用spring-data-jpa操作数据库. 新建一个MySQL数据库,这里数据库名为springboot,建立user_info数 ...