Use o parâmetro -SkipErrors no Agente de Distribuição

Este artigo apresenta o uso do -SkipErrors parâmetro no Agente de Distribuição.

Versão original do produto: SQL Server
Número de KB original: 327817

Resumo

A Microsoft SQL Server inclui o novo parâmetro -SkipErrors no Agente de Distribuição que permite que o Agente de Distribuição ignore o erro indicado na replicação transacional e continue o processo de distribuição.

O seguinte trecho é do tópico Manipulando erros do agente no SQL Server Books Online:

No processamento de replicação típico, você não deve sofrer erros que precisem ser ignorados. A capacidade de ignorar erros durante a replicação transacional está disponível para as circunstâncias exclusivas em que você espera erros e não deseja que eles afetem a replicação (por exemplo, ao falhar em um Publicador secundário durante o envio de logs).

A Microsoft recomenda que você use esse parâmetro com cautela e somente quando tiver uma boa compreensão do seguinte:

  • O que o erro indica.
  • Por que o erro ocorre.
  • Por que é melhor ignorar o erro em vez de resolvê-lo.

Se você não souber as respostas para esses itens, o uso inadequado do -SkipErrors parâmetro poderá causar inconsistência de dados entre o Editor e o Assinante. Este artigo descreve alguns problemas que podem ocorrer quando você usa incorretamente o -SkipErrors parâmetro.

Mais informações

Na replicação transacional, as alterações de dados no Publisher são propagadas para o Assinante na unidade de transação.

Em uma transação, pode haver vários comandos. Por padrão, se um comando falhar, toda a transação de replicação será revertida para o Assinante. Se você adicionar o -SkipErrors parâmetro para permitir que o Agente de Distribuição ignore determinados erros, o comando individual que causa esse erro não será aplicado ao Assinante, mas todos os outros comandos nas mesmas transações serão aplicados. Nessa situação, a transação de replicação só é parcialmente aplicada ao Assinante, o que pode, portanto, causar a inconsistência de dados entre o Publicador e o Assinante.

Por exemplo:

Você tem uma transação aguardando para ser replicada na tabela Assinante chamada T1. Essa transação inclui 100 instruções de inserção. Quando ele se aplica ao Assinante, o primeiro 90 insere o processo corretamente; no entanto, a instrução de inserção de noventa primeiros falha e ocorre o erro de violação da chave primária 2627.

Quando você não usa o -SkipErrors parâmetro (comportamento padrão):

Por padrão, toda a transação é revertida e nenhum dos 100 novos registros é inserido na tabela de subscrição. Nessa situação, você deve corrigir o erro de replicação para que a transação possa ser reaplicada ao Assinante.

Quando você usa o -SkipErrors parâmetro:

O Agente de Distribuição registra o erro no histórico de Agente de Distribuição, ignora esse erro e continua o processo de distribuição. Portanto, exceto pelo novo registro de noventa primeiros que causou o erro, os outros 99 novos registros são inseridos na tabela de subscrição. Essa transação não é reaplicada pelo Agente de Distribuição, mesmo depois de você corrigir manualmente o erro no Assinante. Portanto, nessa situação, o Assinante não tem o noventa primeiro novo registro e ocorre um problema de inconsistência de dados.

Você também deve estar ciente de que, em SQL Server 2000 normalmente, o Agente de Distribuição é compartilhado por várias publicações (por padrão, há uma Agente de Distribuição por banco de dados de publicação e par de banco de dados de assinatura), portanto, se você adicionar o -SkipErrors parâmetro ao Agente de Distribuição trabalho, afeta todas as publicações que esse agente está atendendo. Nas versões SQL 2005 e SQL 2008, a replicação transacional usa agentes independentes por padrão para publicações criadas no Assistente de Nova Publicação. Para publicações criadas usando sp_addpublication o procedimento armazenado, o comportamento padrão é usar um agente compartilhado.

Para usar o -SkipErrors parâmetro para uma publicação específica, use um agente independente, que apenas atende a uma assinatura. Para usar um agente independente, siga as etapas da sua versão:

SQL Server 2000

  1. No gerenciador de SQL Server Enterprise, clique com o botão direito do mouse na publicação, clique Propertiesem e, em seguida, na guia Opções de Assinatura, clique em usar um Agente de Distribuição independente de outra publicação dessa opção de banco de dados.

    Observação

    Você não pode ativar essa opção depois de adicionar assinaturas a esta publicação.

  2. Adicione o -SkipErrors parâmetro ao Agente de Distribuição de uma assinatura específica.

SQL Server 2005 e SQL Server 2008

  1. Em SQL Server estúdio de gerenciamento, navegue até Replicação e, em seguida, na seção Publicações Locais clique com o botão direito do mouse na publicação, clique em Propriedades e, em seguida, na página Opções de Assinatura, altere o valor de Agente de Distribuição Independente de False para True.

    Observação

    Você não pode ativar essa opção depois de adicionar assinaturas a esta publicação.

  2. Adicione o -SkipErrors parâmetro ao Agente de Distribuição de uma assinatura específica.

Para obter mais informações, confira o seguinte: