1. 将一个存储过程发布并启用快照时(可更新订阅),分发事务表和命令表插入了重复键导致冲突,程序不断重试。
队列读取器不断报错,同时也导致分发代理出错不能进行分发。错误如下:
错误消息:
进程无法在“ServerName”上执行“sp_MSadd_replcmds”。 (源: MSSQLServer,错误号: 1007)
不能在具有唯一索引 'ucMSrepl_transactions' 的对象 'dbo.MSrepl_transactions' 中插入重复键的行。重复的键值为 (8, 0x0012061a0000190a0052)。
不能在具有唯一索引 'ucMSrepl_commands' 的对象 'dbo.MSrepl_commands' 中插入重复键的行。重复的键值为 (8, 0x0012061a0000190a0052, 1)。
不能在具有唯一索引 'ucMSrepl_commands' 的对象 'dbo.MSrepl_commands' 中插入重复键的行。重复的键值为 (8, 0x0012061a0000190a0052, 2)。
不能在具有唯一索引 'ucMSrepl_commands' 的对象 'dbo.MSrepl_commands' 中插入重复键的行。重复的键值为 (8, 0x0012061a0000190a0052, 3)。
不能在具有唯一索引 'ucMSrepl_commands' 的对象 'dbo.MSrepl_commands' 中插入重复键的行。重复的键值为 (8, 0x0012061a0000190a0052, 4)。
(源: MSSQLServer,错误号: 1007)
未将批提交到分发服务器。 (源: MSSQL_REPL,错误号: MSSQL_REPL22020)
The last step did not log any message! (源: MSSQL_REPL,错误号: MSSQL_REPL22037)
(按理存储过程的发布是不会影响到表的,但是这里出现问题了。可能情况是分发表插入因未使用事务保证完整性,遇到某问题导致事务中断停止,然后日志读取器又重新读写到分发表中,导致冲突!)
DELETE FROM distribution.dbo.MSrepl_commands
WHERE publisher_database_id=8 AND xact_seqno=0x0012061a0000190a0052
DELETE FROM distribution.dbo.MSrepl_transactions
WHERE publisher_database_id=8 AND xact_seqno=0x0012061a0000190a0052
删除之后,日志读取器又出现新的问题了!(这个错误是可以模拟重现的,以下的错误信息可能不是在相同的环境了,因为测试过几次不记得保留哪份了!)
错误消息:
进程无法在“ServerName”上执行“sp_repldone/sp_replcounters”。 (源: MSSQL_REPL,错误号: MSSQL_REPL20011)
为 repldone 日志扫描指定的 LSN {00000000:00000000:0000} 出现在日志 {00000217:00000013:000a} 中的当前复制开始之前。 (源: MSSQLServer,错误号: 18768)
进程无法设置上次分发的事务。 (源: MSSQL_REPL,错误号: MSSQL_REPL22017)
进程无法在“ServerName”上执行“sp_repldone/sp_replcounters”。 (源: MSSQL_REPL,错误号: MSSQL_REPL22037)
这导致了扫描日志的序列号不连续了!~
没办法,最终将所有事务标识为已分发跳过了!因为本人环境允许,使用的是可更新订阅,用户都在订阅库操作,所以分发的数据是没什么用的,但是系统还是要判断。
错误参考:
最终解决办法:
exec sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1
exec sp_replflush
起因:1. 将一个存储过程发布并启用快照时(可更新订阅),分发事务表和命令表插入了重复键导致冲突,程序不断重试。队列读取器不断报错,同时也导致分发代理出错不能进行分发。错误如下:错误消息:进程无法在“ServerName”上执行“sp_MSadd_replcmds”。 (源: MSSQLServer,错误号: 1007)不能在具有唯一索引 'ucMSrepl_transactio
2.该设备只能通过网络节点id,控制器id和自身id确认唯一性。因此需要使用联合主键。
3.可能有重复数据存在,如节点1_控制器1_设备1多次尝试添加自己。需要忽略重复数据。
错误消息:
进程无法在“XXX”上执行“sp_repldone/sp_replcounters”。 (源: MSSQL_REPL,错误号: MSSQL_REPL20011)
获取帮助: http://help/MSSQL_REPL20011
传递给数据库 'XX' 中的日志扫描操作的日志扫描号 (9346079:256:62) 无效。此错误可能指示数据损坏,或者日志文件(.ldf)与数据文件(.mdf)不匹配。如果此错误是在复制期间出现的,请重新创建发布。否则,如果该问题导致启动期间出错,请从备份还原。 .
CREATE TABLE [dbo].[Students](
[ID] [int] IDENTITY(1,1) NOT NULL,
[StudentCode] [nvarchar](50) NULL,
[Name] [nvarchar](50) NULL,
[Age] [in...
文章目录SQL Server 2008 复制 遇到: 进程无法执行 'sp_replcmds' 命令故障描述问题排查更改方式1更改方式2更改方式3参考资料
SQL Server 2008 复制 遇到: 进程无法执行 ‘sp_replcmds’ 命令
当我解决故障时遇到一个SQL复制问题。 我正在做的是从生产备份中恢复两个DB,然后在它们之间安装复制。 复制似乎没有任何错误配置,但是当我...
Master SQL Server’s Concurrency Model so you can implement high-throughput systems that deliver transactional consistency to your application customers. This book explains how to troubleshoot and address blocking problems and deadlocks, and write code and design database schemas to minimize concurrency issues in the systems you develop
A,B2数据结构完全一致的数据库,A为分发数据库,B为订阅数据库;
因为程序新加功能,把B备份到本地进行数据结构修改操作,修改完毕后,发现程序无法插入数据;报PK主键重复;使用sql语句插入,也是如此;
google之,说是2005中的一个bug;当时就把表删除后,重建来解决问题了;
后来想了一下,可能是订阅库采取了某种保护导致的,于...
INSTALL PLUGIN events_transactions_history SONAME 'events_transactions_history.so';
请注意,在 MySQL 5.7 中,events_transactions_history 功能是作为一个插件安装的,所以在开启之前需要先安装插件。
希望这能帮到你!