在我们的安装脚本中一起安装多个解决方案,我们发现解决方案偶尔会在ULS日志中使用以下错误部署:

system.data.sqlclient.sqllexception:违反主键 约束'pk_classes'。无法在对象中插入重复密钥 'dbo.classes'。

这两种PowerShell和Stsadm都会发生。

有帮助吗?

解决方案

我们有逻辑在不同的解决方案上调用Install-spsolution两次(使用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归因
scroll top