SQL Server merge replication: 巧用Merge Agent的hostname参数创建dynamic filter

我们知道,SQL Server 2000Merge Replication支持dynamic filter的功能。如果我们有多个subscriber,每个subscriber只需要维护自己特定的数据,这时候我们只需创建一个publication, 然后利用dynamic filter的功能,把每个subscriber需要的特定数据复制过去。最常用的用于dynamic filter的系统函数是SUSER_SNAME() HOST_NAME(),针对每个subscribermerge agent连到publisher时,SQL Server会计算出么特定merge agent连接的SUSER_SNAME() HOST_NAME()值,然后根据结果来过滤数据。

 

直接利用SUSER_SNAME() HOST_NAME()时候,需要table中有相应SUSER_SNAME() HOST_NAME()的值。比如如果我们的publisher servershanghai来维护所有的数据,三个subscriber分别叫nanjing, suzhouhangzhou来维护各自的数据,如果我们希望利用HOST_NAME()把数据复制到三个subscriber, 我们的表中应该有一列来存HOST_NAME()的值,然后我们才能用dynamic filter”filter_column = host_name()”来过滤数据:

 

create table orders(orderID int not null, filter_column char(20), Quantity int)

go

insert into orders values(1,’ nanjing ’,100)

insert into orders values(2,’ suzhou ’,200)

insert into orders values(3,’ hangzhou ’,120)

insert into orders values(4,’ hangzhou ’,100)

go

 

但是,如果我们的表中的数据没有恰好和SUSER_SNAME() HOST_NAME()匹配的,我们该怎样来做dynamic filter呢?

 

比如下表,只有一个zoneID可以用来区分不同subscriber需要的数据,但是它的值和SUSER_SNAME() HOST_NAME()都不同。

 

create table orders(orderID int not null, zoneID nvarchar(5), Quantity int)

go

insert into orders values(1,N'1',100)

insert into orders values(2,N'2',200)

insert into orders values(3,N'3',120)

insert into orders values(4,N'3',100)

 

要为这种数据做dynamic filter, 我们可以利用Merge Agent 的一个参数, hostname, 来实现。SQL Server Books Online没有很好解释该参数的用法。当我们没有为merge agent指定该参数时候,针对merge agent连接 host_name()函数返回merge agent 所在服务器的计算机名称;当我们为merge agent指定了该参数时候,host_name()函数返回hostname参数指定的价值。

 

比如,如果我们想把zoneID = N’1’的记录复制到nanjing, 我们仍然可以用”zoneID = host_name()” filter, 只需为nanjingmerge agent添加“-hostname=1”参数即可。

 

为了添加这个参数,右键单击merge agent, 选择Agent Properties, 选择steps选项页,双击Run agent,然后在Command最后添加”-hostname 1”即可。

 

关于merge agent的所有可用参数,见MSDN.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值