SqlServer 可更新订阅升级字段队列数据丢失原因

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 原文:SqlServer 可更新订阅升级字段队列数据丢失原因 之前简单描述过数据冲突发生的原因:SQLServer可更新订阅数据冲突的一个原因 ,但具体内部原理是怎么丢失的还不清楚,今天补充说明。
原文: SqlServer 可更新订阅升级字段队列数据丢失原因

之前简单描述过数据冲突发生的原因:SQLServer可更新订阅数据冲突的一个原因 ,但具体内部原理是怎么丢失的还不清楚,今天补充说明。可更新订阅,在订阅数据库操作数据,数据实时同步到发布数据库中。


经测试,有3种情况会导致订阅队列的数据丢失:


1.更改字段类型

2.增加删除字段

3.表对象发布


另:添加默认值约束,存储过程,函数正常!订阅队列数据不丢失!(触发器未设置同步)



具体模拟步骤如下:

1.在发布中添加表

2.停止队列读取器代理

3.此时对订阅数据库对其他已同步的表进行DML操作

4.启动快照代理(新表同步)

5.启动队列读取器代理

6.查看订阅库中的队列表已无数据,但发布数据库表却未变化。


也就是在启用快照后,队列数据消失了!~



打开 profiler跟踪到,在给一个新表创建发布时,订阅队列中的事务和命令都会被清空!



执行的存储过程为:sp_MSreset_queued_reinitsp_repldeletequeuedtran


execsp_MSreset_queued_reinitN'serverName',N'subscriber_db',@artid

execsp_repldeletequeuedtranN'serverName',N'publisher_db',N'publication',N'tranid',@orderkeylow,@orderkeyhigh


订阅队列表数据将被删除:dbo.MSreplication_queuedbo.MSrepl_queuedtraninfo




因此当启用队列读取器的时候,队列已经没有数据了!(启用队列读取器后,后续的同步正常)

订阅变化的数据也就无法同步到发布中,这就导致了订阅数据和发布数据的不一致!

虽然本例是停止队列读取器模拟,但是在生产环境中,队列可以说总是存在数据的,每个表的操作都会有。如果要升级数据库结构,对于这种架构,还得停机维护来升级!或者晚上用户较少的时候,禁止用户访问来升级数据库结构。




相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
1月前
sqlserver实现取相同名称放在同一字段
sqlserver实现取相同名称放在同一字段
29 2
|
3月前
|
SQL Java Scala
flink-cdc SQL Server op 字段如何获取?
Flink CDC 是 Apache Flink 的组件,用于捕获数据库变更事件。对 SQL Server,通过 Debezium 连接器支持变更数据捕获。`op` 字段标识操作类型(INSERT、UPDATE、DELETE)。配置包括添加依赖及设定 Source 连接器,可通过 Flink SQL 或 Java/Scala 完成。示例查询利用 `op` 字段筛选处理变更事件。
139 1
|
3月前
|
SQL 运维 Oracle
SQL Server 项目中 SQL 脚本更新、升级方式,防止多次重复执行
SQL Server 项目中 SQL 脚本更新、升级方式,防止多次重复执行
49 0
|
5月前
|
SQL 存储 测试技术
|
数据库
SqlServer如何给表添加新的字段以及字段注释
SqlServer如何给表添加新的字段以及字段注释
347 1
Sql Server 增加字段、修改字段、修改类型、修改默认值
Sql Server 增加字段、修改字段、修改类型、修改默认值
360 0
|
6月前
|
关系型数据库 MySQL
mysql及sqlserver修改字段名和字段长度
mysql及sqlserver修改字段名和字段长度
93 0
|
SQL 关系型数据库 MySQL
Flink CDC 2.4 正式发布,新增 Vitess 数据源,PostgreSQL 和 SQL Server CDC 连接器支持增量快照,升级 Debezium 版本
Flink CDC 2.4 正式发布,新增 Vitess 数据源,PostgreSQL 和 SQL Server CDC 连接器支持增量快照,升级 Debezium 版本
1320 1
Flink CDC 2.4 正式发布,新增 Vitess 数据源,PostgreSQL 和 SQL Server CDC 连接器支持增量快照,升级 Debezium 版本
|
SQL 存储 Linux
【SQL Server】 Linux 运维下对 SQL Server 进行安装、升级、回滚、卸载操作
SQLServer 虽然是微软开发的,但是目前已经支持 Windows、Linux、MACOS等。本文详细介绍在 Linux 环境下,如何对 SQL Server 进行安装、升级、回滚、卸载等操作。
556 0
【SQL Server】 Linux 运维下对 SQL Server 进行安装、升级、回滚、卸载操作
|
数据库
SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法
SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法
463 0
下一篇
无影云桌面