Home > Project Server - TroubleShooting, SharePoint - TroubleShoothing > Cannot insert duplicate key row in object ‘dbo.Objects’ with unique index ‘IX_Objects_ClassId_ParentId_Name’

Cannot insert duplicate key row in object ‘dbo.Objects’ with unique index ‘IX_Objects_ClassId_ParentId_Name’


Olá! Smile

Overview:

O mundo do SharePoint ganha horizontes com proporções gigantescas já que a Microsoft adota fortemente a plataforma e indica que este é o produto que encabeçará a maioria de todos os seus outros produtos. Parece loucura, não é?

Mas perceba que hoje já temos diversos outros produtos que utilizam o SharePoint como interface para colaboração enquanto o produto em si roda no background. Alguns exemplos: Project Server, Dynamics CRM, FAST, etc.

Cenário:

Em mais um projeto da saga “SAP Migration” precisamos colher informações do Project Server e SharePoint para gerar arquivos para o SAP.

Ao iniciar o processo de migração da Farm de Project Server para um ambiente de homologação para realização dos testes das ferramentas de migração, nos deparamos com um erro ao provisionar o site de PWA no Shared Services Provider Adminsitration do SharePoint.

ERRO:

Ao procurar pelos erros no ULS do SharePoint (C:\Program files\Commom Files\Microsoft shared\Web Server Extensions\14\LOGS) encontramos o erro:

Cannot insert duplicate key row in object ‘dbo.Objects’ with unique index ‘IX_Objects_ClassId_ParentId_Name’.

E agora?

Com um pouco (mentira, com MUITA) pesquisa descobri esse erro era causado por o processo tentar fazer duas (ou mais) vezes a mesma operação por que ao gerar erro, o processo de provisionamento da instância PWA não removia as configurações que ele tentou fazer.

Uma dessas configurações, era um TimerJob criado para sincronizar as informações e gravar no bando do Project, com o nome similar a “Project Server Synchronizing job for ‘SharedServices1’” ou no idioma que você tiver disponibilizado na farm. Por exemplo, no meu, o nome estava em PT-BR: “Trabalho de Sincronização do Project Server para ‘SharedServices1’”.

Quando o provisionamento ocorre com sucesso, o processo exclui esse TimerJob. Ou seja, se ele estiver lá nos Job Defitions, vai dar o erro mencionado neste post.

SOLUÇÃO:

Para resolver este problema precisamos remover este TimerJob ANTES de tentar provisionar a instância de PWA novamente. Para isso, faça o seguinte:

1. Vá até a Central Administration do SharePoint > Operations > TimerJob Defitions

2. Localize o TimerJob com o nome mencionado acima: Project Server Synchronizing job for ‘SharedServices1’. O nome muda. De acordo com o idioma o nome é traduzido.

3. Clique com o botão direito em cima do link do Job, copie e cole em um bloco de notas. Com isso vamos identificar o Job que precisamos excluir.

4. Pegue apenas o valor de JobId que contém no link (ex: http://&lt;servername>:<Central Admin Port>/_admin/JobEdit.aspx?JobId=7CC18CF5%2D5C89%2D 47E3%2DA098%2D 99401FD3E689).

5. Troque o valor %2D por chegando a algo similar a um GUID (e é um GUID): 7CC18CF5-5C89-47E3-A098-99401FD3E689.

a. IMPORTANTE: Cada Job tem ID próprio. Você deve localizar o ID do Job do seu ambiente.

6. Repita a operação para cada Job que existir com esse nome. Devemos remover todos os Jobs de Sincronização do Job.

7. Agora que temos os GUIDs vamos deleta-los usando o STSADM com o comando: stsadm –o deleteconfigurationobject –id 7CC18CF5-5C89-47E3-A098-99401FD3E689.

a. Repita a operação para cada Job com seu respectivo GUID.

Pronto, agora é só provisionar a instância do Project novamente.

Abraço!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: