Sql-Server

在具有多個訂閱者的 SQL Server 中使用合併複製時為每個訂閱者選擇特定表

  • September 5, 2019

我正在使用 SQL Server 2017 的合併複製。

我有一個發布者和兩個訂閱者(全部是 3 個數據庫伺服器)。

我需要將不同的表複製到每個訂閱者。

這可能嗎?

是的,這是可能的 - 您創建 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 的行複製到訂閱者。

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/246720