Usando alertas para eventos do Replication Agent

O SQL Server Management Studio e o Microsoft SQL ServerAgent fornecem um modo para monitorar eventos, como eventos do agente de replicação, usando alertas. O SQL Server Agent monitora o log do aplicativo do Windows para eventos que são associados com alertas. Se tal evento ocorrer, o SQL Server Agent responde automaticamente, executando uma tarefa definida e/ou enviando um email ou mensagem de pager para um operador específico. O SQL Server inclui um conjunto de alertas predefinidos para agentes de replicação que pode ser configurado para executar uma tarefa e/ou notificar um operador. Para obter mais informações sobre como definir uma tarefa a executar, consulte a seção “Automatizando uma resposta para um alerta” neste tópico.

Os alertas a seguir são instalados quando um computador é configurado como um Distribuidor:

ID da mensagem

Alerta predefinido

Condição que aciona o alerta

Insere informações adicionais em msdb..sysreplicationalerts

14150

Replicação: êxito do agente

Agente é encerrado com êxito.

Sim

14151

Replicação: falha do agente

Agente é desligado com um erro.

Sim

14152

Replicação: repetição do agente

O agente desliga após repetir uma operação sem êxito (agente encontra erro, como servidor não disponível, deadlock, falha de conexão ou falha de tempo limite).

Sim

14157

Replicação: assinatura expirada cancelada

A assinatura expirada foi descartada.

Não

20572

Replicação: assinatura reinicializada após falha de validação

Trabalho de resposta 'Reinicializar assinatura em falha de validação de dados' reinicializa uma assinatura com êxito.

Não

20574

Replicação: falha na validação de dados do assinante

Distribution ou Merge Agent falha na validação de dados.

Sim

20575

Replicação: êxito na validação de dados do assinante

Distribution ou Merge Agent passa na validação de dados.

Sim

20578

Replicação: desligamento personalizado do agente

 

 

22815

Alerta de detecção de conflito ponto a ponto

O Distribution Agent detectou um conflito ao tentar aplicar uma alteração a um nó ponto a ponto.

Sim

Além dessa alertas, o Replication Monitor fornece um conjunto de advertências e alertas relacionado a status e desempenho. Para obter mais informações, consulte Definindo os limites e avisos no Replication Monitor. Também é possível definir alertas para outros eventos de replicação que usam a infra-estrutura de alerta do SQL Server. Para obter mais informações, consulte Criando um evento definido pelo usuário.

Para configurar os alertas de replicação predefinidos

Exibindo o log do aplicativo diretamente

Para visualizar o log do aplicativo do Windows, use o recurso Visualizar Eventos do Windows do Microsoft. O log do aplicativo contém mensagens de erro do SQL Server, assim como mensagens para muitas outras atividades no computador. Ao contrário do log de erros do SQL Server, um novo aplicativo não é criado a cada vez que se inicia o SQL Server (cada sessão do SQL Server grava novos eventos a um log de aplicativos existente); entretanto, é possível especificar quanto tempo os eventos registrados serão retidos. Ao exibir o log do aplicativo de Windows, é possível filtrar o log para eventos específicos. Para obter mais informações, consulte a documentação do Windows.

Automatizando uma resposta para um alerta

A replicação fornece um trabalho de resposta para assinaturas que apresentam falhas na validação dos dados, e também fornece uma estrutura para criar respostas automáticas adicionais para alertas. O trabalho de resposta é intitulado Reinicializar assinaturas em falha de validação de dados e é armazenado no SQL Server Agent, na pasta Trabalhos do SQL Server Management Studio. Para obter informações sobre como habilitar esse trabalho de resposta, consulte Como configurar alertas de replicação predefinidos (SQL Server Management Studio). Se artigos em uma publicação transacional falharem na validação, o trabalho de resposta reinicializa apenas esses artigos que falharam. Se artigos em uma publicação de mesclagem apresentarem falha na validação, o trabalho de resposta reinicializa todos os artigos na publicação.

Estrutura para automatizar respostas

Normalmente, quando ocorre um alerta, a única informação se tem que o ajuda a entender o que causou o alerta e a ação apropriada a tomar está na própria mensagem de alerta. A análise dessas informações pode ser suscetível a erros e ser demorada. A replicação torna as respostas automáticas mais fáceis ao fornecer informações adicionais sobre o alerta na tabela do sistema sysreplicationalerts; a informação fornecida já é analisada em um formato simples usado por programas personalizados.

Por exemplo, se a validação dos dados na tabela Sales.SalesOrderHeader no Assinante A falhar, o SQL Server pode acionar a mensagem 20574, notificando essa falha. A mensagem recebida será: "A assinatura do Assinante 'A', para o artigo 'SalesOrderHeader' na publicação 'MyPublication' falhou na validação de dados".

Ao criar uma resposta baseada nessa mensagem, é necessário analisar manualmente o nome do Assinante, nome do artigo e nome da publicação e erro da mensagem. Entretanto, porque o Distribution e o Merge Agent gravam a mesma informação no sysreplicationalerts (junto com detalhes como tipo de agente, hora do alerta, banco de dados de publicação, banco de dados do Assinante e tipo de publicação) o trabalho de resposta pode consultar diretamente a informação relevante da tabela. Embora a linha exata não possa ser associada com a instância específica do alerta, a tabela tem a coluna de status, que pode ser usada para controlar as entradas atendidas. As entradas nessa tabela serão mantidas pelo período de retenção do histórico.

Por exemplo, se fosse criada uma resposta de trabalho no Transact-SQL que atendesse à mensagem de alerta 20574, a seguinte lógica poderia ser usada:

declare @publisher sysname, @publisher_db sysname, @publication sysname, @publication_type int, @article sysname, @subscriber sysname, @subscriber_db sysname, @alert_id int
declare hc cursor local for select publisher, publisher_db, publication, publication_type, article, subscriber, 
  subscriber_db, alert_id from 
  msdb..sysreplicationalerts where
  alert_error_code = 20574 and status = 0
  for read only
open hc
fetch hc into  @publisher, @publisher_db, @publication, @publication_type, @article, @subscriber, @subscriber_db, @alert_id
while (@@fetch_status <> -1)
begin
/* Do custom work  */
/* Update status to 1, which means the alert has been serviced. This prevents subsequent runs of this job from doing this again */
update msdb..sysreplicationalerts set status = 1 where alert_id = @alert_id
 fetch hc into  @publisher, @publisher_db, @publication, @publication_type, @article, @subscriber, @subscriber_db, @alert_id
end
close hc
deallocate hc