Como pode SQL Server enviar e-mail uma mensagem de erro quando a replicação publisher não consegue se conectar a um sistema de assinante

StackOverflow https://stackoverflow.com/questions/1824939

Pergunta

Temos vários locais remotos, onde temos um conjunto de replicação do SQL Server 2005. Às vezes, o publisher não consegue replicar devido a várias razões, como

1) problemas de rede,

2) desligamentos impróprios de assinante,

3) mudança na senhas de domínio,

4) mudança na senhas SQL,

5) incapacidade de ligar o sistema de assinante.

Existe alguma maneira nós podemos fazer servidor SQL enviar o administrador um e-mail quando isso acontece para que ele possa verificar?

Obrigado, Chak.

Foi útil?

Solução

A maneira que eu normalmente lidar com isso é através da modificação do trabalho do SQL Agent (s) que são responsáveis ??por iniciar / executar os agentes de replicação (dependendo da sua topologia de replicação, você terá uma variedade de-los em lugares potencialmente diferentes). Basta adicionar uma etapa de trabalho para o trabalho agente apropriado (s) (ie agente leitor de log, agente de distribuição, agente de mesclagem, agente fila, etc.) após a etapa de "agente run" que é executado se / quando que completa STEP / não ( dependendo se você está ou não usando uma programação contínua).

Por exemplo, se eu tiver uma instalação transacional publicação impulso uni-direcional, o agente de distribuição será executado no distribuidor. Se eu ligar para o distribuidor e encontrar o trabalho do SQL Agent responsável por executar o agente de distribuição para esta publicação, eu posso modificar o trabalho e adicionar um passo para enviar um e-mail para um grupo particular se a etapa "agente run" falha / concluída. Se eu estou usando uma programação de replicação contínua, vou simplesmente adicionar o passo para e-mail se o "agente executar" passo acabamentos (como eu quiser ser notificado se o agente parar por qualquer motivo). Se eu estou usando uma programação não-contínua, posso sim ter o passo e-mail executado somente em caso de falha da etapa "agente run". Você pode até mesmo configurar este passo "e-mail" para enviar um e-mail, fazer uma pausa para um pouco, em seguida, tente reiniciar o agente automaticamente (por simplesmente configurar o passo para "ir para a etapa 1" em caso de sucesso ").

Aqui está uma captura de tela que retrata o que as etapas de trabalho parecem com um agente de distribuição configurado como esquema I acima:

agente de distribuição configurado com notificar, pausar, reiniciar passo

Você vai notar na foto acima que eu adicionei um passo chamado "Notificar, pausa, repetição", que será executado a qualquer hora as paradas agente (sucesso ou falha - isso é intencional como eu estou usando uma programação de replicação contínua e simplesmente quer saber sempre que o agente de distribuição não está em execução por qualquer motivo). Este passo envia basicamente um e-mail a um grupo específico, espera por um minuto ou dois, em seguida, começa o agente novamente. Você pode adicionar código para fazer o que quiser, incluindo o registo, reiniciar apenas um determinado número de vezes em um determinado intervalo de tempo, etc. É facilmente roteirizado e repetível para qualquer número de agentes, publicações, etc. (eu tenho scripts para garantir qualquer novo agente de replicação em qualquer tipo de topologia inclui este tipo de configuração -. então é simplesmente uma questão de adicioná-los a uma ferramenta de liberação ou agendar a execução de, dependendo de como você implantar em seu ambiente)

Outras dicas

Quanto a detecção de problemas agente, você quer saber quando o logreader e distribuidor estão parados. Mina também é replicação contínua como chadhoc, mas acho que é mais fácil de usar um alerta para me dizer se os agentes estão parados.

USE [msdb] 
GO 
EXEC msdb.dbo.sp_add_alert  
    @name=N'Distribution agent stopped',   
    @message_id=0,  
    @severity=0,  
    @enabled=1,   
    @delay_between_responses=2160, 
    @include_event_description_in=1,   
    @category_name=N'[Uncategorized]',  
    @performance_condition=N'MSSQL$MYDATABASE:Replication Agents|Running|Distribution|=|0', 
    @job_id=N'00000000-0000-0000-0000-000000000000' 
GO 
EXEC msdb.dbo.sp_update_notification 
    @alert_name=N'Distribution agent stopped',   
    @operator_name=N'Amit',  
    @notification_method = 1 

Validação / erros de sincronização não são tão simples de detectar. Você pode configurar um trabalho noturno para executar sp_publication_validation e configurar outro alerta sobre "Validação falhou".

Eu não sei muito sobre a replicação especificamente, mas sp_readerrorlog é muito procedimento armazenado útil que lhe permite acessar os logs de DB de dentro da instância do banco de dados. Se necessário, pode permitir-lhe responder de forma mais adequada com base nas mensagens de erro específicas, em vez de apenas ramos SUCESSO / FALHA de um trabalho de agente. Pode, claro, enviar um e-mail diretamente de um proc armazenados também, personalizar os destinatários com base em quem pode melhor responder ao erro (ou a hora do dia - dia / coordenadores do turno da noite, por exemplo).

Além disso talvez fosse mais apropriado para enviar um e-mail se o trabalho for bem-sucedido, em vez de falhar, considerando suas falhas potenciais incluem disconnectivity rede? Você pode querer configurar uma regra de câmbio em seu fim de monitorar essa caixa de entrada e disparar uma notificação de erro para o administrador se ele não receber uma mensagem de sucesso esperado .... seres humanos são muito bons em filtragem de estímulo constante ea falta de uma mensagem de sucesso poderia ser facilmente perdida. Troca por outro lado é sempre (geralmente) vigilante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top