Partilhar via


Use Alertas para Eventos do Agente de Replicação

Aplica-se a:SQL Server

O SQL Server Management Studio e o Microsoft SQL Server Agent fornecem uma forma de monitorizar eventos, como eventos de agentes de replicação, usando alertas. O SQL Server Agent monitoriza o registo de aplicações do Windows para eventos associados a alertas. Se tal evento ocorrer, o SQL Server Agent responde automaticamente, executando uma tarefa que definiu e/ou enviando um e-mail ou uma mensagem de pager para um operador especificado. O SQL Server inclui um conjunto de alertas pré-definidos para agentes de replicação que pode configurar para executar uma tarefa e/ou notificar um operador. Para mais informações sobre como definir uma tarefa a executar, consulte Automatização de uma Resposta a um Alerta.

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

ID da mensagem Alerta pré-definido Condição que está a causar o acionamento do alerta Insere informações adicionais em msdb..sysreplicationalerts
14150 Replicação: sucesso do agente de replicação O agente desliga-se com sucesso. Yes
14151 Replicação: falha do agente O agente encerra com um erro. Yes
14152 Replicação: nova tentativa do agente O agente desliga-se após tentar sem sucesso uma operação novamente (o agente encontra um erro como servidor indisponível, bloqueio, falha de ligação ou falha de timeout). Yes
14157 Replicação: subscrição expirada cancelada A subscrição expirada foi cancelada. Não
20572 Replicação: Subscrição reiniciada após falha de validação O trabalho de resposta 'Reinicializar subscrições em caso de falha na validação de dados' reinicializa uma subscrição com sucesso. Não
20574 Replicação: O assinante falhou a validação dos dados O Agente de Distribuição ou Fusão falha na validação dos dados. Yes
20575 Replicação: O assinante passou a validação dos dados O Agente de Distribuição ou o Agente de Mesclagem passa na validação de dados. Yes
20578 Replicação: desligamento personalizado do agente Quando a validação de dados é invocada através de sp_publication_validation e @shutdown_agent está definida para 1, o agente de distribuição é desligado após a conclusão da validação. Yes
22815 Alerta de deteção de conflitos entre pares O Agente de Distribuição detetou um conflito quando tentou aplicar uma alteração num nó peer-to-peer. Yes

Para além destes alertas, o Replication Monitor fornece um conjunto de avisos e alertas relacionados com o estado e desempenho. Para mais informações, consulte Definir Limiares e Avisos no Monitor de Replicação. Também pode definir alertas para outros eventos de replicação usando a infraestrutura de alertas do SQL Server. Para mais informações, consulte Criar um Evento Definido pelo Usuário.

Para configurar alertas de replicação pré-definidos

Consulte o Registo de Candidaturas diretamente

Para visualizar o registo de aplicações do Windows, utilize o Visualizador de Eventos do Microsoft Windows. O registo da aplicação contém mensagens de erro do SQL Server, bem como mensagens para muitas outras atividades no computador. Ao contrário do registo de erros do SQL Server, um novo registo de aplicação não é criado cada vez que se inicia o SQL Server (cada sessão do SQL Server escreve novos eventos num registo de aplicação existente); No entanto, pode especificar durante quanto tempo os eventos registados serão mantidos. Quando visualiza o registo da aplicação Windows, pode filtrá-lo por eventos específicos. Para obter mais informações, consulte a documentação do Windows.

Automatizar uma resposta a um alerta

A replicação fornece uma tarefa de resposta para subscrições que falham na validação de dados, e também fornece uma estrutura para criar respostas automatizadas adicionais a alertas. O trabalho de resposta intitula-se Reinicializar subscrições em caso de falha na validação de dados e é armazenado na pasta SQL Server Agent Jobs no SQL Server Management Studio. Para informações sobre como ativar esta tarefa de resposta, consulte Configurar Alertas de Replicação Predefinidos (SQL Server Management Studio). Se os artigos numa publicação transacional falharem a validação, a tarefa de resposta reinicializa apenas os artigos que falharam. Se os artigos numa publicação de fusão falharem na validação, a tarefa de resposta reinicializa todos os artigos da publicação.

Estrutura para automatizar respostas

Normalmente, quando ocorre um alerta, a única informação que tem para o ajudar a compreender o que o causou e a ação apropriada a tomar está contida na própria mensagem do alerta. Analisar esta informação pode ser propenso a erros e demorado. A replicação facilita a automatização das respostas ao fornecer informação adicional sobre o alerta na sysreplicationalerts tabela do sistema; a informação fornecida já é analisada numa forma facilmente utilizada por programas personalizados.

Por exemplo, se os dados na Sales.SalesOrderHeader tabela no Assinante A falharem a validação, o SQL Server pode acionar a mensagem 20574, notificando-o dessa falha. A mensagem que recebe será: "Assinante 'A', subscrição do artigo 'SalesOrderHeader' na publicação 'MyPublication' falhou na validação dos dados."

Se criar uma resposta baseada na mensagem, deve analisar manualmente o nome do assinante, nome do artigo, nome da publicação e erro da mensagem. No entanto, porque o Agente de Distribuição e o Agente de Fusão escrevem essa mesma informação em sysreplicationalerts (juntamente com detalhes como o tipo de agente, hora do alerta, base de dados do publicador, base de dados do subscritor 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 a uma instância específica do alerta, a tabela tem uma status coluna, que pode ser usada para acompanhar as entradas servidas. As entradas nesta tabela são mantidas para o período de retenção histórica.

Por exemplo, se criasse uma tarefa de resposta em Transact-SQL que servisse a mensagem de alerta 20574, poderia usar a seguinte lógica:

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