Não consigo reparar meu banco de dados devido aos erros abaixo, quando executo dbcc checkdb(DBNAME, REPAIR_ALLOW_DATA_LOSS)
, recebo os erros listados aqui.
Quando executo uma consulta select para esses valores de chave, ela retorna apenas uma linha, mas quando executo dbcc checkdb(DBNAME, REPAIR_ALLOW_DATA_LOSS)
estes erros são lançados:
Msg 1505, Nível 16, Estado 1, Linha 2
A instrução CREATE UNIQUE INDEX foi encerrada porque uma chave duplicada foi encontrada para o nome do objeto 'dbo.MSmerge_contents' e o nome do índice 'uc1SycContents'. O valor da chave duplicada é (7696031, 08703987-557d-e111-9888-e61f13c44f03).
Msg 1505, Nível 16, Estado 1, Linha 2
A instrução CREATE UNIQUE INDEX foi encerrada porque uma chave duplicada foi localizada para o nome do objeto 'dbo.MSmerge_contents' e o nome do índice 'nc2MSmerge_contents'. O valor da chave duplicada é (424222, 7696031, 08703987-557d-e111-9888-e61f13c44f03).
Msg 1505, Nível 16, Estado 1, Linha 2
A instrução CREATE UNIQUE INDEX foi encerrada porque uma chave duplicada foi localizada para o nome do objeto 'dbo.MSmerge_contents' e o nome do índice 'nc4MSmerge_contents'. O valor da chave duplicada é (08703987-557d-e111-9888-e61f13c44f03, 7696031).
Msg 1505, Nível 16, Estado 1, Linha 2
A instrução CREATE UNIQUE INDEX foi encerrada porque uma chave duplicada foi localizada para o nome do objeto 'dbo.MSmerge_contents' e o nome do índice 'nc3MSmerge_contents'. O valor da chave duplicada é (-425819, 7696031, bf8a5a9c-6f7d-e111-9888-e61f13c44f03).
Msg 2601, Nível 14, Estado 1, Linha 2
Não é possível inserir linha de chave duplicada no objeto 'dbo.MSmerge_genhistory' com índice exclusivo 'unc1MSmerge_genhistory'.
Msg 1505, Nível 16, Estado 1, Linha 2
A instrução CREATE UNIQUE INDEX foi encerrada porque uma chave duplicada foi localizada para o nome do objeto 'dbo.MSmerge_genhistory' e o nome do índice 'unc1MSmerge_genhistory'. O valor da chave duplicada é (236bfa48-965e-4a65-b4cd-ac527de04d1b, ).
Como posso reparar meu banco de dados?
Quando você tem problemas de corrupção de índice (ou seja, chaves presentes no índice NC, mas não na tabela base ou vice-versa), você deve ter muito cuidado com o SQL que usa para validar os dados. Neste momento, seus dados são inconsistentes, mas o otimizador de consulta não sabe disso e confia totalmente em seu esquema, incluindo esses índices incorretos. Como tal, pode otimizar sua consulta para usar um dos índices NC que está faltando uma chave e o resultado também perderá uma chave falsa retornando sem duplicatas. Para resolver essa situação complicada, você precisa forçar a mão do otimizador solicitando explicitamente um índice ou outro e certifique-se de que a lista projetada de colunas possa ser satisfeita pelo índice que você aplicou (ou seja, não
*
). Assumir que nãouc1SycContents
éo índice clusterizado, tente o seguinte:Isso verificará vigorosamente se o rowguid tem uma duplicata para esse guid no índice clusterizado da tabela base (id do índice 1) versus o índice
uc1SycContents
. Espero que a primeira consulta retorne 2 (ou mais) linhas enquanto a segunda retorne 1.