Как отключить увеличение поле id в ms sql 2012 при зеркалировании?

Добрый день! Имеется схема из 3 серверов ms sql 2012 для зеркалирования бд (основной-следящий-зеркальный). Накидал тестовую базу с несколькими таблицами, добавил немного данных. Настроил всю эту связку все подключилось и работает. Провожу тесты:
Выключаю основную машину, режим автоматически меняется и резервный сервак позволяет работать с бд. И тут начинается проблема. При добавлении новых записей в бд на резервном серваке id увеличивается на 1000. При восстановлении связи и записи в бд на основном сервере id снова увеличивается на 1000. Тестировал на 2008 sql сервере, там id не увеличивался. Подскажите где это отключить? Спасибо
  • Вопрос задан
  • 342 просмотра
Решения вопроса 1
Scarfase1989
@Scarfase1989 Автор вопроса
Полный ответ: В 2012 SQL Server'е был реализован новый механизм кэширования значений IDENTITY - они выделяются сразу блоком и хранятся в памяти до присвоения конкретным строкам. Такой механизм повысил производительность выделения IDENTITY, но привел к указанной вами особенности поведения, поскольку при выключении сервера закэшированные значения IDENTITY теряются, и при следующем включении сервер кэширует следующий блок значений. Данное поведение можно отключить флагом 272, при этом новый механизм кэширования отключится и поведение будет тем же, что в версии 2008R2 (по заверениям разработчиков).
Решение
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
При добавлении новых записей в бд на резервном серваке id увеличивается на 1000.
Это резерв для несовпадения с отключённым. Отключить нельзя — будет нарушение целостности данных. Для ключа используйте тип uniqueidentifier.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы