验证合并订阅者的分区信息

为合并发布定义参数化行筛选器时,可以使用引用订阅服务器信息的函数,例如订阅服务器的登录名。 默认情况下,复制会在每次同步之前以及每当在订阅服务器上应用快照时基于该函数验证订阅服务器信息。 验证过程可确保为每个订阅者正确分区数据。 验证行为由validate_subscriber_info发布属性控制,该属性可以使用sp_changemergepublication(Transact-SQL)或在“发布属性”对话框的“订阅选项”页上进行更改。 有关更改发布属性的详细信息,请参阅 “查看和修改发布属性”。

分区验证的工作原理

例如,使用函数 SUSER_SNAME() 筛选发布时,合并代理会针对对 SUSER_SNAME() 表达式有效的数据向每个订阅者应用初始快照。

如果启用了验证,当订阅服务器重新连接到发布服务器进行下一次同步时,合并代理将验证订阅服务器中的信息,并确保每个订阅服务器的分区与初始快照中收到的分区相同。 对于每个后续合并或快照应用,合并代理将验证每个订阅者的分区。

如果合并代理检测到筛选表达式中使用的函数返回的值与初始快照时的值不同,则合并或快照应用程序会失败,并且订阅服务器的订阅可能需要重新初始化。 重新初始化可能是必要的,以防止当订阅者的合并设置发生更改时可能出现的问题,但也可能只需要将订阅者上的信息(如登录名)更改回原始快照时使用的值即可。

当合并代理验证分区时,除了根据筛选表达式中使用的函数返回的值来验证分区外,代理还会检查快照是否是在使其失效的更改之前生成的,例如元数据清理操作或架构更改。 如果分区快照太旧,合并代理将返回错误,并且必须根据当前常规快照为该订阅者重新生成分区快照。

另请参阅

复制管理常见问题解答
复制管理的最佳做法
重新初始化订阅
验证复制的数据