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

news/2025/10/20 13:18:33/文章来源:https://www.cnblogs.com/wy123/p/19152414

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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OO之接口-DAO模式代码阅读及应用

1. StudenDaoListImpl.java 与 StudentDaoArrayImpl.java 有何不同?StudenDaoListImpl 使用 ArrayList 存储学生对象,可以动态扩容,无需指定初始大小。StudentDaoArrayImpl 使用固定长度的 Student[] 数组存储学生对…

个微协议,微信号二次开发/ipad协议

优势 我们是一家专业服务企业数字化微信管理服务的技术团队,服务于需求SCRM、机器人、营销系统、社群小助手等具有研发能力的企业,同时我们也接收因使用Xp方案、ipad方案、PC方案导致被批量封号的企业,我们合作伙伴目…

Win11设置默认打开全部右键菜单

前言Win11 的右键菜单默认是折叠起来,很多功能需要点击“显示更多选项”才能显示,非常不方便。 方法打开 CMD 运行下面命令,然后重启电脑即可。reg add HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c…

屏幕显示发白难题的硬件工程深度排查:架构兼容性边界分析

屏幕显示发白难题的硬件工程深度排查:架构兼容性边界分析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

发现概率

5.1.3 发现概率模型的求解 发现概率的核心特征是累积性与不可逆性: 单雷达需连续3个扫描周期(窗口大小 $w = 3$)探测成功才判定"发现",且一旦某时刻满足"发现"条件,后续所有时刻的发现状态需…

MySQL索引查看语句show index详解

一、概述 SHOW INDEX语句是MySQL中用于查看表索引信息的语句。它提供了有关表中索引的详细信息,包括索引名称、索引类型、关联的列等。 二、语法与概要描述 SHOW INDEX语句的语法如下: SHOW INDEX FROM table_name […

qzmoot 生活合集

qzmoot 生活合集欣赏穿蛋侠; 摸彭云; 跳缩小版《我是奶龙》。

yocto工程升级要点

需求 原有的工程是多年前基于yocto sumo开发,对应的linux kernel版本是4.14。 需求是要求linux kernel升级到5.10。 背景 工程由以下几部分组成,yocto sumo构建部分的代码,包括poky,bitbake等 目标平台支持多款第三…

微信机器人开发API!3步搞定微信聊天机器人

微信机器人开发API!3步搞定微信聊天机器人 WTAPI框架是一个能将个人微信各项功能提取成可供开发人员调用的一套私有API接口,比如微信的收发消息,发朋友圈,群聊,建群等等都是可以用API接口来做的。你可以用 微信机…

详细介绍:【Linux】Linux管道与进程池深度解析:从原理到实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

windows2019的域控服务器更新时间.251020

1 先找到合适的源 w32tm /stripchart /computer:ntp.aliyun.com #若是可以使用会显示如下图2 注册表配置确****保NTP客户端已启用:确认以下注册表路径的 E nabled 值为 1: HKEY_LOCAL_MACHINE\SYSTEM\CurrentCo…

国内DOH解析速度测试(阿里 腾讯 360 Doh测速)

阿里 腾讯 360 Doh测速以前一直用阿里DOH,上个月开始明显感觉网页打开速度异常慢,怀疑是阿里DOH限速,验证过程如下: 测试工具:Python3.14 aiohttp matplotlib numpy dnspython 库 地理位置:阳江(距离省会偏远的落后城市…

WatchAlert 轻量级AI日志告警 - Docker安装部署

💎 WatchAlert 是什么? 🎯 专注可观测性与稳定性,为运维提效降本 WatchAlert 是一款专为云原生环境设计 的轻量级监控告警引擎,聚焦于可观测性(Metrics、Logs、Traces)与系统稳定性保障,提供从采集、分析到告…

2022ICPC区域赛济南站

补题链接QOJ:The 2022 ICPC Asia Jinan Regional Contest - Dashboard - Contest - QOJ.ac K. Stack Sort 思路:考虑 a 需要比 a+1 先出栈,所以如果读到 a,发现 a+1 还没被记录则需要多建一个栈。 void solve() {i…

java代码和c++代码相互调用的技术方案

java代码和c++代码相互调用的技术方案通过JNI桥接方式

详细介绍:MyBatis动态sql

详细介绍:MyBatis动态sql2025-10-20 12:41 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

计算机毕业设计PySpark+Hadoop+Hive+LSTM模型美团大众点评分析+评分预测 美食推荐环境(源码+论文+PPT+讲解视频)

计算机毕业设计PySpark+Hadoop+Hive+LSTM模型美团大众点评分析+评分预测 美食推荐环境(源码+论文+PPT+讲解视频)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; dis…

对话智能体泛化研究在线挑战启动

某中心推出DialoGLUE对话AI挑战赛,旨在推动任务型对话系统泛化能力研究。该挑战提供标准化数据集和基准模型,涵盖意图识别、槽位填充等四大任务,支持全数据与少样本两种评估模式。某中心启动在线挑战赛推动对话智能…

2025.10.20

t1 Baekjoon 21527 给定 \(n\times n\) 矩阵 \(a\),对于 \((i,j)\) 求 \((1,1)\) 到 \((n,n)\) 最短路径上与 \(a_{i,j}\) 相同数的个数的最大值。 唐氏症题。 每种 \(a\) 单独提出来,\(f_{i,j}\) 为 \((i,j)\) 的答…

Unable to register MBean [SftpPool

org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [SftpPool [maxTotal=8, blockWhenExhausted=true, maxWaitMillis=-1, lifo=true, fairness=false, testOnCreate=false, …