SqlServer 可更新订阅队列读取器代理错误:试图进行的插入或更新已失败

原文:SqlServer 可更新订阅队列读取器代理错误:试图进行的插入或更新已失败

今天发现队列读取器代理不停地尝试启动但总是出错:

其中内容如下:

队列读取器代理在连接“PublicationServer”上的“pubDB”时遇到错误“试图进行的插入或更新已失败,
原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,
而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。”。
请确保正确定义了分发和订阅,并确保这两台服务器都在运行。 

可能是刚处理过的另一个问题引起的(此处不提)。

队列读取器的是读取订阅数据库的数据,往发布数据库插入数据。上面的提示就是这个原因。

因为发布数据库有2个订阅分库,不清楚是从哪个数订阅据库来的数据引起的。

所以在2个订阅数据库中执行以下代码,查看哪个的记录是不变的:

SELECT *  FROM [subDBName].[dbo].[MSrepl_queuedtraninfo] order by maxorderkey asc

运行几次查看输出结果,如果第一条记录一直不变,且总记录数量只增不减,说明订阅到发布的队列堵在了这一条记录!

解决方法:

在此订阅库把这条事务从排队事务中删除!不过该条事务就没有同步回发布数据库了。

SELECT * FROM [Platform].[dbo].[MSrepl_queuedtraninfo] WHERE tranid='9XSM<<JS713^aHXKJY5SQ=5---0KG---'
SELECT * FROM [Platform].[dbo].[MSreplication_queue] WHERE tranid='9XSM<<JS713^aHXKJY5SQ=5---0KG---'

DELETE FROM [Platform].[dbo].[MSrepl_queuedtraninfo] WHERE tranid='9XSM<<JS713^aHXKJY5SQ=5---0KG---'
DELETE FROM [Platform].[dbo].[MSreplication_queue] WHERE tranid='9XSM<<JS713^aHXKJY5SQ=5---0KG---'

但是具体什么语句或设置引起的“WITH CHECK OPTION”,有待查看。

原文地址:https://www.cnblogs.com/lonelyxmas/p/8360690.html

时间: 2024-12-28 21:05:20

SqlServer 可更新订阅队列读取器代理错误:试图进行的插入或更新已失败的相关文章

分发清除作业阻塞日志读取器代理

开发反馈做复制的表每隔一段时间会延迟,最大延迟时间超过15分钟.打开复制监视器,找到发布所对应的订阅,查看是否有错误.在"发布服务器到分发服务器的历史记录"栏发现下图所示信息:图中我们可以看出上下两条间隔大约15分钟,每条"正在传递复制的事务..."到下一条"复制代理在10分钟内没有记录任何进度消息..."之间,肯定命令没有传递到分发服务器.至于"错误"消息出现多久后又开始正常传递复制的事务,这个单独从上图是很难界定的.上图最

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

原文:SqlServer 可更新订阅升级字段队列数据丢失原因 之前简单描述过数据冲突发生的原因:SQLServer可更新订阅数据冲突的一个原因 ,但具体内部原理是怎么丢失的还不清楚,今天补充说明.可更新订阅,在订阅数据库操作数据,数据实时同步到发布数据库中. 经测试,有3种情况会导致订阅队列的数据丢失: 1.更改字段类型 2.增加删除字段 3.表对象发布 另:添加默认值约束,存储过程,函数正常!订阅队列数据不丢失!(触发器未设置同步) 具体模拟步骤如下: 1.在发布中添加表 2.停止队列读取器代

SqlServer 使用脚本创建分发服务及事务复制的可更新订阅

[创建使用本地分发服务器] /************************[使用本地分发服务器配置发布]***********************/ -- SqlServer 2008 R2 -- https://technet.microsoft.com/zh-cn/library/ms151860(v=sql.105).aspx use master go -- 服务器上是否已安装分发服务器 -- https://msdn.microsoft.com/zh-cn/library/ms

SqlServer &amp; Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)

原文:SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC) 在可更新订阅中,在订阅设置更新方法,将 "排队更新" 设置为 "立即更新" 接着在订阅数据库更新表数据,出错: 消息 21079,级别 16,状态 1,过程 sp_getpublisherlink,第 52 行 没有发布服务器的 RPC 安全信息,或该信息无效.请用 sp_link_publication 指定该信息. 消息 20512,级别 16,状态 1,

SQLServer 可更新订阅数据在线架构更改(增加字段)方案

之前一直查找冲突发布和订阅数据不一致的原因,后来发现多少数据库升级引起,因为一直以来都是在发布数据库增加字段,订阅也会自动同步.在此时如果订阅队列有数据,这些数据将丢失.参考上一篇说明:SQLServer 可更新订阅数据冲突的一个原因 .当在发布数据库增加一个字段时,系统同步存储过程和触发器都会重新生成,这会导致仍在队列中的数据无法正常同步.订阅队列中的命令将因"同步"后消失,代理有可能出错,但也会自动回复正常!~ 这周测试了一些方法,最终算是确定一个方案可行的,虽然麻烦和耗时. 首先

SqlServer 可更新订阅中在订阅库并发获取最大单据号测试及解决法案!

说明: 很多交易的系统都需要单据号,而单据号按顺序并发获取又是一件头疼的事!~ 一般单据号格式为:前缀+日期+编号(如:KK20150501000001) 现在模拟测试,数据库中的单据号作为一张表处理. 数据库单据号表(Billnumber)存储每个账号及其最大的单据号总共一条记录 单据号是组合而成的字符串,后6位为序号. 获取单据号的存储过程: EXEC [dbo].[GetBillnumber_Test]@Account='Account',@Billnumber NVARCHAR(20)O

SQLServer 可更新订阅数据冲突的一个原因

可更新订阅为什么有冲突? 可更新订阅中,当升级增加一个字段时,通常在发布服务器的发布数据库中增加,对表增加字段后,发布自动同步到订阅数据库中(复制架构更改=true).但是,如果此时在订阅数据库进行DML操作,数据将不会同步到发布表中:这些差异数据在订阅表中如果一直未进行DML 操作,也就不会再次同步到发布中,存在差异. 复制配置环境: 可更新订阅事务复制 发布和订阅冲突都以订阅为准 使用排队更新 在订阅操作 冲突测试结果(以下为: 当数据存在不一致的情况下,对订阅再次操作会引起冲突,冲突策略会

OpenCV:基于MFC的视频播放器和图片读取器

实例工程包下载[OpenCV:基于MFC的视频播放器和图片读取器] 一.实现的功能 1.打开本地视频进行读取.播放.暂停.停止控制 2.图片打开功能分为两种:可使用"打开图片"按钮打开本地图片,或者点击comobox里面设定的图片列表选择并显示图片 二.编译环境 OS:Win8.1 x64 IDE:  Visual Studio 2013 OpenCV: 2.4.8 三.主要思路 1.视频的滑动条控制: ①主窗体的OnHScroll()响应函数负责响应slider滑动条的变化,这样就轻

【Android】内存卡图片读取器,图库app

上一篇<[Android]读取sdcard卡上的全部图片而且显示,读取的过程有进度条显示>(点击打开链接)在真机上測试非常有问题.常常遇到内存溢出.卡死的情况.由于如今真机上的内存上,2G已经非常少见了,基本上都8G的样子了. 由于把读取出来的图片一次性地放到app上,而且读取的过程中,又没有正在读取到哪个文件,尽管可以在AVD安卓模拟器上完毕主要的功能,可是这个app非常不友好. 因此採用Handler.Message配合线程等安卓消息机制.完毕读取过程,而且利用GridView把读取到的图