Compartilhar via


MSSQL_ENG002601

Detalhes da mensagem

Nome do produto

SQL Server

Versão do produto

10.0

Número da compilação do produto

 

ID do evento

2601

Origem do evento

MSSQLSERVER

Componente

Mecanismo de Banco de Dados do SQL Server

Nome simbólico

N/A

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 ocorrer independentemente de um banco de dados ser ou não replicado. Nos bancos de dados replicados, esse erro geralmente ocorre porque as chaves primárias não foram gerenciadas corretamente na topologia. Em um ambiente distribuído, é essencial garantir que o mesmo valor não seja inserido em uma coluna de chave primária ou 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 acontecendo em mais de um nó. A replicação de mesclagem e as assinaturas atualizáveis para replicação de transação oferecem detecção e resolução de conflitos, mas ainda é melhor inserir ou atualizar uma determinada linha apenas em um nó. O ponto a ponto transacional não oferece detecção e resolução de conflitos. Ele exige que as inserções e as atualizações sejam particionadas.

  • Uma linha foi inserida em um Assinante que deveria ser somente leitura. Assinantes de publicações de instantâneo devem ser tratados como somente leitura, do mesmo modo que Assinantes de publicações transacionais, exceto se forem usadas assinaturas atualizáveis ou replicação de transação ponto a ponto.

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

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

Ação do usuário

A ação necessária depende do motivo que levou à ocorrência do erro:

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

    Independentemente do tipo de replicação usado, recomendamos o particionamento das atualizações e inserções sempre que possível para reduzir o processamento necessário para a detecção e a resolução de conflitos. Para a replicação de transação ponto a ponto, é necessário o particionamento de inserções e atualizações. Para obter mais informações, consulte Replicação de transação ponto a ponto.

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

    Não insira ou atualize linhas no Assinante, exceto se estiver usando a replicação de mesclagem, a replicação de transação com assinaturas atualizáveis ou a replicação de transação ponto a ponto.

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

    Para replicação de mesclagem e replicação de transação com assinaturas atualizáveis, as colunas de identidade devem ser gerenciadas automaticamente por replicação. Para replicação de transação ponto a ponto, elas devem ser gerenciadas manualmente. Para obter mais informações, consulte Colunas de identidade de replicação.

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

    O erro pode ocorrer devido a um valor incorreto para a propriedade de filtro de junção join_unique_key. Essa propriedade só deverá ser definida como TRUE se a coluna associada na tabela pai for exclusiva. Se a propriedade for 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 Como definir e modificar um filtro de junção entre artigos de mesclagem (SQL Server Management Studio) e Como definir e modificar um filtro de junção entre artigos de mesclagem (Programação Transact-SQL de replicação).