合并发布项的订阅如果在发布保留期内未与发布服务器同步,则会过期。 默认保留期为 14 天。 它通过 @retention 和 @retention_period_unit 参数在 sp_addmergepublication 中进行设置。 @retention_period_unit 要求发布兼容性级别为 90RTM 或更高版本。 对于运行以前版本的 Microsoft SQL Server 的订阅服务器, @retention_period_unit 始终设置为 day。 有关兼容级别的详细信息,请参阅文章《在复制拓扑中使用多个版本的 SQL Server》中的“合并发布兼容性级别”一节。
订阅过期时,必须重新初始化订阅,因为删除了订阅的元数据。 有关详细信息,请参阅 元数据清理。 未重新初始化的订阅由在发布服务器上运行的过期订阅清理作业删除。 默认情况下,此作业每天运行;它会删除所有未同步且超出发布保留期两倍时间的推送订阅。 例如:
如果发布保留期为 14 天,则订阅在 14 天内未同步时可能会过期。
仅当订阅分区中的数据发生更改时,订阅才会过期。 例如,假设订阅服务器仅接收德国客户的客户数据。 如果保留期设置为 14 天,则仅当过去 14 天内对该区域的客户数据发生更改时,订阅才会在第 14 天过期。
从上次同步后的第14天到第27天,订阅可以被重新初始化。
在上次同步后的第28天,订阅将由过期订阅清理作业删除。 如果推送订阅到期,它将被完全删除;但拉取订阅不会。 必须在订阅者上清理拉取订阅。 有关详细信息,请参阅删除请求订阅。
设置发布保留期的注意事项
设置合并发布的保留期时,请记住以下注意事项:
合并复制元数据的清理工作取决于发布的保留期长度:
在达到保留期之前,复制无法清理发布和订阅数据库中的元数据。 请谨慎指定保留期的高值,因为它可能会对复制性能产生负面影响。 如果能够可靠地预测所有订阅服务器将在该时间段内定期同步,则应使用较低的设置。
可以指定订阅永不过期(值为 0),
@retention但不应使用此值,因为无法清理元数据。
任何重新发布的保留期都必须设置为等于或小于原始发布服务器上设置的保留期的值。 如果使用备用同步合作伙伴,则应为发布服务器和所有备用同步合作伙伴设置相同的发布保留值。 使用不同的值可能会导致不一致。 如果需要更改发布保留值,请重新初始化订阅服务器以避免数据不一致。
如果在清理后,发布保留期延长,并且订阅试图与发布者(已删除元数据)合并,则订阅不会因保留期延长而过期。 但是,发布者没有足够的元数据将更改下载到订阅者,从而导致不一致。
元数据清理
合并复制中的元数据清理是通过存储过程sp_mergemetadataretentioncleanup进行的。 清理的时间基于发布保持期。 每次为订阅运行合并代理时,都会调用清理程序。 此过程从以下系统表中删除早于发布保留期的元数据:
- MSmerge_contents
- MSmerge_tombstone
- MSmerge_genhistory
- MSmerge_current_partition_mappings
- MSmerge_past_partition_mappings
- MSmerge_generation_partition_mappings
这些表由发布数据库中的所有发布使用:如果有多个发布,则始终使用最长的保留期来确定何时可以删除元数据。