加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer 订阅过期解决方法

发布时间:2020-12-12 13:02:58 所属栏目:MsSql教程 来源:网络整理
导读:由于分发数据库执行一个较长的事务,达到了系统预定的72小时,导致了该 订阅过期 ,数据库分发代理已不可再启用,提示错误如下: 错误信息:已将此(这些)订阅标记为不活动,必须将其重新初始化。需要删除 NoSync 订阅,然后重新创建它们 右键订阅,发现该订


由于分发数据库执行一个较长的事务,达到了系统预定的72小时,导致了该订阅过期,数据库分发代理已不可再启用,提示错误如下:



错误信息:已将此(这些)订阅标记为不活动,必须将其重新初始化。需要删除 NoSync 订阅,然后重新创建它们


右键订阅,发现该订阅已处于不活的状态!~




怎么解决?难道要重新初始化??!


后来找到一个系统的存储过程?sp_changesubstatus,该存储过程可以更改订阅的3种状态:active 、inactive、subscribed。

--此存储过程在发布服务器的发布数据库中执行
exec sp_changesubstatus 
 @publication = 'your publication name',@subscriber = 'your subscriber name',@status = 'active'

执行之后,重新关闭和启动该分发代理作业,发现没有作用!~提示还是一样!~后来发现,如果订阅过期,该存储过程是无法更改的,更改无效!~


关于订阅的活动状态,还有一个地方可以更改,即更改分发库中的一个表?MSsubscriptions 的状态字段(0 = 不活动;1 = 已订阅;2 = 活动),订阅中的每个已发布项目在MSsubscriptions表中占一行。

--select * from distribution.dbo.MSpublications
--select * from distribution.dbo.MSsubscriptions where status<>2

update sub set status = 2
from distribution.dbo.MSsubscriptions sub 
where status<>2 and publication_id=27

执行之后,重新关闭和启动该分发代理作业,很快,复制正常了!~




在发布和订阅库测试操作数据,同步正常!总是完成了!~


注:即使订阅过期或处于不活动状态,订阅服务器中的更新仍会传播到发布服务器中。


此外,由于系统默认最大事务保质期为72小时,如果有事务在这期间没有传递到订阅,则“清除分发”作业标记为停用,该订阅的事务将被清空。如果订阅过期超过336小时(14天),则订阅将被“过期的订阅清除” 作业执行删除。(更多参考订阅过期和停用)

为了避免过期导致的问题,有两种方法设置:

1. 禁用“过期的订阅清除”?作业;

2. 设置更长的保质期。






本文出自“Hello.KK (SQL Server)”的博客,转载请务必保留此出处http://www.voidcn.com/article/p-ykrwkedb-vg.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读