MSSQL - репликация и нарушение ограничения PK - PullRequest
2 голосов
/ 29 марта 2012

Я настроил репликацию транзакций и разрешил инициализацию из резервной копии из-за ограничений пропускной способности (поэтому снимки не генерируются).Теперь мы получаем эту ошибку в базе данных Publication, когда запускается приложение, которое вставляет данные в базу данных (ну, оно работает в течение короткого времени, а затем останавливается с ошибкой).Монитор репликации не показывает ошибок, поэтому он не является несоответствием между базой данных публикации и подписки.Также это не касается автоматически сгенерированных идентификаторов (т. Е. Использования столбца Identity), поскольку в этой таблице используется метка даты в качестве PK.Ошибка:

System.Data.SqlClient.SqlException: Нарушение ограничения PRIMARY KEY ''.Невозможно вставить дубликат ключа в объект 'dbo.'.Оператор был прерван.

Может ли установка репликации что-то сделать с базой данных источника / публикации, что вызвало это?Может ли это быть вызвано высокой задержкой базы данных подписчиков?Поскольку я не вижу ошибок в мониторе репликации, я даже не уверен, что эта ошибка произошла при продолжении настройки репликации.

Как мне устранить эту проблему?

1 Ответ

0 голосов
/ 25 января 2017

1. Убедитесь, что таблица / статья, которую вы реплицируете, создана с настройкой репликации в PK

До:

CREATE TABLE [dbo].[mytable](
    [mytableID] [BIGINT] IDENTITY(1,1)  NOT NULL,

После:

CREATE TABLE [dbo].[mytable](
    [mytableID] [BIGINT] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,

Вы должны сделать то же самое для внешних ключей

2. Монитор репликации должен показать вам сообщение об ошибке

  • Выберите публикацию.
  • Выберите подписку в правом окне и появится окно подписки.
  • Выберите распространителя для подписчика История (может быть недоступна для типов подписки по запросу, затем вы нужно зайти на серверы подписки).
  • На этой вкладке отображаются транзакции агента распространителя. Вы можете изменить параметр профиля агента «HistoryVerboseLevel» на 2, чтобы получить более подробную информацию. Если вы это сделаете, не забудьте остановить и запустить агент распространения, чтобы увидеть изменения. Это можно сделать без риска потери данных репликации.
...