Развертывание решения не удается с ошибкой «Нарушение первичного ключа ограничения PK_Classes»

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

  •  10-12-2019
  •  | 
  •  

Вопрос

В нашем установочном скрипте, который устанавливает несколько решений вместе, мы обнаружили, что решения иногда не развернули развертывание со следующей ошибкой в журнале ULS:

system.data.sqlclient.sqlexception: нарушение первичного ключа ограничение 'pk_classes'.Не удается вставить дубликатную клавишу в объекте 'dbo.classes'.

Это происходит с PowerShell, так и STSADM.

Это было полезно?

Решение

У нас была логика, которая дважды звонила в SPSILOL SPSOLOL на разных решениях (та же поведение, наблюдаемое с помощью STSADM), а затем логику для ожидания развертывания для завершения. В редких случаях, что произошло, состоит в том, что оба решения пытались приобрести блокировку развертывания до того, как либо нить получила блокировку; Один поток добится успеха, и один из них будет терпит неудачу с первичным ключевым исключением.

Так будет выглядеть журнал:

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

вместо:

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
.

(с последующим раствором отказано и ждет решения для завершения)

Решение - установить одно решение, подождите его завершить, затем установите другой. Есть некоторые образцы того, как ждать, как ждать, используя свойство Jobexists на решении здесь: Обнаружение статуса развертывания решения . Это не очень медленнее сделать это таким образом (не больше, чем ваш интервал ожидания), потому что за кулисами SharePoint проходит одну работу, а затем все в любом случае, когда замки будут правильно приобретены.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top