sp_mergecleanupmetadata (Transact-SQL)

適用於:SQL Server

應該只用於包含 SQL Server 2000 (8.x) Service Pack 1 之前執行 SQL Server 版本的伺服器復寫拓撲。 sp_mergecleanupmetadata可讓系統管理員清除、 MSmerge_contentsMSmerge_tombstone 系統數據表中的MSmerge_genhistory元數據。 這個預存程式會在發行集資料庫的發行者端執行。

Transact-SQL 語法慣例

語法

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_genhistoryMSmerge_contentsMSmerge_tombstone 中且標示為重新初始化之發行集之發行集訂閱者的所有訂閱,訂閱者端的任何暫止變更都會遺失,而且目前快照集已標示為過時。

如果資料庫中有多個發行集,而且其中任何一個發行集都會使用無限的發行集保留期間(@retention0),則執行 sp_mergecleanupmetadata 不會清除資料庫的合併式復寫變更追蹤元數據。 因此,請謹慎使用無限的發行集保留。

執行這個預存程式時,您可以選擇是否要將 @reinitialize_subscriber 參數設定true (預設值) 或 false來重新初始化訂閱者。 如果使用sp_mergecleanupmetadata設定true @reinitialize_subscriber 參數執行,即使建立訂閱時沒有初始快照集,也會在訂閱者端重新套用快照集(例如,如果手動套用快照集數據和架構,或已存在於訂閱者端)。 將 參數 false 設定為 應該謹慎使用,因為如果發行集未重新初始化,您必須確定發行者和訂閱者端的數據已同步處理。

不論@reinitialize_subscriber的值為何,sp_mergecleanupmetadata如果在叫用預存程式時嘗試將變更上傳至發行者或重新發行訂閱者,則發生持續合併程序失敗。

使用 = N'true' 執行sp_mergecleanupmetadata @reinitialize_subscriber

  1. 建議您停止發行集和訂閱資料庫的所有更新,但並非必要。 如果更新繼續,當發行集重新初始化時,在訂閱者端所做的任何更新都遺失,但會維護數據聚合。

  2. 執行 合併代理程式 來執行合併。 建議您在執行 合併代理程式 時,在每個訂閱者上使用 -Validate agent 命令行選項。 如果您正在執行連續模式合併,請參閱 本節稍後的連續模式合併 的特殊考慮。

  3. 完成所有合併之後,請執行 sp_mergecleanupmetadata

  4. 使用具名或匿名提取訂閱在所有訂閱者上執行 sp_reinitmergepullsubscription ,以確保數據趨同。

  5. 如果您正在執行連續模式合併,請參閱 本節稍後的連續模式合併 的特殊考慮。

  6. 針對所有層級所涉及的所有合併式發行集重新產生快照集檔案。 如果您嘗試先合併而不重新產生快照集,您會收到重新產生快照集的提示。

  7. 備份發行集資料庫。 若無法這麼做,可能會導致發行集資料庫還原之後發生合併失敗。

使用 = N'false' 執行sp_mergecleanupmetadata @reinitialize_subscriber

  1. 停止 發行集和訂閱資料庫的所有 更新。

  2. 執行 合併代理程式 來執行合併。 建議您在執行 -Validate 合併代理程式 時,在每個訂閱者上使用代理程式命令行選項。 如果您正在執行連續模式合併,請參閱 本文稍後連續模式合併 的特殊考慮。

  3. 完成所有合併之後,請執行 sp_mergecleanupmetadata

  4. 如果您正在執行連續模式合併,請參閱 本節稍後的連續模式合併 的特殊考慮。

  5. 針對所有層級所涉及的所有合併式發行集重新產生快照集檔案。 如果您嘗試先合併而不重新產生快照集,您會收到重新產生快照集的提示。

  6. 備份發行集資料庫。 若無法這麼做,可能會導致發行集資料庫還原之後發生合併失敗。

連續模式合併的特殊考慮

如果您正在執行連續模式合併,您必須:

  • 停止 合併代理程式,然後在未指定參數的情況下-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。