MSSQL_ENG002601

Сведения о сообщении

Название продукта SQL Server
Идентификатор события 2601
Источник события MSSQLSERVER
Компонент Система управления базами данных SQL Server
Символическое имя Не применимо
Текст сообщения Не удается вставить повторяющиеся строки ключа в объект "%.*ls" с уникальным индексом "%.*ls".

Объяснение

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

  • Вставка и обновление строки происходят на нескольких узлах. Репликация слиянием и обновляемые подписки для транзакционной репликации обеспечивают обнаружение конфликтов и разрешение конфликтов, но все же предпочтительно вставлять или обновлять указанную строку только на одном узле. Одноранговая транзакционная модель не обеспечивает обнаружение и разрешение конфликтов; для этого требуется разделять вставки и обновления.

  • Строка была вставлена на подписчике, который должен быть только для чтения. Подписчики публикаций моментальных снимков должны рассматриваться как доступные только для чтения, как и подписчики транзакционных публикаций, если не используется обновляемая подписка или одноранговая репликация транзакций.

  • Используется таблица со столбцом идентификаторов, но столбец управляется ненадлежащим образом.

  • При репликации слиянием эта ошибка также может возникать во время вставки в системную таблицу MSmerge_contents; возникающая ошибка выглядит следующим образом: невозможно вставить строку с повторяющимся ключом в объекте "MSmerge_contents" с уникальным индексом ucl1SycContents.

Действие пользователя

Необходимое действие зависит от причины возникновения ошибки:

  • Вставка и обновление строки происходят на нескольких узлах.

    Независимо от типа репликации, которую вы используете, мы рекомендуем по возможности разбивать вставки и обновления на сегменты, так как это позволяет сократить обработку, необходимую для обнаружения и разрешения конфликтов. Для одноранговой репликации транзакций требуется секционирование вставок и обновлений. Дополнительные сведения см. в разделе " Одноранговая репликация транзакций".

  • Строка была вставлена на подписчике, который должен быть только для чтения.

    Не вставлять или обновлять строки на подписчике, если вы не используете репликацию слиянием, репликацию транзакций с обновляемыми подписками или одноранговую репликацию транзакций.

  • Используется таблица со столбцом идентификаторов, но столбец управляется ненадлежащим образом.

    Для репликации слиянием и транзакционной репликации с обновляемыми подписками столбцы идентификаторов должны управляться репликацией автоматически. Для одноранговой репликации транзакций они должны управляться вручную. Дополнительные сведения см. в разделе "Репликация столбцов удостоверений".

  • Ошибка возникает во время вставки в системную таблицу MSmerge_contents.

    Эта ошибка может возникать из-за неправильного значения свойства фильтра соединения join_unique_key. Это свойство должно иметь значение TRUE, только если присоединенный столбец в родительской таблице является уникальным. Если свойство имеет значение TRUE, но столбец не является уникальным, возникает эта ошибка. Дополнительные сведения о настройке этого свойства см. в разделе "Определение и изменение фильтра соединения между статьями слияния".

См. также

Справочник по ошибкам и событиям (репликация)