Что может привести к повреждению столбца IDENTITY? - PullRequest
6 голосов
/ 27 октября 2008

У меня вчера была необычная проблема, когда я внезапно не смог вставить записи в таблицу со столбцом идентификаторов.

Простая вставка, подобная этой: INSERT INTO MyTable (Column1, Column2) VALUES ('text', 236764)

Начал генерировать нарушение ограничения первичного ключа.

Я запустил DBCC CHECKIDENT для таблицы и понял, что SQL Server прекратил обновление последнего использованного значения, поэтому при вставке он увеличивался с использованием старого значения, а новое значение идентификатора обычно уже существовало в таблице, поэтому Нарушение ошибки.

Решение проблемы не было проблемой, я просто пересмотрел таблицу для следующего наивысшего порядкового номера, но я никогда не видел, чтобы это случилось раньше!

Кто-нибудь знает, что может привести к тому, что SQL Server прекратит обновление свойств идентификации, и где я могу найти доказательства? Репликация или триггеры не задействованы, это просто старая таблица.

РЕДАКТИРОВАТЬ: SQL Log Rescue был бы идеальным, но он работает только на SQL Server 2000. Существует ли аналогичный инструмент для журналов SQL 2005?

Ответы [ 2 ]

1 голос
/ 27 октября 2008

Я думаю, что SET IDENTITY_INSERT ON повторно идентифицирует.

от BOL

Если введенное значение больше текущее значение идентичности для таблица, SQL Server автоматически использует новое введенное значение в качестве текущего значение личности.

Единственный способ воспроизвести эту проблему - вручную установить слишком низкое семя с помощью DBCC CHECKIDENT.

1 голос
/ 27 октября 2008

Если кто-то вставил в таблицу, используя SET IDENTITY_INSERT ON , кто-то мог абсолютно ввести неверное значение для таблицы. Это было бы мое первое предположение. Вы можете использовать анализатор журналов, например SQL Log Rescue , чтобы вернуться в прошлое через журналы транзакций и посмотреть, сможете ли вы найти, кто плохой человек, который испортил ваши данные ...

...