尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

SqlServer 事务复制的两个参数immediate_sync,allow_anonymous

SqlServer 事务复制的两个参数immediate_sync,allow_anonymous
📅 发布时间:2026/6/17 22:08:44

SqlServer 事务复制的两个参数immediate_sync,allow_anonymous

SqlServer的事务复制中,immediate_sync和allow_anonymous两个参数会影响到复制的后台行为和分发库(distribution)的数据保留方式,这两个参数单从名字上看,可能有些模棱两可甚至云里雾里,以下是个人结合复制的运维,对两个参数的理解。

1,immediate_sync

参数含义:是否执行“立即同步”,立即同步啥?谁来同步?有啥作用?表面含义跟没说一样,完全看不懂啥意思。
默认值:true,也就是“立即同步”。

表面上看,基本上看不出来这个参数到底是干嘛的,那么用人话,直白地说,当该immediate_sync 参数为true时,会产生一下行为:
1,当创建完发布之后,会立即(自动)创建一个快照备用(给谁备用,当然是订阅了,可现在还没有订阅啊)。
2,快照行为:该快照会一直保留,直至超过保留期(Retention period)之后,才会被倍自动清理。
3,增量数据行为:在创建快照那一刻之后,分发数据库中会保留待发布的事务,对应在distribution库中的MSrepl_commands, ,MSrepl_transactions表,直至超过超过保留期(Retention period),才会被倍自动清理。
4,新建订阅会使用已有的快照完成初始化,以及结合distribution库中的增量数据做增量数据复制。


当该immediate_sync 参数为false时,会产生一下行为
1,当创建完发布之后,不会立即创建一个快照,只有新增订阅或者重新手动初始化的时候,才会生成快照
2,增量数据行为:只要快照之后的事务,倍同步至订阅节点之后,就会[Distribution clean up: distribution]自动删除,不会等到保留期(Retention period)


2,allow_anonymous

参数含义:是否允许匿名订阅,匿名是什么意思?为什么要匿名?同样,表面含义跟没说一样,完全看不懂啥意思
默认值:true,也就是“允许匿名订阅”

到底什么是“匿名”订阅?“匿名”订阅会产生什么结果?
allow_anonymous依赖于上面提到的immediate_sync参数,只有在允许了匿名订阅allow_anonymous=true的情况下,且immediate_sync=true的情况下,发布才可以在没有订阅的情况下生成快照,以及将快照之后的事务保留在distribution库中。
说白了就是,提前把发布的快照生成好(全量数据),然后事务数据(增量数据)写入distribution库中保留,就好像已经有了订阅一样,把数据都准备好。一旦真正有订阅过来,可以直接利用快照,以及distribution中的活动事务数据做同步。

allow_anonymous的结果就是一个发布对应一组“虚拟订阅”。

select * from syssubscriptions artid       srvid  dest_dbstatus sync_type login_name subscription_type distribution_jobid                 timestamp          update_mode loopback_detection queued_reinit nosync_type srvname
----------- ------ -------- ------ --------- ---------- ----------------- ---------------------------------- ------------------ ----------- ------------------ ------------- ----------- ----------------
7           -1     virtual  2     1         sa         0                 0x00000000000000000000000000000000 0x000000000000468D 0           1                  1             0           
8           -1     virtual  2     1         sa         0                 0x00000000000000000000000000000000 0x000000000000468E 0           1                  1             0           
9           -1     virtual  2     1         sa         0                 0x00000000000000000000000000000000 0x000000000000468F 0           1                  1             0           
10          -1     virtual  2     1         sa         0                 0x00000000000000000000000000000000 0x0000000000004690 0           1                  1             0           
11          -1     virtual  2     1         sa         0                 0x00000000000000000000000000000000 0x0000000000004691 0           1                  1             0           
12          -1     virtual  2     1         sa         0                 0x00000000000000000000000000000000 0x0000000000004692 0           1                  1             0           
7           2      pub_db  2      1         sa         0                 0x2989DF33CF30C34CB9D49BA5499115EE 0x00000000000046AB 0           1                  1             0           sub_server\MSSQLSTD
8           2      pub_db  2      1         sa         0                 0x2989DF33CF30C34CB9D49BA5499115EE 0x00000000000046AC 0           1                  1             0           sub_server\MSSQLSTD
9           2      pub_db  2      1         sa         0                 0x2989DF33CF30C34CB9D49BA5499115EE 0x00000000000046AD 0           1                  1             0           sub_server\MSSQLSTD
10          2      pub_db  2      1         sa         0                 0x2989DF33CF30C34CB9D49BA5499115EE 0x00000000000046AE 0           1                  1             0           sub_server\MSSQLSTD
11          2      pub_db  2      1         sa         0                 0x2989DF33CF30C34CB9D49BA5499115EE 0x00000000000046AF 0           1                  1             0           sub_server\MSSQLSTD
12          2      pub_db  2      1         sa         0                 0x2989DF33CF30C34CB9D49BA5499115EE 0x00000000000046B0 0           1                  1             0           sub_server\MSSQLSTD


3,什么情况下需要取消匿名订阅

3.1 在往发布中新增对象的情况下,需要关闭匿名同步和立即创建快照

allow_anonymous和immediate_sync是一个相互依赖的参数,如果要取消立即同步:需要先关闭allow_anonymous,然后再关闭immediate_sync,否则会报错

关闭immediate_sync

EXEC sp_changepublication
@publication = 'cashier_pub',
@property = 'allow_anonymous' ,    --想关闭immediate_sync,必须先关闭allow_anonymous
@value = 'false'
GOEXEC sp_changepublication
@publication = 'cashier_pub',
@property = 'immediate_sync' ,
@value = 'false'
GO

打开immediate_sync

EXEC sp_changepublication
@publication = 'cashier_pub',
@property = 'immediate_sync' ,
@value = 'true'
GOEXEC sp_changepublication
@publication = 'cashier_pub',
@property = 'allow_anonymous' ,    --想打开allow_anonymous,必须先打开immediate_sync
@value = 'true'
GO

然后再往发布中增加发布对象,手动创建快照,此时创建的快照,是新增对象的快照,而不是整个发布的快照

3.2 在往发布中新增对象的情况下,需要关闭匿名同步和立即创建快照

发布数据保存在分发数据库distribution中,当的清理机制是靠[Distribution clean up: distribution]这个job每10分钟运行一次,自动删除(Retention period)过期数据的,(Retention period)默认是72小时。
如果发布对象过多,或者发布对象上的增删改过多,会产生大量的分发日志,在immediate_sync=true以及allow_anonymous=true的情况下,这个日志又要保留72小时,
因此可能造成distribution库的严重膨胀,以及造成[Distribution clean up: distribution]执行过滤缓慢,此时需要关闭allow_anonymous和immediate_sync。

 

在SqlServer的replication中,感觉这两个参数,有点历史遗留问题的影响,感觉有些啰嗦和混乱。

 

https://repltalk.com/2010/03/24/what-immediate_sync-means-in-transactional-replication/
https://repltalk.com/2010/02/03/what-is-a-virtual-subscription-in-transactional-replication/

相关新闻

  • OO之接口-DAO模式代码阅读及应用
  • 发现概率
  • 利用Python写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。

最新新闻

  • 重庆托福培训哪家强?实地验证搭配免费试听 - 晴光转树
  • ComfyUI_smZNodes:5大核心技术突破实现跨平台AI绘画一致性解决方案
  • 避雷!重庆日语学习者挑选培训机构看资质存证 - 晚香时候
  • 上海汽车音响改装首选 | 音乐人生:20年专业积淀,上海音响改装标杆品牌 - 音乐人生汽车音响
  • 5.18冲刺
  • 2026吸水棒选型指南:代表性源头厂家解析 满足多场景合规需求 - 资讯纵览

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号