批量插入失败,SQL Server合并复制标识范围管理

时间:2015-05-15 16:30:08

标签: sql-server database-replication merge-replication

我们遇到合并复制问题,我们有一个后台进程批量插入行。这些插入有时会失败并显示消息

  

插入失败。它与身份范围检查相冲突   数据库'',复制表'',列''中的约束。如果   标识列由复制自动管理,更新   范围如下:对于Publisher,执行   sp_adjustpublisheridentityrange;对于订阅者,运行   分发代理或合并代理。

我已经完成了很多阅读和修补不同大小的插入和各种设置的发布者范围大小,订阅者范围大小和范围阈值百分比。如果我将批量插入大小设置为不能被10整除并重复插入行,我找不到插入错误的设置。即使我将Range Threshold Percentage设置为50或1,它仍然不允许我插入接近订阅者范围大小1/3的批次。如果没有为用户范围设置1000行的设置和50%阈值,如果我重复插入317行(素数),它不会出错吗?如果我要说,我一次不会插入超过5000行,是否有人建议使用哪些设置永远不会导致插入错误?

1 个答案:

答案 0 :(得分:0)

在不知道您现有的阈值是什么以及您要插入多少行的情况下,我可以告诉您的是,您的订阅者范围可能太小。

我还想确保您清楚地了解@threshold参数的作用。如果您的范围大小为1000,并且@threshold = 60,则它将在600处分配新范围。

因此,如果要批量插入最多5000行,并且用户/合并插入操作的标准范围为1000,阈值为80,则您希望范围为7500:

(5000 + 1000) / .80 = 7500 

这种方式如果您处于达到用户范围结束的位置(例如999),则可以执行5000批量插入而不会触发新的范围分配。