【译】第四篇 Replication:事务复制-订阅服务器

时间:2023-03-08 23:35:57
【译】第四篇 Replication:事务复制-订阅服务器

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


订阅服务器就是复制发布项目的所有变更将传送到的服务器。每一个发布需要至少一个订阅,但是一个发布可以有多个订阅。这一篇假设你遵循了前面三篇,并且你已经配置好发布。
配置订阅
为了能创建订阅,你必须使用一个(能够访问订阅服务器和发布服务器的)登录名连接到数据库。另外,这个登录名至少需要是订阅数据库和发布数据库的db_owner角色的成员。
连接到发布服务器
首先你需要在对象资源管理器下连接到订阅服务器。打开复制文件夹,右击"本地订阅",选择"新建订阅…",如图4.1所示,这会打开新建订阅向导
【译】第四篇 Replication:事务复制-订阅服务器
图4.1 新建订阅
向导中第一个需要做选择的是发布页面(图4.2)。这里我们需要分辨发布服务器、发布数据库以及发布
【译】第四篇 Replication:事务复制-订阅服务器
图4.2 查找发布
下拉菜单的顶部包含了你已经连接的服务器名称——订阅服务器。由于我们的场景中发布服务器与订阅是不同的实例,你需要在下拉列表中点击"查找SQL Server发布服务器…"。这会打开一个连接对话框,允许你连接到发布服务器。
【译】第四篇 Replication:事务复制-订阅服务器
图4.3 选择发布
在你连接到发布服务器之后,发布页面会显示发布服务器上所有的发布,按发布数据库分组。图4.3你可以看到在第三篇所创建的发布。
选择订阅类型
不同于创建发布,创建订阅时你不需要选择你想使用的发布类型。因为发布类型是在创建发布时所定义的。在事务复制中你需要单独为每一个订阅服务器确定订阅类型,你可以选择推送订阅或者请求订阅。
数据通过分发代理从分发数据库移动到订阅数据库。每一个订阅由它自己的分发代理服务的。推送订阅与请求订阅的不同之处是,代理在哪执行,因此谁有权控制数据移动。
推送订阅
对于推送订阅,代理在分发服务器上执行,"pushing"数据到订阅服务器。
如果你需要将数据以连续的方式,在最短的时间内从发布服务器移动到订阅服务器,最好选择推送订阅。这是目前在事务复制中最常用的。
【译】第四篇 Replication:事务复制-订阅服务器
图4.4 推送订阅
图4.4显示了"分发代理位置"页面。如果你想要这个订阅是推送订阅,选择在分发服务器上运行所有代理。
请求订阅
对于请求订阅,分发代理是在订阅服务器上执行,从分发服务器"pulling"数据。如果订阅服务器需要控制数据流动,可能因为订阅服务器不能一直连接到网络,或者因为你想让某个给定进程完成后再变更订阅服务器上的数据,最好选择请求订阅。这会给订阅服务器完全控制数据流动。
如果你想要这个订阅是请求订阅,选择在订阅服务器上运行每个代理。
【译】第四篇 Replication:事务复制-订阅服务器
图4.5 请求订阅
订阅类型的选择会引起向导后续页面的不同。这两种类型我们都会演示,因此不管你是选择哪一个,你依旧能跟随后面的例子。
目标数据库
在新建订阅向导的下一个页面,如图4.6所示,你可以选择订阅的目标数据库。在"订阅数据库"的下拉列表显示了你有权限访问的所有数据库列表。你也可以选择"新建数据库…"。这个选项会打开新建数据库向导,并允许你创建一个新的数据库。
【译】第四篇 Replication:事务复制-订阅服务器
图4.6 订阅服务器
当你选择一个已存在的数据库时,你需要非常小心选择正确的数据库。复制的初始化操作会在订阅数据库中删除并重建所有的发布对象。
注意:如果你选择了错误的数据库,并且数据库中存在和发布对象同名的对象,这些对象将会被删除。在这个过程中不会有任何提醒信息。
在图4.6中不仅允许你选择订阅数据库,还允许你选择订阅服务器。准确的说,它允许你一次性配置好所有的订阅服务器和订阅数据库。如果你点击页面底部的"添加订阅服务器"按钮,一个标准的连接对话框让你选择另一台服务器作为订阅服务器。你可以添加任意多的订阅服务器,然而,每台服务器只能被选择一次。对于每一台服务器你可以按照上面的方法添加目标数据库。多个订阅服务器的例子如图4.7所示
【译】第四篇 Replication:事务复制-订阅服务器
图4.7 多个订阅服务器
安全性
下一个页面允许你设置用于连接到分发服务器和订阅服务器的帐户和执行代理的帐户。对于你之前选择的每一个订阅服务器,你都要点击订阅服务器名称那一行末端的省略号按钮进行选择。图4.8显示了多个订阅服务器情况
【译】第四篇 Replication:事务复制-订阅服务器
图4.8 分发代理安全性
在点击省略号按钮后,会弹出一个新页面让你选择。你的选择会显示在图4.8的两个灰色列中。依据你所选择的推送还是请求订阅,页面显示会有所不同。
配置复制所需的连接数和帐户数最初看起来比较多。在第五篇将详细讲述复制是如何运转的,以及谁该连接到谁。现在我们需要允许分发代理连接到分发数据库和订阅数据库。这些连接在图4.8、图4.9和图4.10中设置。
推送订阅
两种订阅下你都需要提供一个Windows帐户来运行分发代理。
对于推送订阅,分发代理在分发服务器上执行。连接到分发数据库是通过模拟分发代理进程帐户。连接到订阅数据库,你可以选择通过模拟进程用户或使用SQL Server登录名。如果所有的机器在一个域中,大部分情况下选择模拟进程用户是一个好主意。如果复制的机器不在同一个域,你最好使用SQL Server登录名。你可以在图4.9看到不同的选项
【译】第四篇 Replication:事务复制-订阅服务器
图4.9 推送订阅分发代理安全性
请求订阅
对于请求订阅,分发代理在订阅服务器上运行。连接到订阅数据库是通过模拟分发代理进程帐户。你可以选择通过模拟进程用户或使用SQL Server登录名连接到分发数据库。
【译】第四篇 Replication:事务复制-订阅服务器
图4.10 请求订阅分发代理安全性
发布访问列表
Independent of the selection of push or pull subscription,在前面步骤中使用的帐户需要授予一系列的安全权限。首先运行代理的帐户需要对快照文件夹/共享有读取权限。连接到订阅数据库的帐户需要是订阅数据库中的db_owner固定数据库角色的成员。连接到分发数据库的帐户需要是分发数据库中的db_owner固定数据库角色的成员以及是发布访问列表(PAL)的成员。
发布访问列表是一个额外的安全措施,用来防止未认证用户访问复制数据。任何登录名要在分发服务器上读取发布数据都需要是PAL的成员。The PAL is maintained as internal information in the publication database that is not directly accessible using Transact-SQL.
为了添加登录名到PAL,你需要在对象资源管理器连接到发布服务器。复制->本地发布,右击需要添加用户到PAL的发布,弹出菜单选择属性,如图4.11所示
【译】第四篇 Replication:事务复制-订阅服务器
图4.11 发布属性
发布属性有几个页签,找到"发布访问列表"。"发布访问列表"包含属于PAL成员的所有登录名。点击右侧"添加"按钮,打开"添加发布访问项",如图4.12所示
【译】第四篇 Replication:事务复制-订阅服务器
图4.12 添加发布访问项
这个页面包含所有有资格成为PAL成员的登录名。为了有资格,登录名必须满足这些特性:
->发布服务器的登录名
->分发服务器的登录名
->对发布数据库具有访问权限
选择需要的登录名,点击两次确定添加到PAL。
保持期
保持期这部分内容与原文有所不同,参考联机丛书进行了部分调整。
While really a property of the distributor and the publisher,必须提到保持期,因为它可以显著地影响你的订阅服务器。保持期控制订阅服务器可以脱机多长时间而不被置为无效。它还控制了你需要为分发数据库提供多少空间,因为尚未传递给所有订阅服务器的数据将保留在分发数据库中。所以你需要设置这些值足够高,那样订阅服务器能在有效期内重新连接分发, but low enough for the distribution database to not outgrow the space available.
如果订阅服务器不需要非常及时得到发布数据,这个订阅服务器可能变成不活动的。这种情况可能出现在请求订阅中以某个调度运行,而不是连续的,不需要及时更新数据。
事务保持期
事务保持期是在分发数据库上定义的。它确定了事务信息能在分发数据库中保留多长时间。我们在第二篇的多分发数据库章节简单的介绍了这个设置,当时是保持默认设置。
为了更改这个设置,你需要在对象资源管理器下连接到分发服务器,右击复制,选择"分发服务器属性",如图4.13所示
【译】第四篇 Replication:事务复制-订阅服务器
图4.13 分发服务器属性
这将打开分发服务器属性并显示已配置的分发数据库列表。同时显示配置的保持期的值。点击末端的省略号可以打开分发数据库属性,这里可以更改保持期设置,如图4.14所示
【译】第四篇 Replication:事务复制-订阅服务器
图4.14 事务保持期
事务保持期由两个值组成。一个是最小分发保持期,所有的事务数据至少保留这个值,即使所有的订阅已经接收完它们的事务。另一个是最大分发保持期,如果订阅未能在最大分发保持期(默认72小时)内同步,而且分发数据库中还存在尚未传递到订阅服务器的更改,则订阅会被分发服务器上运行的"清除分发"作业标记为停用。必须重新初始化订阅。
如果你有一个订阅服务器不能时时同步数据,比如因为定期或不定期的连接中断,你需要将这个值设置得高些,确保订阅服务器在它不活动之前重新连接。
另一方面,最大分发保持期设置的越大,越多的数据需要保存在分发数据库中。因此分发数据库需要更多的存储空间。除了分发数据库变大,复制吞吐量也将减少。
因此你需要权衡订阅服务器可用、存储空间和性能需求来设置这个值。事务保持期默认是0-72小时。
其他保持期设置
图4.14还显示了历史事务保持期,至少存储复制性能的历史记录。这个设置不会影响订阅服务器。
另一个重要的保持期设置是在发布上——叫做发布保持期。通常它远远大于最大分发保持期。如果订阅未能在发布保持期(默认336小时)内同步,订阅便会过期,而被发布服务器上运行的"过期的订阅清除"作业删除,必须重新创建和同步订阅。如果推送订阅过期,则会彻底删除该订阅。如果请求订阅过期,你必须手动清除订阅服务器上的请求订阅。In either case, if you are still interested in this subscriber you need to set it up from scratch again.
为了修改发布保持期,你需要在对象资源管理器下连接到发布服务器,复制->本地发布,右击你想修改的发布,选择属性。在发布属性的常规页(图4.15)。你可以修改发布的描述和订阅过期设置。第二个设置定义了发布保持期。

Setting Definition Default Value Defined on
最小分发保持期 事务数据在分发数据库中保留的最小时间 0小时 分发服务器
最大分发保持期 事务数据在分发数据库中保留的最大时间 72小时 分发服务器
历史记录保持期 复制性能的历史记录保留时间 48小时 分发服务器
发布保持期 超过这个时间non-active订阅会被删除 336小时(14天) 发布服务器

表4.1 保持期设置
事务复制有四个保持期设置,总结见表4.1
【译】第四篇 Replication:事务复制-订阅服务器
图4.15 发布属性常规页
总结
这一篇我们配置了发布的最后一项——订阅服务器。我们讨论如何连接到发布服务器,如何选择订阅类型和订阅数据库。我们了解了推送订阅和请求订阅的不同,以及保持期的重要性。我们还学习了安全需求和发布访问列表。
现在所有的复制组件都配置好了,我们可以查看发生了什么。
目前第一个同步应该已经完成,如果你连接到订阅数据库,你应该可以看到所有复制的对象已经被创建。如果数据库中还没有对象,稍微等待一会。它可能需要几分钟来同步完成,即使是一个非常小的表。
在第一个同步完成后,你可以在发布数据库中插入或更新记录。你可以在订阅数据库中发现同样的变更。
事务复制包含很多部分。有代理、作业和特定的数据库参与。大部分我们已经接触到了。如果你想深入事务复制的内核,第五篇会讲述它们是如何一起工作的。