У нас есть набор баз данных, в которых таблица определена со столбцом Identity в качестве первичного ключа. Поскольку их подмножество реплицируется на другие серверы, была создана начальная система, чтобы они никогда не могли конфликтовать. Эта система была с использованием начального семени с шагом 50.
Таким образом, таблица в DB1 будет генерировать 30001, 30051 и т. Д., Где Database2 будет генерировать 30002, 30052 и т. Д.
Я смотрю на добавление еще одной базы данных в эту систему (она разделена для целей масштабирования / загрузки) и обнаружила, что идентификаторы не синхронизированы в одной или двух базах данных - то есть в базе данных 3, номера которой должны заканчиваться в 3, больше нет. Посев и приращения все еще правильные в соответствии с дизайном таблицы.
Мне, очевидно, придется как-то обойти эту проблему (возможно, установив высокое начальное значение), но кто-нибудь может сказать мне, что может привести к такой синхронизации? Из запроса к БД я вижу, что последовательность пошла следующим образом: 32403, 32453, 32456, 32474, 32524, 32574 и продолжалась с шагом 50 с тех пор, как произошла ошибка.
Насколько мне известно, ни одна массовая вставка, ни DTS, ни что-либо подобное не добавили новые данные в эти таблицы.
Второй (бонусный) вопрос - как сбросить личность так, чтобы она возвращалась к тому, кем я хочу быть на самом деле!
EDIT:
Я знаю, что дизайн в принципе немного странный - я не просил критиковать его, я просто удивлялся, как он мог выйти из-под контроля. Я унаследовал эту систему, и изменение столбца на GUID - хотя, несомненно, лучшее теоретическое решение - вероятно, не произойдет. Система превратилась из одной БД в несколько БД, когда нагрузка стала слишком большой (в настоящее время несколько сотен ГБ). На каждый идентификатор в этой таблице будут ссылаться во многих других местах - иногда по несколько сотен тысяч раз каждый (умноженный примерно на 40000 для каждого элемента). Обновления всего этого не будет; -)