sp_mergecleanupmetadata (Transact-SQL)

只應該用在所包含的伺服器是執行 SQL Server 2000 Service Pack 1 之前的各個 Microsoft SQL Server 版本的複寫拓撲中。sp_mergecleanupmetadata 可讓管理員清除 MSmerge_genhistoryMSmerge_contentsMSmerge_tombstone 系統資料表中的中繼資料。這個預存程序執行於發行集資料庫的發行者端。

主題連結圖示Transact-SQL 語法慣例

語法

sp_mergecleanupmetadata [ [ @publication = ] 'publication' ]
    [ , [ @reinitialize_subscriber = ] 'reinitialize_subscriber' ]

引數

  • [@publication = ] 'publication'
    這是發行集的名稱。publication 是 sysname,預設值是 %,會清除所有發行集的中繼資料如果明確指定的話,發行集必須已存在。

  • [@reinitialize_subscriber = ] 'subscriber'
    指定是否要重新初始化訂閱者。subscriber 是 nvarchar(5),可以是 TRUEFALSE,預設值是 TRUE。如果是 TRUE,就會標示訂閱重新初始化。如果是 FALSE,就不會標示訂閱重新初始化。

傳回碼值

0 (成功) 或 1 (失敗)

備註

sp_mergecleanupmetadata 只應該用在所包含的伺服器是執行 SQL Server 2000 Service Pack 1 之前的各個 SQL Server 版本的複寫拓撲中。只包含 SQL Server 2000 Service Pack 1 或更新版本的拓撲,應該使用以自動保留為基礎的中繼資料清除功能。如需有關清除中繼資料的詳細資訊,請參閱<合併式複寫的運作方式>。當執行這個預存程序時,請注意,執行這個預存程序的電腦之記錄檔必然會成長,且可能會大幅成長。

警告注意事項注意

在執行 sp_mergecleanupmetadata 之後,依預設,中繼資料儲存在 MSmerge_genhistoryMSmerge_contentsMSmerge_tombstone 的發行集之訂閱者端的所有訂閱都會標示為將重新初始化,訂閱者端的任何暫止變更都會遺失,目前快照集會標示為已棄用。

[!附註]

如果一個資料庫上有多個發行集,而且任何一個發行集都會使用無限期的發行保留期限 (@retention=0),則執行 sp_mergecleanupmetadata 並不會清除追蹤資料庫中繼資料的合併式複寫變更。因此,在使用無限期的發行期限時,一定要特別小心。

當執行這個預存程序時,您可以將 @reinitialize_subscriber 參數設成 TRUE (預設值) 或 FALSE,以選擇是否要重新初始化訂閱者。如果您將 @reinitialize_subscriber 參數設為 TRUE 來執行 sp_mergecleanupmetadata,便會在訂閱者端重新套用快照集,即使建立訂閱時並沒有初始快照集,也是如此 (例如,快照集資料和結構描述是以手動方式來套用,或已存在於訂閱者端)。將這個參數設為 FALSE 應該非常小心,因為如果發行集沒有重新初始化,您必須確定在發行者端和訂閱者端的資料是同步的。

如果在叫用這個預存程序時,有進行中的合併處理試圖將變更上載到發行者或重新發行的訂閱者,不論 @reinitialize_subscriber 值為何,sp_mergecleanupmetadata 都會失敗。

設定 @reinitialize_subscriber = TRUE 來執行 sp_mergecleanupmetadata:

  1. 建議您停止發行集和訂閱資料庫的所有更新,但您不一定需要如此。如果繼續更新,當發行集重新初始化時,您將失去自上次合併之後,在訂閱者端進行的任何更新,但仍會維護資料的聚合。

  2. 執行合併代理程式來執行合併。建議您在執行合併代理程式時,在每個訂閱者端使用 –Validate 代理程式命令列選項。如果您在執行連續模式的合併,請參閱這一節稍後的「連續模式合併的特殊考量」。

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

  4. 利用具名或匿名提取訂閱來執行所有訂閱者的 sp_reinitmergepullsubscription,以確保資料聚合。

  5. 如果您在執行連續模式的合併,請參閱這一節稍後的「連續模式合併的特殊考量」。

  6. 重新產生所有層級所涉及之所有合併式發行集的快照集檔案。如果您試圖在尚未重新產生快照集前進行合併,系統會提示您重新產生快照集。

  7. 備份發行集資料庫。如果沒有完成這個動作,在還原發行集資料庫之後,合併可能會失敗。

設定 @reinitialize_subscriber = FALSE 來執行 sp_mergecleanupmetadata:

  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'
    

權限

只有系統管理員 (sysadmin) 固定伺服器角色或 db_owner 固定資料庫角色的成員,才能夠執行 sp_mergecleanupmetadata

若要使用這個預存程序,發行者必須執行 SQL Server 2000。訂閱者必須執行 SQL Server 2000 或 Microsoft SQL Server 7.0 Service Pack 2。