sp_mergecleanupmetadata (Transact-SQL)
只應該用在所包含的伺服器是執行 SQL Server 2000 Service Pack 1 之前的各個 Microsoft SQL Server 版本的複寫拓撲中。 sp_mergecleanupmetadata 可讓管理員清除 MSmerge_genhistory、MSmerge_contents 和 MSmerge_tombstone 系統資料表中的中繼資料。 這個預存程序執行於發行集資料庫的發行者端。
語法
sp_mergecleanupmetadata [ [ @publication = ] 'publication' ]
[ , [ @reinitialize_subscriber = ] 'reinitialize_subscriber' ]
引數
[ @publication = ] 'publication'
這是發行集的名稱。 publication 是 sysname,預設值是 %,會清除所有發行集的中繼資料 如果明確指定的話,發行集必須已存在。[ @reinitialize_subscriber = ] 'subscriber'
指定是否要重新初始化訂閱者。 subscriber 是 nvarchar(5),可以是 TRUE 或 FALSE,預設值是 TRUE。 如果是 TRUE,就會標示訂閱重新初始化。 如果是 FALSE,就不會標示訂閱重新初始化。
傳回碼值
0 (成功) 或 1 (失敗)
備註
sp_mergecleanupmetadata 只應該用在所包含的伺服器是執行 SQL Server 2000 Service Pack 1 之前的各個 SQL Server 版本的複寫拓撲中。 只包含 SQL Server 2000 Service Pack 1 或更新版本的拓撲,應該使用以自動保留為基礎的中繼資料清除功能。 當執行這個預存程序時,請注意,執行這個預存程序的電腦之記錄檔必然會成長,且可能會大幅成長。
注意 |
---|
在執行 sp_mergecleanupmetadata 之後,依預設,中繼資料儲存在 MSmerge_genhistory、MSmerge_contents 和 MSmerge_tombstone 的發行集之訂閱者端的所有訂閱都會標示為將重新初始化,訂閱者端的任何暫止變更都會遺失,目前快照集會標示為已棄用。 |
[!附註]
如果一個資料庫上有多個發行集,而且任何一個發行集都會使用無限期的發行保留期限 (@retention=0),則執行 sp_mergecleanupmetadata 並不會清除追蹤資料庫中繼資料的合併式複寫變更。 因此,在使用無限期的發行期限時,一定要特別小心。
當執行這個預存程序時,您可以將 @reinitialize_subscriber 參數設成 TRUE (預設值) 或 FALSE,以選擇是否要重新初始化訂閱者。 如果您將 @reinitialize_subscriber 參數設為 TRUE 來執行 sp_mergecleanupmetadata,便會在訂閱者端重新套用快照集,即使建立訂閱時並沒有初始快照集,也是如此 (例如,快照集資料和結構描述是以手動方式來套用,或已存在於訂閱者端)。 將這個參數設為 FALSE 應該非常小心,因為如果發行集沒有重新初始化,您必須確定在發行者端和訂閱者端的資料是同步的。
如果在叫用這個預存程序時,有進行中的合併處理試圖將變更上傳到發行者或重新發行的訂閱者,不論 @reinitialize_subscriber 值為何,sp_mergecleanupmetadata 都會失敗。
設定 @reinitialize\_subscriber = TRUE 來執行 sp_mergecleanupmetadata:
建議您停止發行集和訂閱資料庫的所有更新,但您不一定需要如此。 如果繼續更新,當發行集重新初始化時,您將失去自上次合併之後,在訂閱者端進行的任何更新,但仍會維護資料的聚合。
執行合併代理程式來執行合併。 建議您在執行合併代理程式時,在每個訂閱者端使用 –Validate 代理程式命令列選項。 如果您在執行連續模式的合併,請參閱這一節稍後的「連續模式合併的特殊考量」。
在所有合併都完成之後,執行 sp_mergecleanupmetadata。
利用具名或匿名提取訂閱來執行所有訂閱者的 sp_reinitmergepullsubscription,以確保資料聚合。
如果您在執行連續模式的合併,請參閱這一節稍後的「連續模式合併的特殊考量」。
重新產生所有層級所涉及之所有合併式發行集的快照集檔案。 如果您試圖在尚未重新產生快照集前進行合併,系統會提示您重新產生快照集。
備份發行集資料庫。 如果沒有完成這個動作,在還原發行集資料庫之後,合併可能會失敗。
設定 @reinitialize\_subscriber = FALSE 來執行 sp_mergecleanupmetadata:
停止發行集和訂閱資料庫的所有更新。
執行合併代理程式來執行合併。 建議您在執行合併代理程式時,在每個訂閱者端使用 –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'
權限
只有系統管理員 (sysadmin) 固定伺服器角色或 db_owner 固定資料庫角色的成員,才能夠執行 sp_mergecleanupmetadata。
若要使用這個預存程序,發行者必須執行 SQL Server 2000。 訂閱者必須執行 SQL Server 2000 或 Microsoft SQL Server 7.0 Service Pack 2。
請參閱
參考
MSmerge_genhistory (Transact-SQL)