Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα σφάλμα στο Error Log του SQL Server

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα σφάλμα στο Error Log του SQL Server
Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα σφάλμα στο Error Log του SQL Server

Σε ένα instance του SQL Server ότι πιθανά προβλήματα προκύψουν καταγράφονται σε ένα μέρος που ονομάζεται Error Log. Θα μας ήτανε όμως πολύ χρήσιμο αν ότι σημαντικό σφάλμα εμφανίζοτανε στο Error Log, ο SQL Server να μας το προωθούσε αυτόματα σε κάποιο email. Στο άρθρο θα δούμε αναλυτικά πως γίνεται αυτό είτε με γραφικό περιβάλλον είτε με T-SQL.

Τα βήματα

Για αρχή θα πρέπει να έχουμε ενεργοποιήσει το Database Mail στον SQL Server. Το πως γίνεται αυτό το έχουμε δει σε αυτό το άρθρο.

Δημιουργία του Operator

Αφού βεβειωθούμε ότι λειτουργεί το Database Mail θα πρέπει να φτιάξουμε τον Operator. O Operator είναι το ψευδώνυμο του email που θα είναι παραλήπτης.

Για την δημιουργία του με SQL Server Management Studio επιλέγουμε:

Δεξί κλικ στον SQL Server Agent, New, Operator…

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα σφάλμα στο Error Log του SQL Server
01

Έπειτα του δίνουμε στο Name ένα ψευδώνυμο και στο E-mail name ορίζουμε το mail που θα είναι παραλήπτης:

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα σφάλμα στο Error Log του SQL Server
02

Αντί για γραφικό περιβάλλον μπορούμε να κάνουμε χρήση T-SQL και να τον δημιουργήσουμε με τον παρακάτω κώδικα:

sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
sp_configure 'Database Mail XPs', 1;  
GO  
RECONFIGURE  
GO
USE [msdb]
GO

EXEC msdb.dbo.sp_add_operator @name=N'sqlserver_alerting', 
		@enabled=1, 
		@weekday_pager_start_time=80000, 
		@weekday_pager_end_time=180000, 
		@saturday_pager_start_time=90000, 
		@saturday_pager_end_time=180000, 
		@sunday_pager_start_time=80000, 
		@sunday_pager_end_time=180000, 
		@pager_days=0, 
		@email_address=N'dataplatform.gr@gmail.com', 
		@category_name=N'[Uncategorized]'
GO

Δημιουργία Alert

Στο επόμενο βήμα θα δημιουργήσουμε ένα ένα τα Alerts για το κάθε σφάλμα. Tα σφάλματα χωρίζονται σε κατηγορίες Severities ανάλογα την σοβαρότητα τους. Εμείς θέλουμε να στέλνει όποιο ανήκει από Severity 17 και πάνω.

Οπότε πάμε πάλι στο SQL Server Management Studio και επιλέγουμε:

Δεξί κλικ στον SQL Server Agent, New, Alert…

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα σφάλμα στο Error Log του SQL Server
03

Στην καρτέλα General ορίζουμε ένα όνομα που παραπέμπει στο Severity που θέλουμε και επιλέγουμε στο drop box το αντίστοιχο Severity:

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα σφάλμα στο Error Log του SQL Server
04

Στην καρτέλα Response επιλέγουμε Notify operators και κλικ στο E-mail με τον Operator που δημιουργήσαμε στο πρώτο βήμα:

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα σφάλμα στο Error Log του SQL Server
05

Στην καρτέλα Options, επιλέγουμε το E-mail και ορίζουμε το Delay between responses στα 5 λεπτά ώστε να στέλνει με αυτή την περιοδικότητα:

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα σφάλμα στο Error Log του SQL Server
06

Επαναλαμβάνουμουμε την ίδια διαδικασία για το κάθε Severity από το 17 έως το 25.

Αφού τελειώσουμε με αυτά προσθέτουμε και τα Errors με κωδικό 823,824,825 που αν και σοβαρά (μας δείχνουν corruption σε δίσκο) δεν ανήκουν σε κάποιο Severity.

Επίσης αν κάνουμε χρήση Always On Availability Groups προσθέτουμε και τα Errors με κωδικό 1480, 35264, 35625 τα οποία θα μας ενημερώσουν αν γίνει κάποια αλλαγή μεταξύ Primary και Secondary, όπως επίσης αν σταματήσει η μεταφορά δεδομένων μεταξύ τους.

Οπότε κάνουμε την ίδια διαδικασία για το κάθε Error Number (823,824,825,1480,35264,35625):

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα σφάλμα στο Error Log του SQL Server
07

Αντί για γραφικό περιβάλλον μπορούμε να κάνουμε χρήση T-SQL και να τα δημιουργήσουμε με τον παρακάτω κώδικα:

USE [msdb]
GO
EXEC msdb.dbo.sp_add_alert @name=N'severity 17', 
		@message_id=0, 
		@severity=17, 
		@enabled=1, 
		@delay_between_responses=300, 
		@include_event_description_in=1, 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'severity 17', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'severity 18', 
		@message_id=0, 
		@severity=18, 
		@enabled=1, 
		@delay_between_responses=300, 
		@include_event_description_in=1, 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'severity 18', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'severity 19', 
		@message_id=0, 
		@severity=19, 
		@enabled=1, 
		@delay_between_responses=300, 
		@include_event_description_in=1, 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'severity 19', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'severity 20', 
		@message_id=0, 
		@severity=20, 
		@enabled=1, 
		@delay_between_responses=300, 
		@include_event_description_in=1, 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'severity 20', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'severity 21', 
		@message_id=0, 
		@severity=21, 
		@enabled=1, 
		@delay_between_responses=300, 
		@include_event_description_in=1, 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'severity 21', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'severity 22', 
		@message_id=0, 
		@severity=22, 
		@enabled=1, 
		@delay_between_responses=300, 
		@include_event_description_in=1, 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'severity 22', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'severity 23', 
		@message_id=0, 
		@severity=23, 
		@enabled=1, 
		@delay_between_responses=300, 
		@include_event_description_in=1, 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'severity 23', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'severity 24', 
		@message_id=0, 
		@severity=24, 
		@enabled=1, 
		@delay_between_responses=300, 
		@include_event_description_in=1, 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'severity 24', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'severity 25', 
		@message_id=0, 
		@severity=25, 
		@enabled=1, 
		@delay_between_responses=300, 
		@include_event_description_in=1, 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'severity 25', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'extra error 823', 
		@message_id=823, 
		@severity=0, 
		@enabled=1, 
		@delay_between_responses=300, 
		@include_event_description_in=1, 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'extra error 823', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'extra error 824', 
		@message_id=824, 
		@severity=0, 
		@enabled=1, 
		@delay_between_responses=300, 
		@include_event_description_in=1, 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'extra error 824', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'extra error 825', 
		@message_id=825, 
		@severity=0, 
		@enabled=1, 
		@delay_between_responses=300, 
		@include_event_description_in=1, 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'extra error 825', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'AlwaysOn Availability Group - Role Change', 
                                @message_id=1480, 
                                @severity=0, 
                                @enabled=1, 
                                @delay_between_responses=300, 
                                @include_event_description_in=1, 
                                @job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'AlwaysOn Availability Group - Role Change', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'AlwaysOn Availability Group - Data Movement Suspended', 
                                @message_id=35264, 
                                @severity=0, 
                                @enabled=1, 
                                @delay_between_responses=300, 
                                @include_event_description_in=1, 
                                @job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'AlwaysOn Availability Group - Data Movement Suspended', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO
EXEC msdb.dbo.sp_add_alert @name=N'AlwaysOn Availability Group - Data Movement Resumed', 
                                @message_id=35265, 
                                @severity=0, 
                                @enabled=1, 
                                @delay_between_responses=300, 
                                @include_event_description_in=1, 
                                @job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'AlwaysOn Availability Group - Data Movement Resumed', @operator_name=N'sqlserver_alerting', @notification_method = 1
GO

Σχεδόν έτοιμοι

Στο τέλος θα πρέπει μέσα από το SQL Server Management Studio να βλέπουμε κάτω από τα Alerts και Operators του SQL Server Agent κάτι παρόμοιο με την παρακάτω εικόνα:

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα σφάλμα στο Error Log του SQL Server
08

Πώς δοκιμάζουμε ότι λειτουργούν τα Alerts και θα μας έρθει E-mail

Με τον παρακάτω T-SQL κώδικα μπορούμε να δημιουργήσουμε ένα ψεύτικο Error για να δούμε ότι λειτουργεί:

Use [master]
GO

RAISERROR (N'An error occurred Severity 17: insufficient resources !', 17, 1)
WITH LOG
 
GO

Μετά από λίγο θα δούμε ότι θα μας έρθει mail που θα αναφέρει το σφάλμα όπως στην παρακάτω εικόνα:

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα σφάλμα στο Error Log του SQL Server
09

Bonus Script (Για εγκατάσταση του email alerting με ένα κλικ)

Με το παρακάτω sql script τροποποιώντας το Profile που είναι ο αποστολέας και τον Operator που είναι ο παραλύπτης των email με τα ανάλογα email, smtp server και credentials, μπορούμε να δημιουργήσουμε το email profile, email operator και όλα τα alerts με ένα κλικ:

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση