如果合并发布的订阅未能在“发布保持期”内与发布服务器同步,该订阅将过期。默认保持期为 14 天;该值用 sp_addmergepublication (Transact-SQL) 的 @retention 和 @retention_period_unit 参数设置。@retention_period_unit** 要求发布兼容级别为 90RTM 或更高。对于运行早期版本的 Microsoft SQL Server 的订阅服务器,@retention_period_unit 始终设置为“日”。有关兼容级别的详细信息,请参阅主题在复制拓扑中使用 SQL Server 的多个版本中的“合并发布的兼容级别”部分。
订阅过期后,必须对其重新初始化,因为该订阅的元数据已被删除(有关详细信息,请参阅本主题中的“元数据清除”部分)。未重新初始化的订阅将由发布服务器上运行的“过期订阅清除”作业删除。默认情况下,此作业每天运行;它删除在两倍的发布保持期内尚未同步的所有推送订阅。例如:
- 如果某发布的保持期为 14 天,则订阅如果在 14 天内尚未同步就会过期。
如果发布服务器运行的是 SQL Server 2005,而且订阅的代理来自 SQL Server 2005,则仅当更改了订阅的分区中的数据时,该订阅才会过期。例如,假定订阅服务器仅接收德国客户的客户数据。如果将保持期设置为 14 天,则仅当在最近 14 天内更改了德国客户的数据时,该订阅才会在第 14 天过期。 - 在上次同步后的第 14 天到第 27 天,可以重新初始化该订阅。
- 在上次同步后的第 28 天,该订阅由“过期的订阅清除”作业删除。如果推送订阅过期,则会彻底删除该订阅,但是请求订阅则不同。您必须清除订阅服务器上的请求订阅。有关详细信息,请参阅How to: Delete a Pull Subscription (Replication Transact-SQL Programming)。
设置发布保持期的注意事项
在设置合并发布的保持期时,请谨记下列注意事项:
- 合并复制元数据的清除依赖于发布保持期:
- 在到达保持期之前,复制无法清除发布数据库和订阅数据库中的元数据。在为保持期指定较大值时务必谨慎,因为这可能对复制性能产生负面影响。如果能够很有把握地预测出所有订阅服务器都将在该时间段内定期同步,则建议使用较低的设置。
- 可以指定订阅永不过期(@retention 的值为 0),但是极力建议您不要使用此值,因为这将无法清除元数据。
- 任何重新发布服务器的保持期都必须设置为等于或小于在原始发布服务器上设置的保持期。如果使用备用同步伙伴,则应为发布服务器和所有备用同步伙伴使用相同的发布保持期值。使用不同的值可能导致无法收敛。如果需要更改发布保持期的值,请重新初始化订阅服务器,以免数据无法收敛。
- 如果在清除之后增大发布保持期,而且订阅尝试与发布服务器(已删除元数据)合并,则订阅将由于增大了保持期值而不会过期。但是,发布服务器没有足够的元数据来下载对订阅服务器所做的更改,这会导致无法收敛。
元数据清除
合并复制中的元数据清除由存储过程 sp_mergemetadataretentioncleanup (Transact-SQL) 执行;清除所用时间根据发布保持期而定。每当为订阅运行合并代理时,都会调用清除过程。该过程从下列系统表中删除超过发布保持期的元数据:
- MSmerge_contents (Transact-SQL)
- MSmerge_tombstone (Transact-SQL)
- MSmerge_genhistory (Transact-SQL)
- MSmerge_current_partition_mappings
- MSmerge_past_partition_mappings (Transact-SQL)
- MSmerge_generation_partition_mappings (Transact-SQL)
这些表供发布数据库中的所有发布使用:如果存在多个发布,总是使用最长的保持期来确定删除元数据的时间。