29/05/2015

Invio notifiche email su MS SQL

Spesso si sente ripetere in modo un po’ banale che la condizione necessaria per un backup consistente è il test di restore, io di solito considero necessarie queste condizioni:

  • il backup deve essere fatto (…)
  • va effettuato un test di restore periodico
  • il backup deve essere schdulato e automatico (non deve dipendere da azioni manuali)
  • il backup deve inviare notifiche su eventuali anomalie occorse durante la schedulazione

Quest’ultimo aspetto ahimè è spesso ignorato, oppure ci si affida a notifiche inviate a prescindere senza distinguere l’effettivo esito del processo (troppe informazioni che inevitabilmente comportano la mancata rilevazione di un problema).

Questa la premessa, come ho già avuto modo di dire mi capita spesso di sguazzare tra vecchi ruderi informatici sparsi per i datacenter più insospettabili, di recente mi è capitato di mettere le mani su un server MS SQL (brrr…) 2000 (brrr²….) con piani di manutenzione disastrati e backup in uno stato di completo abbandono.
Come solo i vecchi sistemisti ricorderanno MS SQL 2000 richiede ufficialmente l’utilizzo di Exchange (brrrr³…) per inviare notifiche email sull’esito dei maintenance plan, un autentico furto a mano armata…

Come alternativa propongo questa semplice soluzione che non comporta alcuno stravolgimento architetturale ed è applicabile anche a versioni più recenti del database MS (che per fortuna hanno colmato questa lacuna con apposite procedure).

Connettetevi all’istanza mediante Enterprise Manager, aprite il database master e create una nuova stored procedure.

msssqlemail01

 

Incollate quanto trovate nel file che trovate in coda al post (sp_SQLNotify.sql) avendo cura di modificare la linea 36 inserendo l’indirizzo ip del server SMTP che utilizzerete per inviare le email (nell’esempio 10.0.0.1).

sp_SQLNotify

Salvate la stored procedure e spostatevi tra i processi dell’Agent MS SQL, dove troverete i vari job che compongono i vostri maintenance plan.
Aprite la finestra delle proprietà del job su cui volete configurare le notifiche a aggiungere un nuovo step

msssqlemail03

Chiamate lo step “Backup completato” e inserite come comando la seguente sintassi, avendo cura di personalizzare i campi con il vostro sender, destinatario, subject e body della mail:

exec master.dbo.sp_SQLNotify '[SENDER]','[DESTINATARIO]','[SUBJECT]','[BODY]'

es:

exec master.dbo.sp_SQLNotify '[email protected]','[email protected]','Backup job eseguito con successo','Il job di backup è stato completato con successo'

msssqlemail04

Una volta completato create un nuovo step, questa volta con i dati della mail da inviare in caso di fallimento del job.

es:

exec master.dbo.sp_SQLNotify '[email protected]','[email protected]','Backup job fallito','Il job di backup è fallito'

msssqlemail05

Ora che abbiamo creato gli step di spedizione occorre istruire lo step di backup affinchè li utilizzi, aprite le proprietà e selezionate il job di spedizione di email per i due esiti (positivo e negativo) del job di backup.

msssqlemail06

msssqlemail07

Non abbiamo terminato, occorre stabilire delle condizioni di uscita per ciascuno degli step di invio email, in caso contrario verrebbero spedite entrambi le mail ad ogni esecuzione del job.
Stabiliamo quindi un semplice flusso:

  • Backup OK –> invio email  OK –> chiusura senza errore
  • Backup OK –> errore invio email –> chiusura con errore
  • Errore backup –> invio email OK –> chiusura con errore
  • Errore backup –> errore invio email –> chiusura con errore

Riapriamo quindi lo step 2 di invio email per l’esito positivo del backup, spostiamoci nelle proprietà avanzate e selezioniamo dalle drop down le opzioni corrette.

msssqlemail08

Passiamo poi allo step 3 di invio email per esito negativo e selezioniamo le opzioni corrette.

msssqlemail09

Chiudete tutto e lanciate manualmente un backup per testare il corretto funzionamento del flusso.

Come dicevo all’inzio del post spesso è controproducente ricevere le notifiche per l’esito positivo del backup, in quanto generano un eccesso di informazioni che può rendere poco visibile le (si spera) poche notifiche di fallimento.
Nel caso vogliate ricevere solo quest’utime non vi resta che creare solo lo step di invio email in caso di errore.

Lunga vita e backup consistenti!

 

I commenti sono bloccati.