本篇文章是SQL Server Replication系列的第六篇,详细内容请参考原文


合并复制,类似于事务复制,包括一个发布服务器,一个分发服务器和一个或多个订阅服务器。每一个发布服务器上可以定义多个发布。你也可以同时在同一台发布服务器上定义合并发布、事务发布和快照发布。同事务复制,每一个发布所包含的项目需要是单一数据库中的对象。不同的发布可以定义在不同的数据库上。一个项目可以被多个发布使用。All publications on a publisher, independent of their type, have to use the same distributor.
上面这一段和第三篇开篇介绍的事务复制中的发布服务器很类似。两者都是发布-订阅模式,并将数据从发布服务器移动到订阅服务器。相同之处也是在那里结束。
合并复制允许客户端(订阅服务器)与主服务器(发布服务器)断开连接。每一次重新连接时,发布服务器上的所有变更会拷贝到订阅服务器上,反之亦然。允许真正的同步,并且断开时不限制工作。
事务复制利用SQL Server事务日志将数据变更传送到订阅服务器。相比之下,合并复制在每次同步的过程中查看已发布表的数据。That helps to reduce the storage requirements on the each server while being disconnected from the rest of the replication setup. But it also introduces some storage overhead and inflexibility.第八篇将详细介绍它是如何工作的。
配置发布
本篇的剩余篇幅会介绍如何配置一个合并发布。假设你已经遵循第二篇配置好分发服务器,并且已经将发布服务器连接到分发服务器。
谁能创建一个发布
只要sysadmin固定服务器角色成员为复制启用了数据库,数据库中任何db_owner固定数据库角色的成员可以定义一个发布。为合并复制启用数据库,对象资源管理器下连接到发布服务器,右击复制,选择"发布服务器属性",如图6.1所示

图6.1 发布服务器属性
在打开的发布服务器属性对话框,选择"发布数据库"页,然后勾选对应数据库的合并列复制框,如图6.2所示

图6.2 为合并复制启用发布数据库
新建发布
在你为合并复制启用数据库后,你可以参照以下步骤创建一个发布。首先展开发布服务器实例(计划发布的数据库所在的实例)下的复制文件夹,右击"本地发布"子文件夹,并选择"新建发布…",如图6.3所示

图6.3 新建发布
新建发布向导被打开,第一个需要做选择的是发布数据库页面(图6.4)

图6.4 选择发布数据库
选择你想要发布的数据库,然后到下一个页面。下一个页面允许你选择发布类型,如图6.5所示

图6.5 选择合并发布
这一篇是关于合并复制,因此这里选择"合并发布"。一直到这里,这些步骤和事务复制的步骤是非常相似的。然而,在配置事务复制中却没有下面这个页面。它允许你选择"订阅服务器类型",如图6.6所示

图6.6 订阅服务器类型
这里你可以为发布指定订阅服务器将使用的SQL Server版本。你可以选择一个或多个版本。除了"SQL Server2008"其他的选择都有功能上的限制。详细内容请参考Books Online.
如果你的发布数据库已经包含一个合并发布,"订阅服务器类型"页面的选项会显著减少。同一数据库下的所有合并发布需要使用相同的订阅服务器类型。图6.7显示了存在另一个合并发布的例子

图6.7 已存在合并发布时的订阅服器类型
项目
订阅服务器类型确定好后,下一步是选择发布的数据库对象。在事务复制和合并复制中每一个发布的对象被称做项目。

图6.8 项目
图6.8显示了向导的"项目"页面。你可以选择表、函数、视图、索引视图、存储过程和同义词来发布。In merge replication most of these are "schema only" articles.这意味着数据库对象的定义会被复制到订阅服务器(其他的不会)。比如事务复制允许复制存储过程的执行,但在合并复制中这是不可能的。唯一允许复制除了定义之外的项目类型是表。
这种限制的原因是合并复制的工作机制。事务复制读取事务日志,因此能访问数据库中按顺序发生的每一个动作的详细清单。
合并复制依赖于一系列的触发器,因此被限制只能捕获数据(架构)变更。虽然这种方法有局限性,但部分可用项目类型变得更灵活。比如,你可以将没有主键的表进行合并复制,这在事务复制中是不可能的。更多关于合并复制的内部工作机制会在第八篇讲述。
当你选择一张表作为项目,在"项目属性"按钮下面会出现一个额外的复选框。它允许你选择"突出显示的表仅用于下载"。仅用于下载意味着不能在订阅服务器变更表中的数据。
你应该为那些包含数据但不能在订阅服务器进行变更的表选择这个选项。这个选项会引起在发布服务器上的数据收集减少,因为不再需要解决冲突问题。这对发布服务器上的性能和空间需求有巨大的影响。
这个复选框是"项目属性"中的一个属性的替代方法。这个选项控制表项目的双向性。它被称作同步方向(图6.9)。你可以通过点击图6.8中的项目属性打开。
对于"同步方向",你可以选择下面三个选项:
->双向
->仅下载到订阅服务器,禁止订阅服务器更改
->仅下载到订阅服务器,允许订阅服务器更改
"突出显示的表仅用于下载"复选框允许你在前两个选项中选择。如果你手动选择了第三项——允许订阅服务器更改,但不会传回到发布服务器而且可能被重写。

图6.9 同步方向
The fact that there is a single checkbox alternative for this option shows the importance of selecting the appropriate setting for your articles.当你点击项目属性按钮你可以选择为突出显示的项目设置选项,或者你也可以为与突出显示的项目同类型的所有项目设置选项。每个对象类型可用的选项列表参考Books Online.
项目属性对话框的第二个页签如图6.10所示。It allows you to specify how conflicts should be handled for each article by selecting a resolver.

图6.10 冲突解决程序
类似事务复制,你可以选择发布整张表,或者发布部分列。为了选择单独的列,通过点击表名前面的+号,展开列列表。

图6.11 筛选列
下一个页面是警告。这里可能会显示多条警告,在配置合并复制你最可能看到如图6.12所示警告

图6.12 项目问题
这条警告说明:所有合并项目都必须包含带有唯一索引的unipueidentifier列和ROWGUIDCOL属性。如果表中没有unipueidentifier列,SQL Server会自动添加该列。这个变更可能会打乱现有访问此表的代码。它还会增加表的大小(每行至少16bytes)。
警告:如果你删除合并复制,项目中自动添加的unipueidentifier列也会被自动移除。这将打乱那些复制创建后,依赖unipueidentifier列所写的代码。由于这些原因,最好在配置合并复制前手动添加unipueidentifier列。这样当他们删除时你就可以完全控制。
下一个页面如图6.13所示。这里针对表项目你可以添加一个行筛选。只有当发布中添加有表项目时才会显示这个页面。

图6.13 筛选表行
一个行筛选或者水平筛选类似于查询语句,如图6.14所示

图6.14 水平筛选
快照
接下来两个页面(图6.15、图6.16),deal with the snapshot agent and are almost identical to their counter parts on transactional replication. There are two differences that stand out:
->1、对于合并复制,向导建议立即创建快照,并且每14天创建一个新快照。对于事务复制两个复选框默认都没有勾选。合并复制主要针对客户端(订阅服务器)经常与发布服务器断开连接,重新同步的可能性远远高于事务订阅。为了在需要的时候有一个较新的可用快照,有必要让它定期生成一个新的快照。这就避免了在高峰期运行快照代理。查看第八篇的"快照代理"章节,了解更多的背景信息。
->2、合并复制不需要分发代理。因此你在代理安全页面只能看到快照代理。
你提供给快照代理的凭证需要与第三篇事务复制中的快照代理帐户有相同的访问权限。这些帐户需要是发布数据库和分发数据库中的db_owner固定数据库角色的成员。代理执行的帐户还需求对快照文件夹/共享有写入权限。

图6.15 快照代理

图6.16 代理安全性
完成发布配置
向导剩余页面和事务复制是相同的。如图6.17、图6.18、图6.19所示。这里你可以选择让向导执行配置或者是生成脚本文件。你需要为发布设定一个名称(MyFirstMergePublication)。
Finally you get to watch the progress of either executing or scripting the necessary changes.

图6.17 向导操作

图6.18 设置发布名称

图6.19 创建发布
潜在问题
类似事务复制,在配置合并复制时可能会出现各种问题。合并复制最常见的问题也是帐户没有合适的权限。如果你遇到这样的问题,你应该检查所有的帐户已经授予正确的权限。故障排除的详细内容请查看第十篇。你也可以参考第三篇提及的"潜在问题",大部分的建议同样适用于合并复制。
总结
这一篇介绍了配置合并发布。显示了如何创建发布并添加项目。罗列了不同类型的项目并讨论了它们的同步选项。同时指出与配置事务发布的不同之处。
类似事务复制,在配置好合并发布后也看不到很多东西。要想看到发生了什么,至少需要有一个订阅。下一篇我们将讨论如何配置合并订阅。

【译】第六篇 Replication:合并复制-发布的更多相关文章

  1. 【译】第九篇 Replication:复制监视器

    本篇文章是SQL Server Replication系列的第九篇,详细内容请参考原文. 复制监视器允许你查看复制配置组件的健康状况.这一篇假设你遵循前八篇,并且你已经有一个合并发布和事务发布.启动复 ...

  2. 【译】第一篇 Replication:复制简介

    本篇文章是SQL Server Replication系列的第一篇,详细内容请参考原文. 复制这个词来自拉丁语中的"replicare",意味着重复.Replication des ...

  3. 第六篇 Replication:合并复制-发布

    本篇文章是SQL Server Replication系列的第六篇,详细内容请参考原文. 合并复制,类似于事务复制,包括一个发布服务器,一个分发服务器和一个或多个订阅服务器.每一个发布服务器上可以定义 ...

  4. 第九篇 Replication:复制监视器

    本篇文章是SQL Server Replication系列的第九篇,详细内容请参考原文. 复制监视器允许你查看复制配置组件的健康状况.这一篇假设你遵循前八篇,并且你已经有一个合并发布和事务发布.启动复 ...

  5. 第一篇 Replication:复制简介

    本篇文章是SQL Server Replication系列的第一篇,详细内容请参考原文. 复制这个词来自拉丁语中的"replicare",意味着重复.Replication des ...

  6. 【译】第二篇 Replication:分发服务器的作用

    本篇文章是SQL Server Replication系列的第二篇,详细内容请参考原文. 分发服务器是SQL Server复制的核心组件.分发服务器控制并执行数据从一个服务器移动到另一个服务器的进程. ...

  7. python第六篇:Python复制超大文件、复制二进制文件

    Python文件复制 # 写程序实现复制文件的功能 # 要求: # 1. 源文件路径和目标文件路径需要手动输入 # 2. 要考虑文件关闭的问题 # 3. 要考虑复制超大文件的问题 # 4. 要能复制二 ...

  8. SQL Server 合并复制如何把备份的发布端或订阅端BAK文件还原为数据库

    SQL Server的合并复制,是可以备份发布端和订阅端数据库为BAK文件的,但是问题是合并复制在数据库中自动创建的系统表.触发器.表中的RowGuid列等也会被一起备份. 这里我们举个例子,下面图中 ...

  9. SQL Server 合并复制的Article可以指定单个对象的更新方向

    如下所示,这是SQL Server中一个合并复制发布端的Article: 我们可以在Article中选择一个对象,比如这里我们选择MD.Car表,点击鼠标右键,选择"Set Properti ...

随机推荐

  1. [学习]仿照cnblog 搭建 Oracle RAC 双节点 困.. 后续做不下去了..

    1. 学习地址: https://blog.csdn.net/yuzifen?t=1 2. 克隆之前创建好的虚拟机: 3. 给虚拟机增加新的硬盘. 注意事项 1) 必须是厚置备的磁盘才可以. 2) 必 ...

  2. vector(char*)和vector(string)

    vector<char*> ch; vector<string> str; for(int i=0;i<5;i++) { char *c=fun1();//通过这个语句产 ...

  3. Jquery 中 $.getJSON的用法

    之前类似的方法用过 $.post, $.get,$.ajax,还是第一次用这个 $.getJSON. 前三个都是用作异步请求的,那么最后一个呢?其实也是异步请求的,和 $.get 最类似,因为他也是将 ...

  4. Qt——容器类(译)

    注:本文是我对Qt官方文档的翻译,错误之处还请指正. 原文链接:Container Classes 介绍 Qt库提供了一套通用的基于模板的容器类,可以用这些类存储指定类型的项.比如,你需要一个大小可变 ...

  5. P2617 Dynamic Rankings

    题目描述 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是多少(1≤k≤ ...

  6. selenium+python定位元素的方法及使用

    selenium的八种定位方法 By.ID 通过id定位 By.CLASS_NAME 通过className定位 By.CSS_SELECTOR 通过CSS定位 By.LINK_TEXT 通过link ...

  7. linq 获取实体列表中的某个字段返回ilist<string>

     var list = list.Select(t => t.Field<string>("列名")).ToList();  var list = list.Se ...

  8. 【刷题】BZOJ 1061 [Noi2008]志愿者招募

    Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完 ...

  9. NetApp存储方案及巡检命令

    一.MCC概述 Clustered Metro Cluster(简称MCC)是Netapp Data Ontap提供的存储双活解决方案,当初的方案是把1个FAS/ V系列双控在数据中心之间拉远形成异地 ...

  10. listview android:cacheColorHint,android:listSelector属性作用(转)

    ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉, 原因是,滚动时,列表里面的view重绘时,用的依 ...