A Microsoft distribui o Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) ou o Microsoft SQL Server 2012 correções em um arquivo que pode ser baixado. Como as correções são cumulativas, cada nova versão contém todos os hotfixes e todas as atualizações de segurança que foram incluídas na versão anterior do SQL Server 2008 R2 Service Pack 1 (SP1) ou do Microsoft SQL Server 2012 atualização.
Sintomas
Considere o seguinte cenário:
-
Você cria pelo menos duas publicações de replicação transactionl com base em um banco de dados no Microsoft SQL Server 2008 R2 ou no Microsoft SQL Server 2012.
-
Cada publicação tem pelo menos um artigo. Os artigos não se sobrepõem e cada artigo pertence a apenas uma publicação.
-
Você define a propriedade @sync_method das publicações como simultâneas.
-
Você define a propriedade @immediate_sync das publicações para true.
-
Você define o parâmetro MaxCmdsInTran do agente de leitor de log para um valor diferente de zero.
-
Uma das publicações recebe muitas inserções em uma transação.
-
Depois que a transação for confirmada, o agente de leitor de log começará a processar e dividir a transação de acordo com o parâmetro MaxCmdsInTran .
-
O agente de instantâneo em outra publicação é iniciado antes de o agente de leitor de log concluir a tarefa.
Nesse cenário, o agente de leitor de log falha e você recebe a seguinte mensagem de erro:
O processo não pôde executar ' sp_MSadd_replcmds ' em ' Server\Instance '. (Origem: MSSQLServer, número do erro: 1007) Não é possível inserir uma linha de chave duplicada no objeto ' dbo. MSrepl_commands ' com índice exclusivo ' ucMSrepl_commands '. (Origem: MSSQLServer, número do erro: 1007)
Resolução
Informações sobre a atualização cumulativa
SQL Server 2012
A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 1 para SQL Server 2012. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:
2679368 Pacote de atualização cumulativa 1 para SQL Server 2012Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do SQL Server 2012 Fix. A Microsoft recomenda que você considere a aplicação do lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:
2692828 As compilações do SQL Server 2012 lançadas após o lançamento do SQL Server 2012 Você deve aplicar um hotfix do SQL Server 2012 a uma instalação do SQL Server 2012.
Pacote de atualização cumulativa 4 para SQL Server 2008 R2 SP1
A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 4. Para obter mais informações sobre como obter este pacote de atualização cumulativa do SQL Server 2008 R2 SP1, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:
2633146 Pacote de atualização cumulativa 4 para SQL Server 2008 R2 SP1Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do SQL Server 2008 R2 SP1. Recomendamos que você considere a aplicação do lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:
2567616 As compilações do SQL Server 2008 R2 que foram lançadas após a liberação do SQL Server 2008 R2 SP1
Solução alternativa
Como solução alternativa para esse problema, use um dos seguintes métodos:
-
Não defina a propriedade @sync_method das publicações como "concorrente" e não defina a propriedade @immediate_sync das publicações como "verdadeiro".
-
Defina o valor do parâmetro MaxCmdsInTran para zero.
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".