sp_mergecleanupmetadata (Transact-SQL)

适用于:SQL Server

应仅在包含 SQL Server 2000 (8.x) Service Pack 1 之前运行 SQL Server 版本的服务器的副本 (replica)拓扑中使用。 sp_mergecleanupmetadata允许管理员清理和系统表中的MSmerge_genhistoryMSmerge_contentsMSmerge_tombstone元数据。 此存储过程在发布服务器上对发布数据库执行。

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

执行后sp_mergecleanupmetadata,默认情况下,已存储元数据MSmerge_genhistoryMSmerge_contentsMSmerge_tombstone且标记为重新初始化的发布服务器上的所有订阅、订阅服务器上的任何挂起更改都将丢失,当前快照标记为已过时。

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

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

无论@reinitialize_subscriber的值如何,sp_mergecleanupmetadata如果在调用存储过程时尝试将更改上传到发布服务器或重新发布订阅服务器,则存在正在进行的合并进程失败。

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

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

  2. 运行合并代理以执行合并。 建议在运行合并代理时在每个订阅服务器上使用 -Validate 代理命令行选项。 如果运行的是连续模式合并,请参阅 本节后面的连续模式合并 的特殊注意事项。

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

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

  5. 如果运行的是连续模式合并,请参阅 本节后面的连续模式合并 的特殊注意事项。

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

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

使用 @reinitialize_subscriber = N'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 (8.x)。 订阅服务器必须运行 SQL Server 2000 (8.x) 或 SQL Server 7.0 Service Pack 2。