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