sp_mergecleanupmetadata (Transact-SQL)
適用於:SQL Server
應該只用於包含 SQL Server 2000 (8.x) Service Pack 1 之前執行 SQL Server 版本的伺服器復寫拓撲。 sp_mergecleanupmetadata
可讓系統管理員清除、 MSmerge_contents
和 MSmerge_tombstone
系統數據表中的MSmerge_genhistory
元數據。 這個預存程式會在發行集資料庫的發行者端執行。
語法
sp_mergecleanupmetadata
[ [ @publication = ] N'publication' ]
[ , [ @reinitialize_subscriber = ] N'reinitialize_subscriber' ]
[ ; ]
引數
[ @publication = ] N'publication'
發行集的名稱。 @publication是 sysname,預設值%
為 ,它會清除所有發行集的元數據。 如果明確指定,發行集必須已經存在。
[ @reinitialize_subscriber = ] N'reinitialize_subscriber'
指定是否要重新初始化訂閱者。 @reinitialize_subscriber為 nvarchar(5),預設值為 true
。
- 如果
true
為 ,則會將訂用帳戶標示為重新初始化。 - 如果
false
為 ,則訂用帳戶不會標示為重新初始化。
傳回碼值
0
(成功) 或 1
(失敗)。
備註
sp_mergecleanupmetadata
應該只用於包含 SQL Server 2000 (8.x) Service Pack 1 之前執行 SQL Server 版本的伺服器的復寫拓撲。 僅包含 SQL Server 2000 (8.x) Service Pack 1 或更新版本的拓撲應該使用自動保留型元數據清除。 執行此預存程式時,請注意預存程式執行所在的計算機上,所需且可能大幅成長的記錄檔。
執行之後sp_mergecleanupmetadata
,根據預設,儲存在 MSmerge_genhistory
MSmerge_contents
MSmerge_tombstone
中且標示為重新初始化之發行集之發行集訂閱者的所有訂閱,訂閱者端的任何暫止變更都會遺失,而且目前快照集已標示為過時。
如果資料庫中有多個發行集,而且其中任何一個發行集都會使用無限的發行集保留期間(@retention 為 0
),則執行 sp_mergecleanupmetadata
不會清除資料庫的合併式復寫變更追蹤元數據。 因此,請謹慎使用無限的發行集保留。
執行這個預存程式時,您可以選擇是否要將 @reinitialize_subscriber 參數設定為 true
(預設值) 或 false
來重新初始化訂閱者。 如果使用sp_mergecleanupmetadata
設定true
為 的 @reinitialize_subscriber 參數執行,即使建立訂閱時沒有初始快照集,也會在訂閱者端重新套用快照集(例如,如果手動套用快照集數據和架構,或已存在於訂閱者端)。 將 參數 false
設定為 應該謹慎使用,因為如果發行集未重新初始化,您必須確定發行者和訂閱者端的數據已同步處理。
不論@reinitialize_subscriber的值為何,sp_mergecleanupmetadata
如果在叫用預存程式時嘗試將變更上傳至發行者或重新發行訂閱者,則發生持續合併程序失敗。
使用 = N'true' 執行sp_mergecleanupmetadata @reinitialize_subscriber
建議您停止發行集和訂閱資料庫的所有更新,但並非必要。 如果更新繼續,當發行集重新初始化時,在訂閱者端所做的任何更新都遺失,但會維護數據聚合。
執行 合併代理程式 來執行合併。 建議您在執行 合併代理程式 時,在每個訂閱者上使用 -Validate agent 命令行選項。 如果您正在執行連續模式合併,請參閱 本節稍後的連續模式合併 的特殊考慮。
完成所有合併之後,請執行
sp_mergecleanupmetadata
。使用具名或匿名提取訂閱在所有訂閱者上執行
sp_reinitmergepullsubscription
,以確保數據趨同。如果您正在執行連續模式合併,請參閱 本節稍後的連續模式合併 的特殊考慮。
針對所有層級所涉及的所有合併式發行集重新產生快照集檔案。 如果您嘗試先合併而不重新產生快照集,您會收到重新產生快照集的提示。
備份發行集資料庫。 若無法這麼做,可能會導致發行集資料庫還原之後發生合併失敗。
使用 = N'false' 執行sp_mergecleanupmetadata @reinitialize_subscriber
停止 發行集和訂閱資料庫的所有 更新。
執行 合併代理程式 來執行合併。 建議您在執行
-Validate
合併代理程式 時,在每個訂閱者上使用代理程式命令行選項。 如果您正在執行連續模式合併,請參閱 本文稍後連續模式合併 的特殊考慮。完成所有合併之後,請執行
sp_mergecleanupmetadata
。如果您正在執行連續模式合併,請參閱 本節稍後的連續模式合併 的特殊考慮。
針對所有層級所涉及的所有合併式發行集重新產生快照集檔案。 如果您嘗試先合併而不重新產生快照集,您會收到重新產生快照集的提示。
備份發行集資料庫。 若無法這麼做,可能會導致發行集資料庫還原之後發生合併失敗。
連續模式合併的特殊考慮
如果您正在執行連續模式合併,您必須:
停止 合併代理程式,然後執行另一個未指定參數的
-Continuous
合併。停用 發行集,
sp_changemergepublication
以確保輪詢發行集狀態的任何連續模式合併失敗。EXEC central..sp_changemergepublication @publication = 'dynpart_pubn', @property = 'status', @value = 'inactive';
當您完成執行 sp_mergecleanupmetadata
的步驟 3 時,請根據您停止模式的方式繼續連續模式合併。 任一:
將 -Continuous 參數新增回 合併代理程式。
使用
sp_changemergepublication
重新啟用發行集。EXEC central..sp_changemergepublication @publication = 'dynpart_pubn', @property = 'status', @value = 'active'
權限
只有系統管理員固定伺服器角色或db_owner固定資料庫角色的成員才能執行 sp_mergecleanupmetadata
。
若要使用此預存程式,發行者必須執行 SQL Server 2000 (8.x)。 訂閱者必須執行 SQL Server 2000 (8.x) 或 SQL Server 7.0 Service Pack 2。