Поделиться через


MSSQL_ENG002601

Область применения: SQL Server Управляемый экземпляр SQL Azure

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

Атрибут Значение
Название продукта SQL Server
ИД события 2601
Источник событий MSSQLSERVER
Компонент Компонент SQL Server Database Engine
Символическое имя Н/П
Текст сообщения Не удается вставить повторяющиеся строки ключа в объект "%.*ls" с уникальным индексом "%.*ls".

Описание

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

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

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

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

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

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

Действие по устранению проблемы зависит от причины, по которой она возникла:

  • Вставки или обновления строки выполняются более чем в одном узле.

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

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

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

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

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

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

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

См. также

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