Столбец идентификации не синхронизирован - PullRequest
0 голосов
/ 21 июля 2009

У меня есть таблица со столбцом Identity в качестве первичного ключа.

Все хорошо, пока несколько дней назад приложение, использующее эту таблицу, не начало жаловаться на нарушение PK. Сначала я думал, что это невозможно, пока не вспомнил о DBCC CHECKIDENT . Магическая функция сказала мне, что «текущее значение столбца» выше, чем «текущее значение идентификатора». Я сбросил до самого высокого значения, и все снова выглядело хорошо.

Мой вопрос заключается в том, чтобы не допустить повторения этого в будущем, каковы возможные причины этой несинхронизированной проблемы? И как это предотвратить?

Ответы [ 2 ]

3 голосов
/ 21 июля 2009

Похоже, вам придется искать код, чтобы найти экземпляры, в которых IDENTITY_INSERT включен, а затем вставлен ключ (вероятно, столбец идентификатора с высоким номером). Возможно, в прошлом вашему приложению повезло в том, что вставленное (и произвольное) значение PK находится в пределах начального значения - возможно, из-за удалений и тому подобного.

0 голосов
/ 21 июля 2009

Вставка удостоверений не должна быть включена в производственной среде, если вы не выполняете плановое обслуживание и не работаете в однопользовательском режиме в непиковые часы. Это влияет на любого, кто пытается вставить запись (ваш нормальный процесс вставки выдаст ошибку, потому что он не указывает идентификатор), пока он включен и его использование - очень плохая практика! Если у вас есть разработчики или процессы, использующие это в вашей рабочей среде, вам нужно немедленно переосмыслить свой процесс.

Разработчики не должны обладать правами на производство, и только этот шаг может предотвратить повторное возникновение вашей проблемы в будущем, поскольку dba не позволит включить вставку идентификаторов, не задумываясь о том, что это повлияет. Я согласен с Джошем, проверяйте любой импорт ETL, который выполняется, в частности, ищите тот, который выполнялся примерно в то время, когда началась проблема.

Если у вас есть разработчики, меняющие значения идентификаторов или включающие вставку идентификаторов, вам необходимо объяснить им, почему это очень плохая практика. Значения идентичности не должны изменяться после их вставки, поскольку это также влияет на все связанные таблицы.

...