MSSQL_ENG002601
Si applica a: SQL Server Istanza gestita di SQL di Azure
Dettagli messaggio
Attributo | Valore |
---|---|
Nome prodotto | SQL Server |
ID evento | 2601 |
Origine evento | MSSQLSERVER |
Componente | Motore di database di SQL Server |
Nome simbolico | N/D |
Testo del messaggio | Impossibile inserire una 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 altre informazioni, vedere Peer-to-Peer Transactional Replication.
È 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 altre informazioni, vedere Replicare 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 Definizione e modifica di un filtro di join tra articoli di merge.