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


MSSQL_ENG002601

Подробности сообщений

Название продукта

SQL Server;

Версия продукта

10.0

Номер сборки продукта

Идентификатор события

2601

Источник события

MSSQLSERVER;

Компонент

SQL Server Database Engine

Символическое имя

Н/Д

Текст сообщения

Невозможно вставить повторяющуюся строку ключей в объект '%.*ls' с уникальным индексом '%.*ls'.

Объяснение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Эта ошибка может возникнуть вследствие неверного значения свойства join_unique_key фильтра соединения. Это свойство должно быть установлено равным TRUE, только если соединенный столбец в родительской таблице является уникальным. Если это свойство установлено равным TRUE, но столбец не является уникальным, возникает эта ошибка. Дополнительные сведения об установке данного свойства см. в разделах Как определить и изменить фильтр соединения между статьями публикации слиянием (среда SQL Server Management Studio) и Как определить и изменить фильтр соединения между статьями публикации слиянием (программирование репликации на языке Transact-SQL).