Jef*_*eff 7 replication sql-server-2005 sql-server
有什么方法可以强制 SQL Server 永远不要将订阅标记为非活动状态?
当出现连接问题并且我不想每次都重新初始化订阅时,它会偶尔发生。
请注意,我不是在谈论订阅被标记为过期......就像不活动一样。
我们将保留设置为 0(无限)。我宁愿拥有一个大型分发数据库,也不愿通过 WAN 为订阅者重新初始化 15GB 的数据库。无论如何,这里真正的问题是,它们有时会在短短几个小时内被标记为不活动……或者有时是几天……这似乎是零星的。有什么方法可以告诉为什么 SQL 决定将它们标记为非活动状态?
是的,您可以使用 t-SQL 和 sql 代理作业以编程方式执行此操作。
基本上,您必须查询分布..MSSubscriptions 并检查状态列值是否为 0(非活动)。
订阅状态:0 = 无效;1 = 已订阅; 2 = 活动
下面的 T-SQL 会帮助你:
-- Author: Kin Shah
-- Date: 4-1-2013
-- For dba.stackexchange.com
-- Good to find out
-- publisher_id
-- publisher_db
-- publication_id
-- subscriber_id
-- subscriber_db
select * From distribution..MSsubscriptions
--- based on the above values, run below statement
--- this can be run using SQLAgent job
if exists (select 1 from distribution..MSsubscriptions where status = 0)
begin
UPDATE distribution..MSsubscriptions
SET STATUS = 2
WHERE publisher_id = '--publisher_id -- will be integer --'
AND publisher_db = '--publisher db name ---'
AND publication_id = '--publication_id -- will be integer --'
AND subscriber_id = '--subscriber_id -- will be integer ---'
AND subscriber_db = '-- subscriber_db ---'
end
else
begin
print 'The subscription is not INACTIVE ... you are good for now .... !!'
end
Run Code Online (Sandbox Code Playgroud)
小智 2
根据订阅无法与发布者同步并标记为非活动,即使设置已配置为 \xe2\x80\x9cnever expire\xe2\x80\x9d:
\n\n\n为了找到停用的原因,我们需要检查“分发”属性中的“交易保留期”。如果将其设置为较小的数字,例如 3 小时,则表示如果订阅者在 3 小时内未同步,则分发清理代理将截断分发中的命令表,因此订阅者将被标记为已停用。
\n由于命令已从分发服务器中删除,因此除了重新初始化订阅服务器之外别无选择。
\n另外,为了查找分发服务器无法同步的原因,我们可以检查分发数据库下表中的分发历史记录,
\nmsdistribution_agents
\nmsdistribution_history
\n
此外,从订阅到期和停用产品文档中的
\n\n\n可以指定订阅永不过期(@retention 值为 0),但强烈建议您不要使用此值,因为无法清除元数据。
\n
另请阅读此 MSDN 论坛主题,了解可能的解决方案:自动标记非活动订阅以进行重新初始化
\n 归档时间: |
|
查看次数: |
25424 次 |
最近记录: |