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

时间:2022-05-14 13:41:16

本篇文章是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所示
第六篇 Replication:合并复制-发布
图6.1 发布服务器属性
在打开的发布服务器属性对话框,选择"发布数据库"页,然后勾选对应数据库的合并列复制框,如图6.2所示
第六篇 Replication:合并复制-发布
图6.2 为合并复制启用发布数据库
新建发布
在你为合并复制启用数据库后,你可以参照以下步骤创建一个发布。首先展开发布服务器实例(计划发布的数据库所在的实例)下的复制文件夹,右击"本地发布"子文件夹,并选择"新建发布…",如图6.3所示
第六篇 Replication:合并复制-发布
图6.3 新建发布
新建发布向导被打开,第一个需要做选择的是发布数据库页面(图6.4)
第六篇 Replication:合并复制-发布
图6.4 选择发布数据库
选择你想要发布的数据库,然后到下一个页面。下一个页面允许你选择发布类型,如图6.5所示
第六篇 Replication:合并复制-发布
图6.5 选择合并发布
这一篇是关于合并复制,因此这里选择"合并发布"。一直到这里,这些步骤和事务复制的步骤是非常相似的。然而,在配置事务复制中却没有下面这个页面。它允许你选择"订阅服务器类型",如图6.6所示
第六篇 Replication:合并复制-发布
图6.6 订阅服务器类型
这里你可以为发布指定订阅服务器将使用的SQL Server版本。你可以选择一个或多个版本。除了"SQL Server2008"其他的选择都有功能上的限制。详细内容请参考Books Online.
如果你的发布数据库已经包含一个合并发布,"订阅服务器类型"页面的选项会显著减少。同一数据库下的所有合并发布需要使用相同的订阅服务器类型。图6.7显示了存在另一个合并发布的例子
第六篇 Replication:合并复制-发布
图6.7 已存在合并发布时的订阅服器类型
项目
订阅服务器类型确定好后,下一步是选择发布的数据库对象。在事务复制和合并复制中每一个发布的对象被称做项目。
第六篇 Replication:合并复制-发布
图6.8 项目
图6.8显示了向导的"项目"页面。你可以选择表、函数、视图、索引视图、存储过程和同义词来发布。In merge replication most of these are "schema only" articles.这意味着数据库对象的定义会被复制到订阅服务器(其他的不会)。比如事务复制允许复制存储过程的执行,但在合并复制中这是不可能的。唯一允许复制除了定义之外的项目类型是表。
这种限制的原因是合并复制的工作机制。事务复制读取事务日志,因此能访问数据库中按顺序发生的每一个动作的详细清单。
合并复制依赖于一系列的触发器,因此被限制只能捕获数据(架构)变更。虽然这种方法有局限性,但部分可用项目类型变得更灵活。比如,你可以将没有主键的表进行合并复制,这在事务复制中是不可能的。更多关于合并复制的内部工作机制会在第八篇讲述。
当你选择一张表作为项目,在"项目属性"按钮下面会出现一个额外的复选框。它允许你选择"突出显示的表仅用于下载"。仅用于下载意味着不能在订阅服务器变更表中的数据。
你应该为那些包含数据但不能在订阅服务器进行变更的表选择这个选项。这个选项会引起在发布服务器上的数据收集减少,因为不再需要解决冲突问题。这对发布服务器上的性能和空间需求有巨大的影响。
这个复选框是"项目属性"中的一个属性的替代方法。这个选项控制表项目的双向性。它被称作同步方向(图6.9)。你可以通过点击图6.8中的项目属性打开。
对于"同步方向",你可以选择下面三个选项:
->双向
->仅下载到订阅服务器,禁止订阅服务器更改
->仅下载到订阅服务器,允许订阅服务器更改
"突出显示的表仅用于下载"复选框允许你在前两个选项中选择。如果你手动选择了第三项——允许订阅服务器更改,但不会传回到发布服务器而且可能被重写。
第六篇 Replication:合并复制-发布
图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.
第六篇 Replication:合并复制-发布
图6.10 冲突解决程序
类似事务复制,你可以选择发布整张表,或者发布部分列。为了选择单独的列,通过点击表名前面的+号,展开列列表。
第六篇 Replication:合并复制-发布
图6.11 筛选列
下一个页面是警告。这里可能会显示多条警告,在配置合并复制你最可能看到如图6.12所示警告
第六篇 Replication:合并复制-发布
图6.12 项目问题
这条警告说明:所有合并项目都必须包含带有唯一索引的unipueidentifier列和ROWGUIDCOL属性。如果表中没有unipueidentifier列,SQL Server会自动添加该列。这个变更可能会打乱现有访问此表的代码。它还会增加表的大小(每行至少16bytes)。
警告:如果你删除合并复制,项目中自动添加的unipueidentifier列也会被自动移除。这将打乱那些复制创建后,依赖unipueidentifier列所写的代码。由于这些原因,最好在配置合并复制前手动添加unipueidentifier列。这样当他们删除时你就可以完全控制。
下一个页面如图6.13所示。这里针对表项目你可以添加一个行筛选。只有当发布中添加有表项目时才会显示这个页面。
第六篇 Replication:合并复制-发布
图6.13 筛选表行
一个行筛选或者水平筛选类似于查询语句,如图6.14所示
第六篇 Replication:合并复制-发布
图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固定数据库角色的成员。代理执行的帐户还需求对快照文件夹/共享有写入权限。
第六篇 Replication:合并复制-发布
图6.15 快照代理
第六篇 Replication:合并复制-发布
图6.16 代理安全性
完成发布配置
向导剩余页面和事务复制是相同的。如图6.17、图6.18、图6.19所示。这里你可以选择让向导执行配置或者是生成脚本文件。你需要为发布设定一个名称(MyFirstMergePublication)。
Finally you get to watch the progress of either executing or scripting the necessary changes.
第六篇 Replication:合并复制-发布
图6.17 向导操作
第六篇 Replication:合并复制-发布
图6.18 设置发布名称
第六篇 Replication:合并复制-发布
图6.19 创建发布
潜在问题
类似事务复制,在配置合并复制时可能会出现各种问题。合并复制最常见的问题也是帐户没有合适的权限。如果你遇到这样的问题,你应该检查所有的帐户已经授予正确的权限。故障排除的详细内容请查看第十篇。你也可以参考第三篇提及的"潜在问题",大部分的建议同样适用于合并复制。
总结
这一篇介绍了配置合并发布。显示了如何创建发布并添加项目。罗列了不同类型的项目并讨论了它们的同步选项。同时指出与配置事务发布的不同之处。
类似事务复制,在配置好合并发布后也看不到很多东西。要想看到发生了什么,至少需要有一个订阅。下一篇我们将讨论如何配置合并订阅。