SQL复制"未找到行"错误

jer*_*mcc 10 sql-server replication

我在两个数据库之间运行事务复制.我担心它们会略微不同步,但我不知道哪些记录会受到影响.如果我知道,我可以在用户端手动修复它.

SQL Server给了我这条消息:

应用复制命令时,在订阅服务器上找不到该行.(来源:MSSQLServer,错误号:20598)

我环顾四周试图找出什么表,甚至更好的是什么记录导致问题,但我无法在任何地方找到这些信息.

到目前为止我发现的最详细的数据是:

事务序列号:0x0003BB0E000001DF000600000000,命令ID:1

但是如何从中找到表格和行?有任何想法吗?

小智 11

这将为您提供错误所针对的表

use distribution
go

select * from dbo.MSarticles
where article_id in (
    select article_id from MSrepl_commands
    where xact_seqno = 0x0003BB0E000001DF000600000000)
Run Code Online (Sandbox Code Playgroud)

这将为您提供命令(以及命令执行的主键(即行))

exec sp_browsereplcmds 
@xact_seqno_start = '0x0003BB0E000001DF000600000000', 
@xact_seqno_end = '0x0003BB0E000001DF000600000000'
Run Code Online (Sandbox Code Playgroud)


jer*_*mcc 9

我将以最终使用的解决方法回答我自己的问题.

不幸的是,我无法通过SQL Server复制接口(或事件日志)找出导致问题的表.它只是没有说.

所以接下来我想到的是,"即使出现错误,如果我可以继续复制怎么办?" 瞧,有一种方法.事实上,这很容易.有一个特殊的分发代理配置文件称为"继续数据一致性错误".如果启用它,那么这些类型的错误将被记录并传递.一旦通过应用事务并可能记录错误(我只遇到两个),那么您可以返回并使用RedGate SQL数据比较(或其他一些工具)来比较您的两个数据库,对订阅者进行任何更正,然后再次启动复制运行.

请记住,为了实现这一点,您的发布数据库需要在您分配和修复订户数据库的过程中保持"安静".幸运的是,在这种情况下,我有这种奢侈.

  • 要通过SSMS执行此操作,请右键单击"复制" - >"分发服务器属性".然后单击Profile Defaults.您可以使用-SkipErrors值创建新的配置文件.或者只需选中"继续处理数据一致性错误".并选择更改现有代理. (2认同)