Condividi tramite


MSSQL_ENG002601

Dettagli messaggio

Nome prodotto

SQL Server

Versione prodotto

9.0

Numero di build del prodotto

9.00.1399.60

ID evento

2601

Origine evento

MSSQLSERVER

Componente

Motore di database di SQL Server

Nome simbolico

N/A

Testo del messaggio

Impossibile inserire la riga di chiave duplicata nell'oggetto '%.*ls' con indice univoco '%.*ls'.

Spiegazione

Questo errore generale può essere generato indipendentemente dal fatto che un database venga o meno replicato. Nei database replicati l'errore viene di solito generato in quanto le chiavi primarie non sono state gestite correttamente nella topologia. In un ambiente distribuito è fondamentale garantire che lo stesso valore non venga inserito in una colonna chiave primaria o in qualsiasi altra colonna univoca in più di un nodo. Le cause possibile includono:

  • Le operazioni di inserimento e aggiornamento su una riga vengono eseguite in più di un nodo. Sebbene la replica di tipo merge e le sottoscrizioni aggiornabili per la replica transazionale consentano il rilevamento e la risoluzione dei conflitti, è preferibile inserire o aggiornare una determinata riga in un unico nodo. La replica transazionale di tipo peer-to-peer non fornisce funzioni di rilevamento e risoluzione dei conflitti e richiede il partizionamento degli inserimenti e degli aggiornamenti.
  • È stata inserita una riga in un Sottoscrittore che dovrebbe essere di sola lettura. I Sottoscrittori delle pubblicazioni snapshot devono essere considerati come di sola lettura, analogamente ai Sottoscrittori delle pubblicazioni transazionali a meno che non vengano utilizzate sottoscrizioni aggiornabili o una replica transazione peer-to-peer.
  • Viene utilizzata una tabella con una colonna Identity, ma la colonna non è gestita in modo appropriato.
  • Nella replica di tipo merge questo errore può verificarsi anche durante un inserimento nella tabella di sistema MSmerge_contents. L'errore generato è simile all'errore "Impossibile inserire la riga di chiave duplicata nell'oggetto 'MSmerge_contents' con indice univoco 'ucl1SycContents'".

Azione utente

L'azione richiesta dipende dal motivo per il quale è stato generato l'errore:

  • Le operazioni di inserimento e aggiornamento su una riga vengono eseguite in più di un nodo.
    Indipendentemente dal tipo di replica utilizzato, è consigliabile partizionare inserimenti e aggiornamenti quando possibile, in modo da ridurre l'elaborazione richiesta per il rilevamento e la risoluzione dei conflitti. Per la replica transazionale peer-to-peer, è richiesto il partizionamento di inserimenti e aggiornamenti. Per ulteriori informazioni, vedere Replica transazionale peer-to-peer.
  • È stata inserita una riga in un Sottoscrittore che dovrebbe essere di sola lettura.
    Non inserire o aggiornare righe nel Sottoscrittore a meno che non si stia utilizzando la replica di tipo merge, la replica transazionale con sottoscrizioni aggiornabili o la replica transazionale peer-to-peer.
  • Viene utilizzata una tabella con una colonna Identity, ma la colonna non è gestita in modo appropriato.
    Per la replica di tipo merge e la replica transazionale con sottoscrizioni aggiornabili, le colonne Identity devono essere gestite automaticamente dalla replica. Per la replica transazionale peer-to-peer, devono invece essere gestite manualmente. Per ulteriori informazioni, vedere Replica di colonne Identity.
  • L'errore si verifica durante un inserimento nella tabella di sistema MSmerge_contents.
    Tale errore può verificarsi a causa di un valore non corretto per la proprietà del filtro join join_unique_key. Tale proprietà deve essere impostata su TRUE solo se la colonna unita in join nella tabella padre è univoca. Se la proprietà è impostata su TRUE ma la colonna non è univoca, viene generato l'errore. Per ulteriori informazioni sull'impostazione di questa proprietà, vedere Procedura: Definizione e modifica di un filtro join tra articoli di merge (SQL Server Management Studio) e How to: Define and Modify a Join Filter Between Merge Articles (Replication Transact-SQL Programming).

Vedere anche

Concetti

Causa e risoluzione degli errori di replica

Guida in linea e informazioni

Assistenza su SQL Server 2005