合併式複寫如何管理訂閱逾期和中繼資料清除
如果合併式發行集的訂閱未在*「發行集保留期限」*內與「發行者」進行同步處理,則訂閱過期。預設的保留期限是 14 天;可使用 sp_addmergepublication (Transact-SQL) 的 @retention 和 @retention_period_unit 參數設定此期限。@retention_period_unit 要求發行集相容性層級為 90RTM 或更高。對於執行舊版 Microsoft SQL Server 的「訂閱者」,@retention_period_unit 始終設定為「天」。如需有關相容性層級的詳細資訊,請參閱<在複寫拓撲中使用多個 SQL Server 版本>主題中的「合併發行集的相容性層級」一節。
當訂閱過期時,必須對其重新初始化,因為訂閱的中繼資料已移除 (如需詳細資訊,請參閱本主題中的「中繼資料清除」一節)。未重新初始化的訂閱,由發行者上執行的過期清除訂閱作業卸除。依預設此作業每日執行,並移除所有尚未同步處理為兩倍發行保留期限的發送訂閱。例如:
- 若發行的保留期限為 14 天,訂閱若未於 14 天內同步處理就會過期。
如果發行者正在執行 SQL Server 2005,且訂閱的代理程式來自 SQL Server 2005,那麼訂閱只有在該訂閱分割資料變更時才會過期。例如,假設訂閱者收到德國客戶的客戶資料。若保留期限設定為 14 天,只有當德國客戶資料在過去 14 天變更,訂閱才會在第 14 天過期。 - 從上一次同步處理後的第 14 到 27 天,訂閱皆可重新初始化。
- 在上一次同步處理後的 28 天,訂閱由過期清除訂閱作業卸除。若發送訂閱已過期,會完全移除;但提取訂閱不會移除。您必須在訂閱者端清除提取訂閱。如需詳細資訊,請參閱<How to: Delete a Pull Subscription (Replication Transact-SQL Programming)>。
設定發行集保留期限的考量
設定合併式發行集的保留期限時,請記住以下考量:
- 合併式複寫中繼資料的清除相依於發行集保留期限:
- 複寫無法在發行集和訂閱資料庫中清除中繼資料,直到到達保留期限為止。小心指定保留期限的高數值,因為此值可能對複寫效能產生負面影響。若您能夠確實預測所有訂閱者都會在該時間週期內定期同步處理,建議您使用較低設定。
- 可以指定訂閱永不過期 (@retention 的值為 0),但強烈建議您不要使用此值,因為中繼資料無法清除。
- 任何重新發行者的保留期限必須設定為等於或少於原始「發行者」的設定值。如果您使用替代同步夥伴,則應為「發行者」和所有替代同步夥伴使用相同的發行集保留值。使用不同值可能會導致非聚合。若您需要變更發行集保留值,請重新初始化訂閱者,以避免資料無法聚合。
- 在清除之後,如果發行集保留期限加長,而訂閱嘗試與發行者 (已刪除中繼資料) 合併,則由於保留值增加而使訂閱不會過期。不過,發行者則會因沒有足夠的中繼資料可以下載訂閱者的變更,而導致無法聚合。
中繼資料清除
合併式發行集中的中繼資料清除由預存程序 sp_mergemetadataretentioncleanup (Transact-SQL) 執行;清除時間取決於發行集保留期限。每次為訂閱執行「合併代理程式」時,都會呼叫清除程序。該程序會從下列系統資料表中移除超過發行集保留期限的中繼資料:
- MSmerge_contents (Transact-SQL)
- MSmerge_tombstone (Transact-SQL)
- MSmerge_genhistory (Transact-SQL)
- MSmerge_current_partition_mappings
- MSmerge_past_partition_mappings (Transact-SQL)
- MSmerge_generation_partition_mappings (Transact-SQL)
這些資料表被發行集資料庫中的所有發行集使用:如果存在多個發行集,將始終使用最長的保留期限來決定移除中繼資料的時間。