本篇文章是SQL Server Replication系列的第七篇,详细内容请参考原文。
订阅服务器就是复制发布项目的所有变更将传送到的服务器。每一个发布需要至少一个订阅,但是一个发布可以有多个订阅。这一篇假设你遵循了前面六篇,并且你已经配置好合并发布。
配置订阅
为了能创建订阅,你必须使用一个(能够访问订阅服务器和发布服务器的)登录名连接到数据库。另外,这个登录名至少需要是订阅数据库和发布数据库的db_owner角色的成员。
连接到发布服务器
首先你需要在对象资源管理器下连接到订阅服务器。打开复制文件夹,右击"本地订阅",选择"新建订阅…",如图7.1所示,这会打开新建订阅向导
图7.1 新建订阅
这里的第一步是让订阅服务器知道使用哪个发布服务器。向导的第二个页面是"发布"(图7.2)。这里我们需要分辨发布服务器、发布数据库以及发布
图7.2 查找发布
发布服务器下拉菜单包含了你已经连接的服务器名称——订阅服务器。点击"查找SQL Server发布服务器…",这会打开一个连接对话框,允许你连接到发布服务器。
图7.3 选择发布
在你连接到发布服务器之后,"数据库和发布"会显示发布服务器上所有的发布。图7.3你可以看到在第六篇所创建的合并发布。
选择订阅类型
如果你阅读过事务发布,你会记得不需要选择复制类型(复制类型是在创建发布时定义的),你只需为订阅模式选择推送订阅或请求订阅,合并复制也是这样的。对于事务复制推送订阅和请求订阅的区别是分发代理在哪执行。合并复制没有使用分发代理,每一个订阅有它自己的合并代理。对于合并复制,推送或请求订阅影响合并代理在哪执行。
推送订阅或请求订阅
订阅向导的"合并代理位置"页(图7.4)允许你选择推送订阅或请求订阅。如果你选择推送订阅,合并代理在分发服务器上执行。
图7.4 选择合并代理位置
如果你选择请求订阅,合并代理在订阅服务器上执行。
让代理在订阅服务器上执行,给订阅服务器控制同步何时发生,同时也能减少分发服务器的压力。合并复制主要设计为"work disconnected–synchronize when connected",请求订阅是最常用的。
在事务复制中,你可能让一个单一发布中的某些订阅是推送订阅,另一些是请求订阅。你只需多次运行向导创建这种模式。
订阅类型的选择会引起向导后续页面的不同。这两种类型我们都会演示,因此不管你是选择哪一个,你依旧能跟随后面的例子。
目标数据库
在新建订阅向导的下一个页面,如图7.5所示
图7.5 选择订阅数据库
这里你可以连接任意多的订阅服务器(通过点击"添加订阅服务器"按钮)并且为它们选择目标数据库。启动向导的服务器会自动添加到列表中。虽然有可能使用同一服务器下的不同数据库订阅一个发布,但这个向导不允许你多次添加相同的订阅服务器。
当为订阅服务器选择目标数据库时,你可以选择服务器上已存在的数据库。你也可以选择"新建数据库…"。这个选项会打开新建数据库向导,并允许你创建一个新的数据库。当你选择一个已存在的数据库时,你需要非常小心选择正确的数据库。复制的初始化操作会在订阅数据库中删除并重建所有的发布对象。如果你选择了错误的数据库,并且数据库中存在和发布对象同名的对象,这些对象将会被删除。在这个过程中不会有任何提醒信息。
安全性
下一个向导页面允许你设置用于连接到发布服务器、分发服务器、订阅服务器和执行代理的帐户。对于你之前选择的每一个订阅服务器,你都要点击订阅服务器名称那一行末端的省略号按钮进行选择。
图7.6 合并代理安全性
在点击省略号按钮后,会弹出一个新页面让你选择。你的选择会显示在图7.6的两个灰色列中。依据你所选择的推送还是请求订阅,页面显示会有所不同。类似事务复制,配置合并复制需要大量连接信息。在第八篇将详细讲述合并复制是如何运转的,以及谁该连接到谁。现在我们需要允许合并代理连接到发布服务器、分发服务器和订阅数据库。
推送订阅
如果你在前面的向导中选择了推送订阅,点击订阅服务器名称那一行末端的省略号按钮打开图7.7所示对话框。它需要你提供一个Windows帐户来运行合并代理。这个Windows帐户也用于连接到发布服务器和分发服务器。你可以选择模拟进程帐户或SQL登录名连接到订阅服务器。
图7.7 推送订阅合并代理安全性
用于执行合并代理的帐户需要以下权限:
->分发数据库中的db_owner固定数据库角色的成员
->发布访问列表(PAL)成员
->对快照文件夹/共享有读取权限
用于连接到订阅服务器的帐户需要是订阅数据库中的db_owner固定数据库角色的成员
请求订阅
如果你之前选择了请求订阅,图7.8显示了合并代理安全性。同样你需要提供一个Windows帐户来运行合并代理。对于订阅代理是在订阅服务器上执行,因此这个Windows帐户也用于连接到订阅服务器。你可以选择模拟进程帐户或SQL登录名连接到发布服务器和分发服务器。
图7.8 请求订阅合并代理安全性
用于执行合并代理的帐户需要是订阅数据库中的db_owner固定数据库角色的成员。用于连接到发布服务器和分发服务器的帐户需要以下权限:
->发布访问列表(PAL)成员
->Guest access to the distribution database
->对快照文件夹/共享有读取权限
帐户不需要是分发数据库中的db_owner固定数据库角色的成员。
如果你将上面的页面和事务复制进行对比,你会发现合并订阅需要额外连接发布服务器。事务复制只提及要连接分发服务器和订阅服务器,并没有发布服务器。然而,事务复制中用于连接分发服务器的帐户都必须在发布访问列表(PAL)。为了在发布访问列表,这个帐户需要能访问发布数据库。对于合并复制用于连接分发服务器的帐户也需要是发布访问列表的成员。因此用于连接分发服务器的帐户和连接发布服务器的帐户是相同的。
发布访问列表
第四篇详细介绍了发布访问列表。为了有资格成为PAL成员,登录名必须满足这些特性:
->发布服务器的登录名
->分发服务器的登录名
->对发布数据库具有访问权限
更多关于如何添加帐户到PAL的内容,请参考第四篇。
一旦登录名被添加到PAL,它自动成为发布数据库中几个额外数据库角色的成员。不要手动移除它们。
计划
安全性配置后是定义同步计划。"同步计划"向导页(图7.9),允许你分别为每一个订阅设置连续运行、按需运行或定义计划。事务复制中默认是连续运行,但是如果订阅服务器和发布服务器之间的连接不保证,这个就没什么必要。如果你知道订阅服务器在固定的时间连接,比如说每天午夜,你就可以为同步定义一个计划。这里默认设置是按需运行。这个按需可以通过外部应用触发,比如每次建立VPN连接。
图7.9 同步计划
初始化
下一个页面是初始化(图7.10),它让你设置是否以及何时初始化订阅数据库。类似事务复制,在大多数情况下,你需要初始化订阅。可以在Books Online查看何时可以跳过初始化操作。
如果你有大量数据需要复制,初始化操作需要花费一些时间,因此你需要确保订阅服务器与发布服务器的连接在初始化过程中不会被中断。如果在这选择"首次同步时",用户开始第一个同步时就得等待初始化完成。如果选择"立即",在你断开订阅服务器前得等待。
图7.10 初始化订阅
订阅类型
前面的向导页面和事务复制中的非常相似,下一个页面(图7.11)则是合并复制中特有的。它允许你选择订阅类型。可用选项是"服务器","客户端":
1、如果你想重新发布订阅服务器上的数据,你就得选择"服务器"。如果你选择客户端,之后你在这个订阅数据库上创建发布时就会出错。
2、你可以为"服务器"订阅设定优先级。当不同订阅服务器上有冲突时就会使用这个优先级来解决。客户端订阅先与发布服务器同步者入选。你可以在第八篇看到解决冲突的详细信息。
图7.11 订阅类型
完成配置
最后三个向导页面你应该很熟悉了。让你选择向导结束时是创建订阅还是创建脚本文件。你可以重新查看所有的设置,在向导执行时你可以看到一个spinning wheel.在所有操作完成后,你可以查看报告告诉哪些成功哪些失败。三个页面如图7.12、图7.13、图7.14所示
图7.12 向导操作
图7.13 查看已选选项
图7.14 创建订阅
保持期
保持期,在事务复制中,它是发布的一个属性。然而,它直接影响到订阅服务器,因此在这里提到。
合并复制中的保持期设置比事务复制中的简单得多。
事务复制有三个保持期设置,两个是处理分发数据库中的事务数据。
合并复制只有一个设置,定义订阅多久过期。一旦订阅超过限制时间没有成功同步,你就得重新初始化订阅。这种情况下,自上次同步后在订阅上的变更将丢失。
你可以在发布属性对话框的常规页面设置这个保持期。为了得到这个页面,你需要在对象资源管理器下连接到发布服务器,复制->本地发布,右击你想修改的发布,选择属性。在发布属性的常规页(图7.15)。你可以修改发布的描述和订阅过期设置
图7.15 订阅过期
手动同步
如果你想手动同步一个订阅,你可以使用下面步骤:
对象资源管理器下连接到订阅服务器,复制->本地订阅,右击你想同步的订阅,选择查看同步状态(图7.16)
图7.16 查看同步状态
打开图7.17所示对话框,你可以启动同步,它会显示最后一次同步的状态。为了初始化同步,点击"启动"按钮。你也可以点击"查看作业历史记录"按钮查看合并代理作业。
图7.17 同步状态对话框
总结
这一篇我们配置了合并复制订阅。首先我们讲述如何连接到发布服务器,接着讨论推送订阅和请求订阅的不同点。我们查看了如何选择目标数据库,如何设置代理安全性,以及发布访问列表。我们学习了如何计划同步事件,如何选择订阅初始化选项。介绍了订阅类型以及冲突优先级设置。最后讨论订阅过期设置。
如果你遵循所有步骤,现在你应该有一个合并复制。你可以测试你的复制场景,通过在发布服务器和/或订阅服务器修改数据,查看它们是否被复制。记住,你需要手动同步或者等待同步计划发生(依赖"同步计划"页的设置),之后你才能看到在复制的另一边发生数据变更。
下一篇将据探讨合并复制工作机制。还会介绍如何处理合并复制中的冲突,并引入冲突解决方案程序。