Eyal Hasson Asked: 2019-09-02 08:16:50 +0800 CST2019-09-02 08:16:50 +0800 CST 2019-09-02 08:16:50 +0800 CST 在具有多个订阅者的 SQL Server 中使用合并复制时为每个订阅者选择特定表 772 我正在使用 SQL Server 2017 的合并复制。 我有一个发布者和两个订阅者(全部是 3 个数据库服务器)。 我需要将不同的表复制到每个订阅者。 这可能吗? sql-server replication 1 个回答 Voted Best Answer Marcello Miorelli 2019-09-02T09:20:00+08:002019-09-02T09:20:00+08:00 是的,这是可能的 - 您创建 3 个不同的发布 - 在每个发布中,您只为每个服务器添加您想要的相应表。 例如 - 只有 2 个表server1 其他表格将在其他出版物中,而不是在这个出版物中。 或者,在合并复制中,您可以设置过滤器,并且每个订阅者只会看到您定义的特定分区。 下面这个例子来自这篇文章: 合并 SQL Server 复制参数化行筛选器问题 添加表以将复制与参数化的行过滤器合并。 按照参考文章中的步骤配置合并发布并将表添加到发布 在添加过滤器步骤添加下面的过滤器。 SELECT <published_columns> FROM [dbo].[UserDetails] WHERE [UserOrg] = HOST_NAME() 发布设置完成后,为合并复制生成快照。生成快照后导航到发布,右键单击并单击属性 -> 数据分区 单击添加并输入分区值,即 ORG1,然后单击确定。到目前为止,我只添加了一个分区 ORG1。我们可以根据订阅者添加更多内容。例如,如果我有一个带有 ORG2 分区的订阅者,那么我们可以在此处为 ORG2 添加分区并生成一个分区快照,该快照将应用于特定订阅者。 现在单击立即生成选定的快照,然后单击确定。 右键单击合并复制中的发布,启动 SQL Server 复制监视器并确保分区快照也已完成。 现在添加订阅。请按照以下文章中的步骤添加订阅者:合并复制 -什么被复制,什么不被复制 在添加订阅者时,指定订阅者的 HOST_NAME() 值,以便仅将具有 UserOrg 值 ORG1 的行复制到订阅者。
是的,这是可能的 - 您创建 3 个不同的发布 - 在每个发布中,您只为每个服务器添加您想要的相应表。
例如 - 只有 2 个表
server1
其他表格将在其他出版物中,而不是在这个出版物中。
或者,在合并复制中,您可以设置过滤器,并且每个订阅者只会看到您定义的特定分区。
下面这个例子来自这篇文章:
合并 SQL Server 复制参数化行筛选器问题
添加表以将复制与参数化的行过滤器合并。
按照参考文章中的步骤配置合并发布并将表添加到发布
在添加过滤器步骤添加下面的过滤器。
发布设置完成后,为合并复制生成快照。生成快照后导航到发布,右键单击并单击属性 -> 数据分区
单击添加并输入分区值,即 ORG1,然后单击确定。到目前为止,我只添加了一个分区 ORG1。我们可以根据订阅者添加更多内容。例如,如果我有一个带有 ORG2 分区的订阅者,那么我们可以在此处为 ORG2 添加分区并生成一个分区快照,该快照将应用于特定订阅者。
现在单击立即生成选定的快照,然后单击确定。
右键单击合并复制中的发布,启动 SQL Server 复制监视器并确保分区快照也已完成。
现在添加订阅。请按照以下文章中的步骤添加订阅者:合并复制 -什么被复制,什么不被复制
在添加订阅者时,指定订阅者的 HOST_NAME() 值,以便仅将具有 UserOrg 值 ORG1 的行复制到订阅者。