Настройка оповещений Database Mail при ошибках бэкапов в MSSQL
- Задания резервного копирования падают, но дежурный администратор не получает уведомлений на почту.
- Письма застревают со статусом
unsentилиfailedв представленииsysmail_allitems. - В логах Database Mail регистрируется ошибка
The mail could not be sent to the recipients because of the mail server failure (SMTP timeout).
1. Настройка профиля и учетной записи Database Mail
-- 1. Включение компонента Database Mail в sp_configure
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'Database Mail XPs', 1; RECONFIGURE;
-- 2. Создание учетной записи SMTP
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = 'SMTP_Alerts',
@email_address = 'sql-alerts@itstm.ru',
@display_name = 'MSSQL Production Alert',
@mailserver_name = 'smtp.itstm.ru',
@port = 587,
@enable_ssl = 1,
@username = 'sql-alerts@itstm.ru',
@password = 'SecretEmailPass123!';
-- 3. Создание публичного профиля
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = 'DefaultAlertProfile',
@description = 'Profile for SQL Agent notifications';
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'DefaultAlertProfile',
@account_name = 'SMTP_Alerts',
@sequence_number = 1;
EXECUTE msdb.dbo.sysmail_principalprofile_sp
@profile_name = 'DefaultAlertProfile',
@principal_name = 'public',
@is_default = 1;2. Создание оператора и включение уведомлений в SQL Server Agent
-- Создание оператора DBA
EXEC msdb.dbo.sp_add_operator
@name = N'DBA_Team',
@enabled = 1,
@email_address = N'dba-alerts@itstm.ru';
-- Привязка отправки почты к падению конкретного задания бэкапа
EXEC msdb.dbo.sp_update_job
@job_name = N'DatabaseBackup - FULL',
@notify_level_email = 2, -- 2 = On Failure, 1 = On Success, 3 = Always
@notify_email_operator_name = N'DBA_Team';3. Диагностика очереди и поиск ошибок Database Mail
-- Просмотр застрявших или сбойных писем
SELECT item_id, send_request_date, recipients, subject, send_status
FROM msdb.dbo.sysmail_allitems
WHERE send_status IN ('failed', 'unsent');
-- Чтение журнала ошибок почтового клиента
SELECT log_id, event_type, log_date, description
FROM msdb.dbo.sysmail_event_log
ORDER BY log_id DESC; Частые вопросы (FAQ)
Почему письма не отправляются, хотя тест в мастере Database Mail проходит успешно?
Необходимо включить интеграцию в свойствах самого SQL Server Agent: Свойства агента -> Alert System -> поставить галочку 'Enable mail profile' и выбрать настроенный профиль Database Mail.
Что делать, если очередь Service Broker в msdb заблокирована?
Database Mail использует Service Broker. Убедитесь, что брокер активен в msdb: SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb'. Если он выключен, выполните ALTER DATABASE msdb SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE.
Как отправить тестовое email-сообщение через T-SQL?
Выполните: EXEC msdb.dbo.sp_send_dbmail @profile_name = 'DefaultAlertProfile', @recipients = 'admin@itstm.ru', @subject = 'Test Subject', @body = 'Test Body';
Как перезапустить процесс DatabaseMail.exe в случае зависания?
Выполните команды: EXEC msdb.dbo.sysmail_stop_sp; затем EXEC msdb.dbo.sysmail_start_sp;.