Project Server 2007: PWA Provisioning issue after February CU – Cannot insert duplicate key row

**** Update  (Thanks for the reminder to update this one Seth)  This issue is resolved by the August CU for Project Server 2007 the details of which can be found at http://blogs.msdn.com/chrisfie/archive/2009/08/27/announcing-the-release-of-the-microsoft-project-and-project-server-2007-august-cumulative-update.aspx. and the direct link is http://support.microsoft.com/kb/973937.

Details of the specific issue and fix:

You install the update that is described in Microsoft Knowledge Base (KB) article 968271. When you create a site in Project Server 2007 that has the Multilingual User Interface Pack (MUI) installed, a second timer job is created in the native language and the site provisioning fails. ****

The full error is Cannot insert duplicate key row in object ‘dbo.Objects’ with unique index ‘IX_Objects_ClassId_ParentId_Name’, and this occurs when trying to provision a new PWA site in a farm.  Some background first, and then the workaround.  In the February CU we added a fix for the “waiting for resources” problems customers had run into when trying to provision new PWA sites.  This was caused by a missing timer job.  The fix checked for the timer job, and if it wasn’t found it was created – which for most of our customers was a perfect fix. However, for customers running multiple language versions (MUIs), or even just non US English versions it could fail to detect the timer job and think it was missing and try to re-create it – which led to the error!

My colleague Aik had been working on this problem and had a couple of workarounds we’d shared with customers and these turned up back in my blog comments a couple of days ago (Thanks Jose!) – so I thought the time was right for a full posting.  So here are the workarounds – with option #1 being the favored one as it has the least impact on the users of the server:

Option #1 – Delete sync jobs before provisioning site

  1. To delete a timer definition job, find the Job ID by going to the Sharepoint Central Administration site | Operations | Timer Job Definitions
  2. Look for the Project Server sync jobs and right click on the links and select Copy Link – the default names for the jobs (in English) will be something like Project Server Synchronizing job for ‘SharedServices1’.
  3. Paste the link into Notepad and the link will look something like this: :/_admin/JobEdit.aspx?JobId=57b935d4%2Db43f%2D4dc4%2Dbd9c%2Dc74bb000b9c6″>http://<servername>:<Central Admin Port>/_admin/JobEdit.aspx?JobId=57b935d4%2Db43f%2D4dc4%2Dbd9c%2Dc74bb000b9c6
  4. Copy out just the JobId section and replace the text “%2D” with a dash e.g –
  5. Once you are done your GUID should look like the following based on the example above: 57b935d4-b43f-4dc4-bd9c-c74bb000b9c6
  6. Run the following command with the jobID. [stsadm -o deleteconfigurationobject -id <job_Id>]. For example: stsadm -o deleteconfigurationobject -id 57b935d4-b43f-4dc4-bd9c-c74bb000b9c6
  7. Make sure to delete both Project Server Synchronization Timer jobs
  8. Provision site as you normally would.

Option#2 – Change the regional settings

  1. Change the regional settings on the server to MATCH the language of the MUI.
  2. Provision site
  3. Change the regional settings back to it’s original.

Any issues, or if you need some help working through these steps then please contact support.  My blog reader Jose says we are may be fixing this in the June CU – though I couldn’t possibly comment…

Technorati Tags: ,