当订阅者上不存在特定记录并且在主服务器上为同一记录执行更新或删除命令并且在订阅者上也被复制时,通常会出现此错误。
由于订阅者上不存在此记录,因此复制会引发错误“未找到行”
此错误的解决方法使复制工作恢复到正常运行状态:
我们可以通过以下查询检查发布者的请求是更新还是删除语句:
USE [distribution]
SELECT *
FROM msrepl_commands
WHERE publisher_database_id = 1
AND command_id = 1
AND xact_seqno = 0x00099979000038D6000100000000
我们可以从上面的查询中得到 artical id 信息,这些信息可以传递给下面的 proc:
EXEC Sp_browsereplcmds
@article_id = 813,
@command_id = 1,
@xact_seqno_start = '0x00099979000038D60001',
@xact_seqno_end = '0x00099979000038D60001',
@publisher_database_id = 1
上面的查询将提供有关它是更新语句还是删除语句的信息。
- 在删除语句的情况下
该记录可以直接从 msrepl_commands 对象中删除,以便复制不会对该记录进行重试
DELETE FROM msrepl_commands
WHERE publisher_database_id = 1
AND command_id =1
AND xact_seqno = 0x00099979000038D6000100000000
- 如果是更新声明:
您需要将该记录从发布者数据库手动插入到订阅者数据库: