SQL复制错误:“在订阅服务器上找不到该行”,但指向另一个发布的表

时间:2019-05-14 13:30:48

标签: sql sql-server transactional-replication

我在复制监视器中收到以下错误:

  

当对具有主键=

的表'[dgv]。[POSCustomer]'应用复制的UPDATE命令时,在订阅服务器上找不到该行。

错误实际上与丢失的行无关,而是表的模式显示dgv

产生错误的发布应该只复制到[ppv].[POSCustomer],甚至不知道[dgv].[POSCustomer]。而且仅影响在交付初始快照后创建的行。

背景:

我正在为3个本地数据库PPVDGVPAC设置事务复制到单个Azure SQL数据库。

这三个数据库属于不同的法人实体,位于两个单独的服务器上(一个服务器上的PPV,另一服务器上的DGVPAC),并且具有相同的架构。

每个dbs中具有相同名称的表被设置为要复制。

为了区分它们在目标数据库中,我使用它们的源数据库的名称(即ppv.POSCustomerdgv.POSCustomerpac.POSCustomer)将它们置于三种不同的模式中。

这是通过更改Publication properties -> Articles -> Article properties -> Destination对象所有者中的设置来完成的。

最初的快照交付没有问题;但是,一段时间后,row was not found开始显示在复制监视器中。

我尝试了几次重新初始化订阅,但是在快照交付后错误仍然出现。

交付快照后创建的所有行均会受到影响。

数据库是完全相互隔离的,没有跨数据库查询,没有存储过程,没有触发器PPV.dbo.POSCustomer中的记录应该在DGV.dbo.POSCustomer中进行更新,所以我在弄错了为什么会发生此错误。

我使用sp_browsereplcmd来跟踪产生错误的命令,这导致我:

  

{CALL [sp_MSupd_dboPOSCustomer](,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 2019-05-14 00:00:00.000,,27280000.0000,10 ,,,,,,,,,, 2019-05-14 18:30:04.000 ,,,,,,,,,,, ,, N'vinhn4-00001395',0x00000000d000080000)}

我不理解,并且sp不是我们的POS应用的一部分。

如何使该错误消失?手动插入丢失的行将不起作用,因为所有新行都会受到影响。不能打开-skiperrors。以前已经成功完成了复制到不同目标数据库的操作,但是使用Azure SQL设置跨数据库查询是一件很痛苦的事情,因此我希望避免使用\ p。

0 个答案:

没有答案