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).