La implementación de la solución falla con error "Violación de la restricción de clave primaria 'PK_Classes'"

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

  •  10-12-2019
  •  | 
  •  

Pregunta

En nuestro script de instalación, que instala varias soluciones, encontramos que las soluciones ocasionalmente no se desplegan con el siguiente error en el registro ULS:

system.data.sqlclient.sqlexception: violación de la clave primaria restricción 'pk_classes'.No se puede insertar la tecla duplicada en el objeto 'dbo.classes'.

Esto ocurre con PowerShell y STSADM.

¿Fue útil?

Solución

Tuvimos la lógica que llamó a Install-SPSolution dos veces en diferentes soluciones (mismo comportamiento observado con STSADM), y luego lógica para esperar a que se complete la implementación. En raras casas, lo que sucedió, es que ambas soluciones intentaban adquirir el bloqueo de despliegue antes de que fuera la cerradura; Un hilo tendría éxito y uno fallaría con la clave clave principal.

Así que el registro se vería como:

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

en lugar 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

(seguido de Solutionb se niega y esperando a que termine de que termine)

La solución es instalar una solución, espere a que se complete, luego instale otro. Hay algunas muestras de cómo esperar utilizando la propiedad JobExists en la solución aquí: Solución de detección de la solución de implementación de estado . No es realmente más lento para hacerlo de esta manera (no más que su intervalo de espera), porque detrás de la escena SharePoint ejecuta un trabajo y luego, de todos modos, cuando las cerraduras se adquieren correctamente.

Licenciado bajo: CC-BY-SA con atribución
scroll top