Compartilhar via


Usar Alertas para eventos do agente de replicação

Aplica-se: SQL Server

O SQL Server Management Studio e o Microsoft SQL Server Agent fornecem uma maneira de 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 esse evento ocorrer, o SQL Server Agent responderá automaticamente, executando uma tarefa que você definiu e/ou enviando uma mensagem de email ou pager a um operador especificado. O SQL Server inclui um conjunto de alertas predefinidos para agentes de replicação que você pode configurar para executar uma tarefa e/ou notificar um operador. Para obter mais informações sobre como definir uma tarefa a executar, consulte Automatizando uma resposta para um alerta.

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 Introduz 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 O Agente de Distribuição ou Mesclagem 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 Quando a validação de dados é invocada por meio de sp_publication_validation e @shutdown_agent está definida como 1, o agente de distribuição é desligado após a conclusão da validação. Sim
22815 Alerta de detecção de conflito ponto a ponto O Agente de Distribuição detectou um conflito ao tentar aplicar uma alteração a um nó ponto a ponto. Sim

Além desses alertas, o Replication Monitor fornece um conjunto de avisos e alertas relacionado ao status e ao desempenho. Para obter mais informações, consulte Set Thresholds and Warnings in Replication Monitor. Também é possível definir alertas para outros eventos de replicação por meio da infraestrutura de alerta do SQL Server. Para obter mais informações, consulte Criar um evento definido pelo usuário.

Para configurar os alertas de replicação predefinidos

Exibir o log do aplicativo diretamente

Para visualizar o log de aplicativos do Windows, use o Visualizador de Eventos do Microsoft Windows. 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 log de aplicativo não é criado sempre que o SQL Server é iniciado (cada sessão do SQL Server grava novos eventos em um log de aplicativos existente); no entanto, é possível especificar por quanto tempo os eventos registrados serão mantidos. Ao exibir o log do aplicativo do Windows, é possível filtrar o log para eventos específicos. Para obter mais informações, consulte a documentação do Windows.

Automatizar uma resposta a 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 caso de falha na validação de dados e está armazenado na pasta SQL Server Agent Trabalhos do SQL Server Agent no SQL Server Management Studio. Para obter informações sobre como habilitar esse trabalho de resposta, consulte configurar alertas predefinidos de replicação (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, como o Agente de Distribuição e o Agente de Mesclagem 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 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