La distribuzione della soluzione non riesce con l'errore "violazione del vincolo chiave primario" PK_CLASSES '"

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/72560

  •  10-12-2019
  •  | 
  •  

Domanda

Nel nostro script di installazione, che installa più soluzioni insieme, abbiamo trovato che le soluzioni sono state occasionalmente non riuscire a implementare con il seguente errore nel registro ULS:

.

system.data.sqlclient.sqlexception: violazione della chiave primaria vincolo 'pk_classes'.Impossibile inserire la chiave duplicata nell'oggetto 'dbo.classes'.

Si verifica con PowerShell e Stsadm.

È stato utile?

Soluzione

Abbiamo avuto la logica che stava chiamando Install-Spsolution due volte su soluzioni diverse (stesso comportamento osservato con STSADM), quindi la logica per l'attesa della distribuzione da completare. In casi rari, quello che è successo, è che entrambe le soluzioni stavano tentando di acquisire il blocco della distribuzione prima della discussione con la serratura; Un thread avrebbe successo e si avrebbe fallito con l'eccezione della chiave primaria.

Quindi il registro sarebbe simile a

Solution Deployment : Acquiring deployment job lock for server ... solutionA.wsp  
Solution Deployment : Acquiring deployment job lock for server ... solutionB.wsp  
Solution Deployment : Successfull ACQUIRED deployment job lock for server ... solutionA.wsp 
System.Data.SqlClient.SqlException: Violation of PRIMARY KEY constraint 'PK_Classes'. Cannot insert duplicate key in object 'dbo.Classes'.
.

invece di:

Solution Deployment : Acquiring deployment job lock for server ... solutionA.wsp  
Solution Deployment : Successfull ACQUIRED deployment job lock for server ... solutionA.wsp 
Solution Deployment : Acquiring deployment job lock for server ... solutionB.wsp
.

(seguito da Solutionb che viene negato e in attesa di Solution per finire)

La soluzione è installare una soluzione, attendere il completamento, quindi installarne un altro. Ci sono alcuni esempi di come aspettare di utilizzare la proprietà JobExists sulla soluzione qui: Rilevamento della soluzione Distribuzione dello stato . Non è davvero più lento da farlo in questo modo (non più del tuo intervallo di attesa), perché dietro le quinte SharePoint esegue un lavoro e poi l'altro comunque quando le serrature sono adeguatamente acquisite.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top