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

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

Теги

 

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