Я заметил, что когда вы настраиваете репликацию транзакций, SQL Server устанавливает ручное управление диапазоном идентификаторов. Это означает, что в моей базе данных подписки, когда я пытаюсь вставить новую запись в таблицу, PK которой является столбцом идентификаторов, он выдаст мне ошибку и скажет, что он попытался вставить PK "1", "2 "," 3 "и т. Д. Это связано с тем, что текущее значение идентификатора для всех столбцов идентификатора на подписчике возвращается к начальному значению (обычно 1) вместо того, чтобы оставаться на том же уровне, что и на издателе.
Я понимаю, почему SQL Server делает это - вы должны оставить таблицу подписчиков только для чтения. Тем не менее, мой сценарий немного неортодоксален - я время от времени обновляю своего подписчика посредством репликации, делаю немедленное резервное копирование этой БД, затем я хочу сделать некоторые обновления для подписчика, которые НЕ БУДУТ возвращены издателю, а затем когда я снова обновляю подписчика, я восстанавливаю его базу данных из более ранней резервной копии и извлекаю последние обновления. Поскольку я хочу сделать обновления для подписчика между этими обновлениями («временные разницы», если хотите), мне нужен столбец идентификаторов для работы, а не для сброса в 1 при репликации.
Я попытался включить автоматическое управление диапазоном идентификаторов при настройке своей публикации, но при попытке добавить таблицу в публикацию у меня просто появляется следующая ошибка:
Сообщение 21231, уровень 16, состояние 1, процедура sp_MSrepl_addarticle, строка 2243
Поддержка автоматического диапазона идентификаторов полезна только для публикаций, которые позволяют обновлять подписчиков.
Есть ли способ, которым я могу обойти эту проблему? Я действительно хочу представить эту репликацию на SQL Server, как если бы она была доступна только для чтения на стороне подписчика, потому что я не планирую делать обновления, которые будут отправлены обратно издателю , но я хочу делать временные обновления, которые будут удалены до следующей репликации.
Я также считал, что репликация моментальных снимков может быть более подходящим методом, чем репликация транзакций для моего шаблона использования, но проблема в том, что репликация моментальных снимков требует отправки всей проклятой БД при каждом обновлении; так как я планирую сделать немедленное резервное копирование БД после последней репликации, мне не нужно делать всю эту передачу каждый раз; только изменения с прошлого раза.
Is there any way I can get round this problem?Вы должны установить столбец идентификаторов как НЕ ДЛЯ РЕПЛИКАЦИИ, используя sys.sp_identitycolumnforreplication для сервера sql 2005 и выше. Вам даже не нужно повторно снимать ваши статьи, когда вы изменяете столбец идентификаторов, а не для репликации. Просто не делайте этого с помощью графического интерфейса.