2011-08-04 60 views
1

我们正试图在SQL Server 2005数据库上设置复制。过去一年我们遵循了一些指示,一切都很好。最近,它开始失败(开发环境,所以每周我们重建数据库..并申请replciation)。SQL复制错误 - 在订阅服务器上未找到行

我们遵循一系列步骤,快照获取生成..并应用于复制数据库。一切都好。没有错误。

然后,我们向源数据库添加一个新行,并且砰!错误。

命令尝试: 如果@@ TRANCOUNT> 0回滚TRAN (事务序列号:0x000004BE00000558000100000000,命令ID:1) 错误消息: 应用复制命令时,行未在订阅服务器找到。 (来源:MSSQLServer,错误编号:20598)

我们正在插入一行,但它抱怨该行不在用户上。不过,这是正确的。我们希望它复制到订阅插入...

当我们对源和目的地都做一个SELECT COUNT(*),行数是相同的,直到我们做INSERT,在这一点,来源煽动,但目的地保持不变....

任何想法,我们可以开始寻找?

回答

1

呃...这个错误很糟糕。当你说你插入了一行时,我认为你已经将它插入了发布者。这不会奏效;复制按顺序提供命令。也就是说,它不会重复插入缺失行直到它超过当前错误的事实。

所以,这里是我们开始的地方。在错误消息中,我们看到一个事务序列号。我们可以使用它来确定缺失行的主键。在分销商处,有一个名为sp_browsereplcmds的存储过程。您可以为@xact_seqno_start和@xact_seqno_end参数插入事务序列号。你还会在存储过程中看到一个command_id参数;这对应于错误消息中的命令ID。尝试仅使用指定的参数执行该过程。它应该给你它试图在用户处执行的命令。从那里,你可以告诉它要更新或删除的行的主键。然后,您可以在订阅服务器中插入带有该主键的行,并且复制将继续。

或者,您可以从此订阅者中删除此文章,重新添加它,然后重新初始化该文章。它在服务器上更加紧张,但是却不那么烦琐。

0

这是由于发布服务器数据库发生数据损坏,当我们运行DBCC检查数据库并允许数据丢失时,我们面临相同的复制错误。

最后我们试着做RCA像

1)通过在离线模式下 2.做CHKDSK)清除的表,如果它有很多..in我们的例子中,我们得到40万条数据的检查存储错误行。

在我们的案例中清除数据后问题消失

相关问题