Partilhar via


MSSQL_ENG002601

Detalhes da mensagem

Nome do produto SQL Server
ID do evento 2601
Origem do evento MSSQLSERVER
Componente Mecanismo de Banco de Dados do SQL Server
Nome simbólico Não aplicável
Texto da mensagem Não é possível inserir uma linha de chave duplicada no objeto '%.*ls' com índice exclusivo '%.*ls'.

Explicação

Esse é um erro geral que pode ser gerado independentemente de um banco de dados ser replicado. Em bancos de dados replicados, o erro normalmente é gerado porque as chaves primárias não foram gerenciadas adequadamente em toda a topologia. Em um ambiente distribuído, é essencial garantir que o mesmo valor não seja inserido em uma coluna de chave primária ou em qualquer outra coluna exclusiva em mais de um nó. As causas possíveis podem ser:

  • Inserções e atualizações em uma linha estão ocorrendo em mais de um nó. A replicação de mesclagem e as assinaturas atualizáveis para replicação transacional fornecem detecção e resolução de conflitos, mas ainda é preferível inserir ou atualizar uma determinada linha em apenas um nó. Transações ponto a ponto não fornecem detecção e resolução de conflitos; requerem que inserções e atualizações sejam particionadas.

  • Uma linha foi inserida em um Assinante que deve ser somente leitura. Os assinantes de publicações de instantâneo devem ser tratados como somente leitura, assim como os assinantes de publicações transacionais, a menos que assinaturas atualizáveis ou replicações transacionais ponto a ponto sejam usadas.

  • Uma tabela com uma coluna de identidade está sendo usada, mas a coluna não é gerenciada adequadamente.

  • Na replicação de mesclagem, esse erro também pode ocorrer durante uma inserção na tabela do sistema MSmerge_contents; o erro gerado é semelhante a: não é possível inserir uma linha de chave duplicada no objeto 'MSmerge_contents' com o índice exclusivo 'ucl1SycContents'.

Ação do usuário

A ação necessária depende do motivo pelo qual o erro foi gerado:

  • Inserções e atualizações em uma linha estão ocorrendo em mais de um nó.

    Independentemente do tipo de replicação usado, recomendamos que você particione inserções e atualizações sempre que possível, pois isso reduz o processamento necessário para detecção e resolução de conflitos. Para replicação transacional entre pares, é necessário particionar inserções e atualizações. Para obter mais informações, consulte Replicação Transacional Ponto a Ponto.

  • Uma linha foi inserida em um Assinante que deve ser somente leitura.

    Não insira ou atualize linhas no Assinante, a menos que você esteja usando replicação de mesclagem, replicação transacional com assinaturas atualizáveis ou replicação transacional ponto a ponto.

  • Uma tabela com uma coluna de identidade está sendo usada, mas a coluna não é gerenciada adequadamente.

    Para replicação de mesclagem e replicação transacional com subscrições atualizáveis, as colunas de identidade devem ser gerenciadas automaticamente por replicação. Para replicação transacional ponto a ponto, eles devem ser gerenciados manualmente. Para mais informações, consulte Colunas de Identidade Replicadas.

  • O erro ocorre durante uma inserção na tabela do sistema MSmerge_contents.

    Esse erro pode ocorrer devido a um valor incorreto para a propriedade de filtro de junção join_unique_key. Essa propriedade deve ser definida como TRUE somente se a coluna associada na tabela pai for única. Se a propriedade estiver definida como TRUE, mas a coluna não for exclusiva, esse erro será gerado. Para obter mais informações sobre como definir essa propriedade, consulte Definir e modificar um filtro de junção entre artigos de mesclagem.

Consulte Também

Referência de erros e eventos (replicação)