[翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)

上一篇: 一步步教你配置 SQL SERVER合并复制(五)配置Publisher(上)

    在弹出来的Add Filter这个页面,在左边的栏里你可以到表中的字段都 罗列出来了,双击CityId列将它移到右边的Fileter statement,增加一个条件像CityId=1这样的,这样的话就会减小订阅用户同 步数据的数量,当然这里的值你必须定义一个常量,因此这个叫做Static Filter(静态查询).

     [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第1张图片

     在我们的应用中表里的数据有几百万条是一件很正常的事,但有时候设备所需要的数据却仅仅是这几百万条中的几千条,这个时候静态过滤就派上它的用场了。我们继续,先将CityId=1删除掉因为我们有更重要的条件要应用。

     如 果你想减小客户端同步数据的数量,举个例子,就想我们这里的应用一样,每个用户只需同步他相应城市的数据,我们有字段CityId可以做到这个过滤,但我 们不能用静态过滤,因为那只能过滤到一个城市。其实这个时候我们有个方法那就是用Parameterized Filter(参数查询).这里要求使用到 SQL SERVERHOST_NAME()这个函数来实现这个过滤,只需将Replication对象的属性设置成HOST_NAME()所对应的值 就可以了。你似乎可以写成下面这样的条件:

WHERE [CityId] = CONVERT( int ,HOST_NAME())

     不过很不幸的是,这样子的结果是无法创建 Publication,因为 HOST_NAME()的值是无法强制转换成Integer类型的。不过你可以这样写:

CONVERT(nchar,CityId) = HOST_NAME()

其实解决这个问题也不难,你可以执行 sp_changemergearticle存储过程来替换下面的条件

WHERE [CityId] = CONVERT( int ,HOST_NAME())

整个的执行过程如下所示:

USE [ParkSurvey]
EXEC sp_changemergearticle
     @publication
= ' ParkSurveyPublication ' ,
     @article
= ' Cities ' ,
     @property
= ' subset_filterclause ' ,
     @value
= ' CityId=CONVERT(int,HOST_NAME()) ' ,
     @force_invalidate_snapshot
= 1 ,
     @force_reinit_subscription
= 1 ;
GO

这样做的结果是新建一个快照文件夹,但性能会比上面的好。

      最 后我们来看看 Add Filter页面中底部的单选按钮,对于每一张建立参数查询的表来说,你既不能在各个订阅者的 HOSTNAME的值是一样的时候选择 第一个按钮,也不能在各个订阅者的 HOSTNAME的值不一样时选择第二个按钮,这很重要因为这样子会报错。如果每个订阅者的 HOSTNAME的值是唯一 的值的时候你应该选择第二个按钮。因此所有的静态查询你都必须选择第一个按钮让每一行的数据都发送给每个订阅者。点击 OK,一个有查询条件的表就显示在 Filter Table Rows页面上了。

      [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第2张图片

      好 了,一个有同步参数的表就被建立了,下面我要教你如何与另外张表进行关联。在我们的例子里面,Cities表只让订阅者同步订阅者所对应的城市,但如果订 阅者也想查看Parks表里的数据的话,这个就不能够满足我们的需求了。这里CityId是Parks的外键,我们可以扩展Cities表中的 HOSTNAME查询条件,选择Cities,点击 Add按钮,然后选择 Add Join to Extend the Selected Filter..如下图所示的。

      [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第3张图片

Add Join菜单会列出你可以关联的所有的表

      [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第4张图片

这里,我们选择Parks做为我们要去关联的表。

      [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第5张图片

      在我们的例子中,左边 Filtered table column显示的是显示的主表的列,右边 Joined table column显示的是想要与主表关联的列。在下面的预览文本框中你可以看到主表与它的外键是怎么关联起来的。你可以点击选择你所需要关联的列,当然你也可以手动创建它们当你们点击 Write the Join statement manually.这里我们以一对多的关系关联Cities和Parks的CityId.因为CityId在各自的表中都是为主键,因此我们将下面的 Unique key复选框选上。(这样子能改进同步的性能,也只有当关联的字段是主键时才有效),然后我们点击 OK
     
      在 Filter Table Rows就能够显示我们加了同步查询条件的表跟它的关联表了,点击 Next.

      [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第6张图片

       在 Snapshot Agent页面将会提示你是否立即建立快照,在这里你也可以点击 change来修改快照代理的频率,在这个例子中我们选择14天,然后我们点击 Next.
   
       [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第7张图片

Agent Security页面,我们要选择快照代理线程运行在哪个账户底下,所以我们选择点击 Security Settings.

       [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第8张图片

      接下来的是 Snapshot Agent Security 页面,选择 Run under the following Windows account单选框,然后输入 SYNCDOMAIN\syncuserProcess account文本框中,在密码跟确认密码都输入P@ssw0rd,细心的您一定会发现,这个用户就是我们创建的域用户,在确认 By impersonating the process account单选按钮已经被选上后就可以点击 OK了。

       [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第9张图片

       回到 Agent Security这个页面, Snapshot Agent里就有我们刚刚所加入的 syncuser用户了。然后我们点击 Next.
 
      [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第10张图片

Wizard Actions页面,我们把两个复选框的内容都选上,然后点击 Next.

      [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第11张图片

Script File Properties页面,这个页面让我们选择脚本的存放位置,我们保持默认的选择然后点击 Next.

      [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第12张图片

      在最后的 Complete the Wizard页面,我们在 Publication name那输入ParkSurveryPublication做为我们发布复制的名称,当我们确认我们填入的信息跟下面显示的信息一致时我们就可以点击 Finish来完成这个 Publication了.

       [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第13张图片

      在 Creating Publication这个页面我们就可以看到这个 Publication的完成情况了,如果都显示 success的话我们就可以点击 Close来关闭它,这样一个 Publication就被建立起来了。

      [翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下)_第14张图片


你可能感兴趣的:([翻译]一步步教你配置SQL SERVER合并复制(六)配置Publisher(下))