Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2012事务性复制:获取;“未找到行”;及;无法在“对象”中插入重复键;错误_Sql Server_Sql Server 2012_Database Replication_Transactional Replication - Fatal编程技术网

Sql server SQL Server 2012事务性复制:获取;“未找到行”;及;无法在“对象”中插入重复键;错误

Sql server SQL Server 2012事务性复制:获取;“未找到行”;及;无法在“对象”中插入重复键;错误,sql-server,sql-server-2012,database-replication,transactional-replication,Sql Server,Sql Server 2012,Database Replication,Transactional Replication,很长一段时间,一切都很好。但现在(可能几周后),我在复制监视器中发现了一个奇怪的错误: 一个数据库出现错误2627(违反了%ls约束''%1!''。 无法在对象'%1!'中插入重复的键 另一个出现错误20598(应用复制命令时在订阅服务器上找不到该行) 我们有一个发行商+发行商和一个订户 所以每天晚上我都会创建新的快照并重新初始化订阅(这表明它没问题),每天早上我都会看到相同的错误。问题是我不明白为什么会这样。据我所知,在拍摄快照时,复制会将当前状态数据库传递给订阅服务器,并在创建快照后发生

很长一段时间,一切都很好。但现在(可能几周后),我在复制监视器中发现了一个奇怪的错误:

  • 一个数据库出现错误2627(违反了%ls约束''%1!''。 无法在对象'%1!'中插入重复的键

  • 另一个出现错误20598(应用复制命令时在订阅服务器上找不到该行)

我们有一个发行商+发行商一个订户

所以每天晚上我都会创建新的快照并重新初始化订阅(这表明它没问题),每天早上我都会看到相同的错误。问题是我不明白为什么会这样。据我所知,在拍摄快照时,复制会将当前状态数据库传递给订阅服务器,并在创建快照后发生事务。第一种情况下的记录通常为1-2天,因此我认为它应该在快照中并随快照一起交付。订阅服务器仅由分发代理更新,没有人以其他方式访问它


我已经阅读了关于在第二个错误中使用sp_browsereplcmds的建议,但它仅仅说明了在∢", 无论这意味着什么。请您告诉我如何使其重新工作?

是否有其他方法插入订阅表?如果发布表的标识为“不用于复制”“,则标识值将保留在订阅服务器上,但订阅服务器上的单独插入将仅采用下一个可用标识值。所以你可能会遇到身份冲突。您是否使用标识列?如果是,它们是否使用“不用于复制”?+1(关于“是否有其他内容插入到订阅表中?”)。关于“未找到行”错误,是否还有其他东西正在从订阅表中删除?我不认为用户软件可以插入或删除记录,因为它需要为新服务器重新编译软件,这是我们以前从未为该订阅服务器做过的。我无法想象它还能是什么。。如果没有别的,今晚晚些时候我会尝试为他们重新创建出版物和订阅。从最初的帖子开始已经三年多了,但我想知道是否有任何进一步的发现。我们目前在MS SQL 2016中也面临同样的问题,随机表在随机时间发生错误(密钥冲突),导致复制停止。应用程序中的任何内容都不会写入订阅服务器数据库,如果它这样做,那么错误将持续发生。我并不了解MS SQL中事务复制引擎的内部结构,但所有迹象都表明存在一个潜在缺陷,导致记录被复制/重试两次。