sp_mergecleanupmetadata (Transact-SQL)

只应在所包含的服务器运行的 Microsoft SQL Server 版本低于 SQL Server 2000 Service Pack 1 的复制拓扑中使用。 通过使用 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 版本低于 SQL Server 2000 Service Pack 1 的复制拓扑中使用。 仅包含 SQL Server 2000 Service Pack 1 或更高版本的拓扑应使用基于元数据清理的自动保持功能。 运行此存储过程时,请注意运行此存储过程的计算机上的日志文件必然出现和可能出现的大小增长。

注意事项注意

默认情况下,执行了 sp_mergecleanupmetadata 之后,发布的订阅服务器上在 MSmerge_genhistoryMSmerge_contentsMSmerge_tombstone 中存储了元数据的所有订阅都将被标记为重新初始化,订阅服务器上所有未完成的更改都将丢失,并且当前快照将标记为过时。

注意注意

如果数据库有多个发布,并且其中有一个发布使用了无限发布保持期 (@retention=0),则运行 sp_mergecleanupmetadata 不会清除跟踪数据库的合并复制更改跟踪元数据。 因此,要谨慎使用无限发布保持。

执行此存储过程时,可通过将 @reinitialize_subscriber 参数设置为 TRUE(默认值)或 FALSE 来选择是否重新初始化订阅服务器。 如果执行 sp_mergecleanupmetadata 时将 @reinitialize_subscriber 参数设置为 TRUE,则即使创建订阅时没有初始快照(例如,在订阅服务器上手动应用了快照数据和方案或快照数据和方案已存在),也会在订阅服务器上重新应用快照。 要慎重使用参数的 FALSE 设置;因为如果未重新初始化发布,必须确保发布服务器与订阅服务器上的数据同步。

不管 @reinitialize_subscriber 的值如何,如果在调用存储过程时,存在正试图向发布服务器或重新发布订阅服务器上载更改的合并进程,则 sp_mergecleanupmetadata 将失败。

执行 sp_mergecleanupmetadata 时设置 @reinitialize\_subscriber = TRUE:

  1. 建议(不是必需)停止对发布和订阅数据库的所有更新。 如果更新继续进行,则重新初始化发布时,上次合并后在订阅服务器上所做的所有更新都将丢失,但会保留数据收敛。

  2. 运行合并代理以执行合并。 建议在运行合并代理时,对每个订阅服务器使用 –Validate 代理命令行选项。 如果运行的是连续模式合并,请参阅本节下文中的“连续模式合并的特别注意事项”。

  3. 完成所有合并后,执行 sp_mergecleanupmetadata

  4. 使用命名或匿名请求订阅对所有订阅服务器执行 sp_reinitmergepullsubscription 以确保数据收敛。

  5. 如果运行的是连续模式合并,请参阅本节下文中的“连续模式合并的特别注意事项”。

  6. 为所有级别涉及的所有合并发布重新生成快照文件。 如果事先没有重新生成快照就试图合并,则会得到提示,要求您重新生成快照。

  7. 备份发布数据库。 如果没有这样做,会导致发布数据库还原后合并失败。

执行 sp_mergecleanupmetadata 时设置 @reinitialize\_subscriber = FALSE:

  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。

请参阅

参考

MSmerge_genhistory (Transact-SQL)

MSmerge_contents (Transact-SQL)

MSmerge_tombstone (Transact-SQL)