我正面临SQL Server Replication问题 (订阅服务器上的合并复制中的身份管理)。
订阅者有一篇文章(表)[DocumentItems],其Identity字段[DocumentItemsID]由Replication管理,并被分配了以下范围:
([DocumentItemsID]>(280649) AND [DocumentItemsID]<=(290649) OR [DocumentItemsID]>(290649) AND DocumentItemsID]<=(300649)
服务器多次断电。 每次订阅者PC启动时,[DocumentItemsID]字段将在插入新行时从其范围中选择一个标识,如330035.
问题发生了3次。 我通过手动重新设定修复了问题:
DBCC CHECKIDENT('DocumentItems' , RESEED, xxxx)
其中xxxx是[DocumentItemsID] + MAX
的MAX现有值再次断电后,会出现同样的问题。
有人知道发生了什么吗? 为什么[DocumentItemsID]字段被指定了超出其范围的值?
由于
答案 0 :(得分:0)
好的,最后我知道发生了什么。
这是仅在SQL Server 2012中发生的问题。重新启动SQL Server实例时,会跳转表的标识值(int将跳转1000,其中big int将跳转10000)。
要停止此增量,请将-t272注册到SQL Server启动参数。
这解决了这个问题。
感谢Code Project article by S. M. Ahasan Habib,当我读到它时,我完全处于黑暗中。
有关如何注册启动参数的详细信息,请阅读文章。它显示了如何重现问题并提供2种解决方案。