Le déploiement de la solution échoue avec une erreur "violation de la contrainte principale" PK_Classes ""

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

  •  10-12-2019
  •  | 
  •  

Question

Dans notre script d'installation, qui installe plusieurs solutions ensemble, nous avons constaté que les solutions étant occasionnellement omis de déployer avec l'erreur suivante dans le journal ULS:

system.data.sqlclient.sqxception: violation de la clé primaire contrainte 'pk_classes'.Impossible d'insérer une touche dupliquée dans l'objet 'Dbo.classes'.

Cela se produit avec PowerShell et Stsadm.

Était-ce utile?

La solution

Nous avions une logique qui appelait install-spsolution deux fois sur différentes solutions (même comportement observé avec Stsadm), puis logique pour attendre le déploiement à compléter. Dans de rares cas, ce qui s'est passé, c'est que les deux solutions tentaient d'acquérir le verrouillage de déploiement avant que l'un ou l'autre fil ait eu la serrure; Un thread réussirait et on échouerait avec l'exception de la clé principale.

Donc, le journal ressemblerait à:

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

au lieu de:

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

(suivi de la solutionB étant refusé et en attente de la mise au point de solua)

La solution consiste à installer une solution, à attendre la fin, puis installez une autre. Il y a quelques échantillons de Comment attendre l'utilisation de la propriété Jobexists sur la solution ici: détecter la solution Déploiement d'état . Ce n'est pas vraiment plus lent de le faire de cette façon (pas plus que votre intervalle d'attente), car derrière les scènes SharePoint exécute un travail, puis l'autre quand les serrures sont correctement acquises.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top