使用參數化篩選管理合併式發行集的資料分割

適用於:SQL Server

本主題說明如何使用 SQL Server Management Studio、Transact-SQL 或 Replication Management Objects (RMO),在 SQL Server 中使用參數化篩選來管理合併式發行集的分割。 參數化資料列篩選器可用來產生非重疊的資料分割。 這些資料分割可以限制為只有一個訂閱能收到給定資料分割。 在這種狀況中,大量的訂閱者會導致大量的資料分割,而這種情況則需要同等數量的資料分割快照集。 如需詳細資訊,請參閱< 參數化資料列篩選器>。

本主題內容

開始之前

建議

  • 如果您為複寫拓撲編寫指令碼 (建議您如此做),則發行集指令碼將包含呼叫建立資料分割的預存程序。 指令碼提供所建立資料分割的參考,並提供必要時重新建立一或多個資料分割的方式。 如需詳細資訊,請參閱 Scripting Replication

  • 當發行集擁有會產生具有非重疊資料分割之訂閱的參數化篩選時,以及遺失了特定訂閱而需要重新建立時,您必須執行下列作業:移除先前訂閱的資料分割、重新建立訂閱,然後重新建立資料分割。 如需詳細資訊,請參閱< 參數化資料列篩選器>。 複寫會在發行集建立指令碼產生時,針對現有的「訂閱者」資料分割產生建立指令碼。 如需詳細資訊,請參閱 Scripting Replication

使用 SQL Server Management Studio

您可以在 [發行集屬性 - <發行集>] 對話方塊的 [資料分割] 頁面上,管理資料分割。 如需有關存取這個對話方塊的詳細資訊,請參閱< View and Modify Publication Properties>。 您可以在此頁面中:建立和刪除資料分割;允許「訂閱者」初始化快照集產生和傳遞;為一個或多個資料分割產生快照集;清除快照集。

若要建立資料分割

  1. 在 [發行集屬性 - <發行集>] 對話方塊的 [資料分割] 頁面上,按一下 [新增]。

  2. [加入資料分割] 對話方塊中,輸入與您要建立之資料分割相關聯的 [HOST_NAME()] 和/或 [SUSER_SNAME()] 值。

  3. 選擇性地指定重新整理快照集的排程:

    1. 選取 [排程這個資料分割的快照集代理程式在下列時間執行]

    2. 接受重新重理快照集的預設排程,或按一下 [變更] 以指定其他排程。

  4. 選取 [確定]。

若要刪除資料分割

  1. [資料分割] 頁面上,從方格中選取一個資料分割。

  2. 按一下 [刪除]

若要允許訂閱者初始化快照集的產生與傳遞

  1. [資料分割] 頁面上,選取 [新的訂閱者嘗試進行同步處理時,自動定義資料分割並依需要產生快照]

  2. 選取 [確定]。

若要產生資料分割的快照集

  1. [資料分割] 頁面上,從方格中選取一個資料分割。

  2. 按一下 [立即產生選取的快照集]

若要清除資料分割的快照集

  1. [資料分割] 頁面上,從方格中選取一個資料分割。

  2. 按一下 [清除現有快照集]

使用 TRANSACT-SQL

若要使用參數化篩選以更好的方式管理發行集,可以使用複寫預存程序,以程式設計的方式列舉現有的資料分割。 您也可以建立及刪除現有的資料分割。 您可取得下列有關現有資料分割的資訊:

雖然兩部分快照集的第二部份可以在初始化新訂閱時視需要而產生,但下列程序可用來控制產生此快照集的方式,並在最方便的時候預先產生此快照集。 如需詳細資訊,請參閱 Snapshots for Merge Publications with Parameterized Filters

若要在現有的資料分割上檢視資訊

  1. 在發行集資料庫的發行者端,執行 sp_helpmergepartition (Transact-SQL)。 指定 @publication 的發行集名稱。 (選擇性) 指定 @suser_sname@host_name,以根據單一篩選準則僅傳回資訊。

若要定義新的資料分割並產生新的資料分割快照集

  1. 在發行集資料庫的發行者端,執行 sp_addmergepartition (Transact-SQL)。 指定 @publication 的發行集名稱,並針對下列其中一個項目定義資料分割的參數化值:

  2. 建立並初始化這個新資料分割的參數化快照集。 如需詳細資訊,請參閱 使用參數化篩選建立合併式發行集的快照集

若要刪除資料分割

  1. 在發行集資料庫的發行者端,執行 sp_dropmergepartition (Transact-SQL)。 指定 @publication 的發行集名稱,並針對下列其中一個項目定義資料分割的參數化值:

    這也會移除資料分割的快照集作業和快照集檔案。

使用 Replication Management Objects (RMO)

若要使用參數化篩選以更好的方式管理發行集,可以使用 Replication Management Objects (RMO),以程式設計的方式建立新的「訂閱者」資料分割、列舉現有的「訂閱者」資料分割,以及刪除「訂閱者」資料分割。 如需有關如何建立「訂閱者」資料分割的詳細資訊,請參閱< 使用參數化篩選建立合併式發行集的快照集>。 您可取得下列有關現有資料分割的資訊:

  • 資料分割所根據的值和篩選函數。

  • 為「訂閱者」產生參數化快照集的作業名稱。

  • 上次執行參數化快照集作業的時間。

若要在現有的資料分割上檢視資訊

  1. 使用 ServerConnection 類別建立與發行者的連接。

  2. 建立 MergePublication 類別的執行個體。 設定發行集的 NameDatabaseName 屬性,並將 ConnectionContext 屬性設定為在步驟 1 中建立的 ServerConnection

  3. 呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳回 false,則表示步驟 2 中的發行集屬性定義不正確,或者該發行集不存在。

  4. 呼叫 EnumMergePartitions 方法,並將結果傳遞到 MergePartition 物件的陣列。

  5. 針對陣列中的每個 MergePartition 物件,取得任何所要的屬性。

若要刪除現有的資料分割

  1. 使用 ServerConnection 類別建立與發行者的連接。

  2. 建立 MergePublication 類別的執行個體。 設定發行集的 NameDatabaseName 屬性,並將 ConnectionContext 屬性設定為在步驟 1 中建立的 ServerConnection

  3. 呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳回 false,則表示步驟 2 中的發行集屬性定義不正確,或者該發行集不存在。

  4. 呼叫 EnumMergePartitions 方法,並將結果傳遞到 MergePartition 物件的陣列。

  5. 對於陣列中的每個 MergePartition 物件,決定是否應該刪除資料分割: 這項決定通常是根據 DynamicFilterLogin 屬性或 DynamicFilterHostName 屬性的值而定。

  6. 在步驟 2 的 RemoveMergePartition 物件上呼叫 MergePublication 方法。 傳遞步驟 5 的 MergePartition 物件。

  7. 針對每個刪除的資料分割重複步驟 6。

另請參閱

參數化資料列篩選器
Snapshots for Merge Publications with Parameterized Filters