使用參數化篩選管理合併式發行集的資料分割
適用於: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>。 您可以在此頁面中:建立和刪除資料分割;允許「訂閱者」初始化快照集產生和傳遞;為一個或多個資料分割產生快照集;清除快照集。
若要建立資料分割
在 [發行集屬性 - <發行集>] 對話方塊的 [資料分割] 頁面上,按一下 [新增]。
在 [加入資料分割] 對話方塊中,輸入與您要建立之資料分割相關聯的 [HOST_NAME()] 和/或 [SUSER_SNAME()] 值。
選擇性地指定重新整理快照集的排程:
選取 [排程這個資料分割的快照集代理程式在下列時間執行]
接受重新重理快照集的預設排程,或按一下 [變更] 以指定其他排程。
選取 [確定]。
若要刪除資料分割
在 [資料分割] 頁面上,從方格中選取一個資料分割。
按一下 [刪除] 。
若要允許訂閱者初始化快照集的產生與傳遞
在 [資料分割] 頁面上,選取 [新的訂閱者嘗試進行同步處理時,自動定義資料分割並依需要產生快照] 。
選取 [確定]。
若要產生資料分割的快照集
在 [資料分割] 頁面上,從方格中選取一個資料分割。
按一下 [立即產生選取的快照集] 。
若要清除資料分割的快照集
在 [資料分割] 頁面上,從方格中選取一個資料分割。
按一下 [清除現有快照集] 。
使用 TRANSACT-SQL
若要使用參數化篩選以更好的方式管理發行集,可以使用複寫預存程序,以程式設計的方式列舉現有的資料分割。 您也可以建立及刪除現有的資料分割。 您可取得下列有關現有資料分割的資訊:
資料分割的篩選方式 (使用 SUSER_SNAME (Transact-SQL) 或 HOST_NAME (Transact-SQL))。
產生資料分割快照集的工作名稱。
上次執行資料分割快照集作業的時間。
雖然兩部分快照集的第二部份可以在初始化新訂閱時視需要而產生,但下列程序可用來控制產生此快照集的方式,並在最方便的時候預先產生此快照集。 如需詳細資訊,請參閱 Snapshots for Merge Publications with Parameterized Filters。
若要在現有的資料分割上檢視資訊
- 在發行集資料庫的發行者端,執行 sp_helpmergepartition (Transact-SQL)。 指定
@publication
的發行集名稱。 (選擇性) 指定@suser_sname
或@host_name
,以根據單一篩選準則僅傳回資訊。
若要定義新的資料分割並產生新的資料分割快照集
在發行集資料庫的發行者端,執行 sp_addmergepartition (Transact-SQL)。 指定
@publication
的發行集名稱,並針對下列其中一個項目定義資料分割的參數化值:@suser_sname
- 當參數化篩選是由 SUSER_SNAME (Transact-SQL) 所傳回的值定義時。@host_name
- 當參數化篩選是由 HOST_NAME (Transact-SQL) 所傳回的值定義時。
建立並初始化這個新資料分割的參數化快照集。 如需詳細資訊,請參閱 使用參數化篩選建立合併式發行集的快照集。
若要刪除資料分割
在發行集資料庫的發行者端,執行 sp_dropmergepartition (Transact-SQL)。 指定
@publication
的發行集名稱,並針對下列其中一個項目定義資料分割的參數化值:@suser_sname
- 當參數化篩選是由 SUSER_SNAME (Transact-SQL) 所傳回的值定義時。@host_name
- 當參數化篩選是由 HOST_NAME (Transact-SQL) 所傳回的值定義時。
這也會移除資料分割的快照集作業和快照集檔案。
使用 Replication Management Objects (RMO)
若要使用參數化篩選以更好的方式管理發行集,可以使用 Replication Management Objects (RMO),以程式設計的方式建立新的「訂閱者」資料分割、列舉現有的「訂閱者」資料分割,以及刪除「訂閱者」資料分割。 如需有關如何建立「訂閱者」資料分割的詳細資訊,請參閱< 使用參數化篩選建立合併式發行集的快照集>。 您可取得下列有關現有資料分割的資訊:
資料分割所根據的值和篩選函數。
為「訂閱者」產生參數化快照集的作業名稱。
上次執行參數化快照集作業的時間。
若要在現有的資料分割上檢視資訊
使用 ServerConnection 類別建立與發行者的連接。
建立 MergePublication 類別的執行個體。 設定發行集的 Name 和 DatabaseName 屬性,並將 ConnectionContext 屬性設定為在步驟 1 中建立的 ServerConnection 。
呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳回 false,則表示步驟 2 中的發行集屬性定義不正確,或者該發行集不存在。
呼叫 EnumMergePartitions 方法,並將結果傳遞到 MergePartition 物件的陣列。
針對陣列中的每個 MergePartition 物件,取得任何所要的屬性。
若要刪除現有的資料分割
使用 ServerConnection 類別建立與發行者的連接。
建立 MergePublication 類別的執行個體。 設定發行集的 Name 和 DatabaseName 屬性,並將 ConnectionContext 屬性設定為在步驟 1 中建立的 ServerConnection 。
呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳回 false,則表示步驟 2 中的發行集屬性定義不正確,或者該發行集不存在。
呼叫 EnumMergePartitions 方法,並將結果傳遞到 MergePartition 物件的陣列。
對於陣列中的每個 MergePartition 物件,決定是否應該刪除資料分割: 這項決定通常是根據 DynamicFilterLogin 屬性或 DynamicFilterHostName 屬性的值而定。
在步驟 2 的 RemoveMergePartition 物件上呼叫 MergePublication 方法。 傳遞步驟 5 的 MergePartition 物件。
針對每個刪除的資料分割重複步驟 6。
另請參閱
參數化資料列篩選器
Snapshots for Merge Publications with Parameterized Filters