订阅可以被停用,如果在指定的 保留期内未同步,则可能会过期。 发生的动作取决于复制的类型和超过的保留期。
若要设置保留期,请参阅 设置订阅的过期期限、 设置事务发布的分发保留期(SQL Server Management Studio),以及 配置发布和分发。
事务复制
事务复制使用最大分发保留期(sp_adddistributiondb(Transact-SQL)的@max_distretention参数)和发布保留期(sp_addpublication(Transact-SQL)的@retention参数):
如果订阅未在最大分发保留期(默认值为 72 小时)内同步,并且分发数据库中尚未传递到订阅服务器的更改,则 分发清理 作业会标记为停用该订阅,该作业将在分发服务器上运行。 必须重新初始化订阅。
如果订阅未在发布保留期内同步(默认值为 336 小时),则订阅将过期,并由在发布服务器上运行的 过期订阅清理 作业删除。 必须重新创建和同步订阅。
如果推送订阅过期,将被完全删除,但拉取订阅则不会被删除。 必须在订阅者端清理拉取订阅。 有关详细信息,请参阅 “删除请求订阅”。
合并复制
合并复制使用发布保留期(@retention和@retention_period_unit参数,来自sp_addmergepublication(Transact-SQL))。 订阅过期时,必须重新初始化订阅,因为删除了订阅的元数据。 未重新初始化的订阅会由在发布服务器上运行的 过期订阅清理 作业删除。 默认情况下,此作业每天运行;它会删除所有未同步的推送订阅,该订阅的长度是发布保留期的两倍。 例如:
如果发布保留期为 14 天,则订阅在 14 天内未同步时可能会过期。
如果发布服务器运行的是 SQL Server 2005 或更高版本,并且订阅的代理来自 SQL Server 2005 或更高版本,则订阅仅在该订阅分区中的数据发生更改时过期。 例如,假设订阅服务器仅接收德国客户的客户数据。 如果保留期设置为 14 天,则仅当过去 14 天内已更改德国客户数据时,订阅才会在 14 天过期。
从上次同步后的第14天到第27天,订阅可以被重新初始化。
在上次同步后的 28 天后,过期订阅清理作业将删除该订阅。 如果推送订阅过期,它会被完全移除,但拉取订阅则不会。 您必须在订阅者处清理拉取订阅。 有关详细信息,请参阅 “删除请求订阅”。
设置合并发布的发布保留期的注意事项
设置合并发布的保留期时,请记住以下注意事项:
合并发布的保留期包含一个24小时的宽限期,以便适应不同时间区的订阅者。 例如,如果设置一天的保留期,则实际保留期为 48 小时。
合并复制元数据的清理工作取决于发布的保留期长度:
在达到保留期之前,复制无法清理发布和订阅数据库中的元数据。 请谨慎指定保留期的高值,因为它可能会对复制性能产生负面影响。 如果能够可靠地预测所有订阅服务器将在该时间段内定期同步,则建议使用较低的设置。
可以指定订阅永不过期( @retention 的值为 0),但强烈建议不要使用此值,因为无法清理元数据。
任何重新发布的保留期都必须设置为等于或小于原始发布服务器上设置的保留期的值。 您还应对所有发布者及其备用同步合作伙伴使用相同的发布保留值。 使用不同的值可能会导致非收敛。 如果需要更改发布保留值,请重新初始化订阅者以避免数据不同步。
如果在清理后增加发布保留期,并且订阅尝试与发布者同步(已删除元数据),则订阅不会因保留期增加而过期。 但是,发布者没有足够的元数据来下载更改到订阅者,这会导致不同步。