Перейти к основному содержанию

SQL Server Database Mirroring — уведомления на почту

Mail

Настраивал недавно зеркалирование баз данных на MSSQL и нашёл интересный скрипт, который умеет отправлять на почту уведомления, если что-то поломалось при зеркалировании. Я этот скрипт не буду использовать, поскольку встроил мониторинг в свой шаблон для заббикса, но кому-то может оказаться полезным, благо для работы скрипт использует встроенные инструменты MSSQL.

Представление sys.database_mirroring содержит по одной строке для каждой базы данных в экземпляре SQL Server, там хранится вся нужная информация о состоянии всех зеркальных баз данных. Скрипт ниже использует это представление для формирования оповещений по электронной почте для каждой зеркальной базы данных, которая будет в ненормальном состоянии. Здесь не используется сервер-свидетель, поэтому аварийное переключение производится вручную.

Сначала нужно настроить Database Mail.

Включаем Database Mail в Microsoft SQL Server 2014

Включаем Database Mail в Microsoft SQL Server 2019

Настроить профиль для отправки почты, в скрипте ниже он называется valid_mail_profile, у вас будет какое-то своё название. Профиль должен иметь права на отправку писем, т. е. он должен быть членом роли DatabaseMailUserRole в базе данных msdb.

И нужно иметь хотя бы пару баз в зеркале, иначе нет смысла скрипт использовать. В скрипте нужно указать нужный профиль и адрес получателя.

DECLARE @state VARCHAR(30) 
DECLARE @DbMirrored INT 
DECLARE @DbId INT 
DECLARE @String VARCHAR(100) 
DECLARE @databases TABLE (DBid INT, mirroring_state_desc VARCHAR(30)) 
 
-- get status for mirrored databases
-- получение статуса зеркальных баз данных
INSERT @databases 
SELECT database_id, mirroring_state_desc 
FROM sys.database_mirroring 
WHERE mirroring_role_desc IN ('PRINCIPAL', 'MIRROR') 
AND mirroring_state_desc NOT IN ('SYNCHRONIZED', 'SYNCHRONIZING') 
 
-- iterate through mirrored databases and send email alert
-- цикл по зеркальным базам и отправка уведомлений почтой
WHILE EXISTS (SELECT TOP 1 DBid FROM @databases WHERE mirroring_state_desc IS NOT NULL) 
BEGIN 
   SELECT TOP 1 @DbId = DBid, @State = mirroring_state_desc 
   FROM @databases 
   SET @string = 'Host: '+@@servername+'.'+CAST(DB_NAME(@DbId) AS VARCHAR)+ ' - DB Mirroring is '+@state +' - notify DBA' 
   EXEC msdb.dbo.sp_send_dbmail 'valid_mail_profile', 'DBA@example.com', @body = @string, @subject = @string 
   DELETE FROM @databases WHERE DBid = @DbId 
END 
 
--also alert if there is no mirroring just in case there should be mirroring :)
-- дополнительное уведомление если найдена незеркалируемая база
SELECT @DbMirrored = COUNT(*) 
FROM sys.database_mirroring 
WHERE mirroring_state IS NOT NULL 
IF @DbMirrored = 0 
BEGIN 
   SET @string = 'Host: '+@@servername+' - No databases are mirrored on this server - notify DBA' 
   EXEC msdb.dbo.sp_send_dbmail 'valid_mail_profile', 'DBA@example.com', @body = @string, @subject = @string 
END

Скрипт выводит в консоль сопроводительную информацию:

Mirroring Alert Message
-----------------------
Host: SERVERXXX.MirrorTest - DB Mirroring is Suspended - notify DBA
 
Mail queued.
 
 
Mirroring Alert Message
-----------------------
Host: SERVERXXX.sp_config_ssp2 - DB Mirroring is DISCONNECTED - notify DBA
 
Mail queued.

В электронном письме казаны имя хоста, имя базы данных и ненормальное состояние зеркала, чтобы группа администраторов баз данных могла получить точные данные о проблеме.

Далее можно запланировать запуск этого скрипта в качестве джоба с нужной вам периодичностью.

Ссылки

https://www.mssqltips.com/sqlservertip/1859/monitoring-sql-server-database-mirroring-with-email-alerts

Zabbix шаблон для мониторинга Microsoft SQL Server 2019

Теги

 

Похожие материалы

Включаем Database Mail в Microsoft SQL Server 2014

Для того чтобы MSSQL сервер мог слать уведомления на почту, необходимо настроить Database Mail фичу. Для чего нужны уведомления? Я, например, хочу получать письмо, когда заканчивается бэкап. Функционал этой фичи на самом деле гораздо богаче. При сноровке можно по почте слать SQL запросы и получать результаты. В моём случае это не требуется.

Теги