我在复制监视器中收到以下错误:
当对具有主键=
的表'[dgv]。[POSCustomer]'应用复制的UPDATE命令时,在订阅服务器上找不到该行。
错误实际上与丢失的行无关,而是表的模式显示dgv
。
产生错误的发布应该只复制到[ppv].[POSCustomer]
,甚至不知道[dgv].[POSCustomer]
。而且仅影响在交付初始快照后创建的行。
背景:
我正在为3个本地数据库PPV
,DGV
和PAC
设置事务复制到单个Azure SQL数据库。
这三个数据库属于不同的法人实体,位于两个单独的服务器上(一个服务器上的PPV
,另一服务器上的DGV
和PAC
),并且具有相同的架构。
每个dbs
中具有相同名称的表被设置为要复制。
为了区分它们在目标数据库中,我使用它们的源数据库的名称(即ppv.POSCustomer
,dgv.POSCustomer
,pac.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。