Partilhar via


MSSQL_ENG002627

Detalhes da mensagem

Nome do produto

SQL Server

Versão do produto

10.50

Número da compilação do produto

 

ID do evento

2627

Origem do evento

MSSQLSERVER

Componente

Mecanismo de banco de dados do SQL Server

Nome simbólico

N/A

Texto da mensagem

Violação da restrição %ls '%.*ls'. Não é possível inserir a chave duplicada no objeto '%.*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.

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