Sql ';CREATE UNIQUE INDEX语句因重复键而终止';创建非聚集索引时

Sql ';CREATE UNIQUE INDEX语句因重复键而终止';创建非聚集索引时,sql,sql-server,indexing,snapshot,Sql,Sql Server,Indexing,Snapshot,见以下时间表: 1-04:58(服务器A)-DB_XXX中表1上PK索引的重新排序已开始 2-05:00(服务器A)-创建DB_XXX的SNAPManager副本 3-05:01(服务器B)-SNAPManager还原DB_XXX_副本 4-05:11(服务器A)-完成DB_XXX中表1上PK索引的重新排序 注意:在REORG中进行快照复制 5-05:25(服务器B)-在表1上创建非聚集索引失败,出现以下错误:“CREATE UNIQUE INDEX语句终止,因为为对象名“dbo.Table1”

见以下时间表:

1-04:58(服务器A)-DB_XXX中表1上PK索引的重新排序已开始

2-05:00(服务器A)-创建DB_XXX的SNAPManager副本

3-05:01(服务器B)-SNAPManager还原DB_XXX_副本

4-05:11(服务器A)-完成DB_XXX中表1上PK索引的重新排序

注意:在REORG中进行快照复制

5-05:25(服务器B)-在表1上创建非聚集索引失败,出现以下错误:“CREATE UNIQUE INDEX语句终止,因为为对象名“dbo.Table1”和索引名“NonClusteredIndex”找到了重复的键。重复的键值为(111222)。”

  • 首先,该错误表明正在创建的索引是唯一索引,但该错误是在运行CREATE NONCLUSTERED语句时生成的
  • 其次,重复键错误引用2个值(111222),但PK在一列上,非聚集索引在一列上
我唯一能想到的是,因为快照是在ReRoG的中间拍摄的,这张桌子上的PK在副本上的状态不一致。下面是一个类似问题的链接:

有人能解释或证实这种行为吗


谢谢

UNIQUE
CLUSTERED
/
NONCLUSTERED
是两个独立的维度,所以我不知道你为什么会认为
NONCLUSTERED
自动暗示了一些关于唯一性的东西。那么你是否像在另一个问题中提到的那样运行了
DBCC CHECKTABLE
,它是否为您的桌子提供了一份干净的健康清单?不,在本例中,我们重新运行了快照复制/恢复过程。这次REORG将不会运行。然后,在副本上成功创建非聚集索引。请注意,任何能够使表不一致的操作都被SQL Server开发团队视为严重错误,无论您运行的是什么语句。即使在插入行的索引重组的中间,创建索引也不应失败。如果您可以重新编程,并且如果
DBCC CHECKTABLE
确实指示存在问题,那么您可能需要打开一个连接问题,即使您可以解决它。(如果没有
CHECKTABLE
问题,而快照拷贝只是做错了,那就另当别论了。)在同一个表上运行重组时,不能创建索引。它们采用不兼容的锁(模式修改锁)。所述的时间线表明它们不是同时完成的。
UNIQUE
CLUSTERED
/
NONCLUSTERED
是两个独立的维度,因此,我不确定您为什么认为
非聚集的
以某种方式自动暗示了一些关于唯一性的信息。那么您是否如另一个问题中所述运行了
DBCC CHECKTABLE
,并且它是否为您的表提供了一份干净的健康清单?不,在本例中,我们重新运行了快照复制/还原过程。这次REORG将不会运行。然后,在副本上成功创建非聚集索引。请注意,任何能够使表不一致的操作都被SQL Server开发团队视为严重错误,无论您运行的是什么语句。即使在插入行的索引重组的中间,创建索引也不应失败。如果您可以重新编程,并且如果
DBCC CHECKTABLE
确实指示存在问题,那么您可能需要打开一个连接问题,即使您可以解决它。(如果没有
CHECKTABLE
问题,而快照拷贝只是做错了,那就另当别论了。)在同一个表上运行重组时,不能创建索引。它们采用不兼容的锁(模式修改锁)。声明的时间表显示,他们没有在同一时间完成。