允许管理员清理 MSmerge_contents 和 MSmerge_tombstone 系统表中的元数据。此存储过程在发布服务器的发布数据库上执行。
sp_mergecleanupmetadata [ [ @publication = ] 'publication' ]
[ , [ @reinitialize_subscriber = ] 'reinitialize_subscriber' ]
[@publication =] 'publication'
是发布名。publication 的数据类型为 sysname,默认值为 %,表示将返回所有发布的信息。如果显式指定发布,则此发布必须已存在。
[@reinitialize_subscriber =] 'subscriber'
指定是否重新初始化订阅服务器。reinitialize_subscriber 的数据类型为 nvarchar(5),可以是 true 或 false,默认值为 TRUE。如果为 true,则订阅标记为重新初始化。如果为 false,则订阅不标记为重新初始化。
0(成功)或 1(失败)
sp_mergecleanupmetadata 用于合并复制,并使管理员得以清除 MSmerge_contents 和 MSmerge_tombstone 系统表中的元数据。尽管这些表可以无限扩展,但在某些情形下清理其中的元数据可提高合并性能。此过程通过压缩发布服务器和订阅服务器中上述表的大小以节省空间。
默认情况下,@reinitialize_subscriber 参数设置为 true,而所有的订阅都标记为重新初始化。如果将参数 @reinitialize_subscriber 设置为 false,则订阅不标记为重新初始化。将参数设置为 false 时必须慎重,因为如果选择不对订阅进行重新初始化,则必须确保发布服务器与订阅服务器上的数据同步。
在没有将订阅标记为重新初始化时,若要运行 sp_mergecleanupmetadata,需执行以下步骤:
运行此存储过程时,请注意在运行此存储过程的计算机上,日志文件不得已而且有可能增长得很大。
重要 运行了合并元数据清除后应执行发布数据库的备份。如果没有这样做,会在发布数据库还原后导致合并失败。
如果有正在进行的合并进程,而该进程在唤醒调用此存储过程时正在尝试向发布服务器上载更改,则 sp_mergecleanupmetadata 将失败。尝试仅当包括连续模式合并在内的所有合并都已完成时才运行此存储过程。
管理员可以停用发布并在合并清除完成后重新激活它。下面是示例代码,说明管理员如何完成此任务。
EXEC central..sp_changemergepublication @publication = 'dynpart_pubn', @property = 'status', @value = 'inactive'
EXEC central..sp_mergecleanupmetadata @publication = 'dynpart_pubn', @reinitialize_subscriber = 'false'
EXEC central..sp_changemergepublication @publication = 'dynpart_pubn', @property = 'status', @value = 'active'
如果将合并清除传播到作为再次发布者的订阅服务器,而此再次发布者还未激活,则将返回一个错误,说明由于存在正在进行的合并进程,不能在再次发布者上执行元数据的清除。
只有 sysadmin 固定服务器角色成员或 db_owner 固定数据库角色成员才能执行 sp_mergesubscription。
若要使用此存储过程,发布服务器必须运行 Microsoft® SQL Server™ 2000。订阅服务器必须运行 Microsoft SQL Server 2000 或 Microsoft SQL Server 7.0 Service Pack 2。