Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

DATABASE_MAIL_ALERT_FAIL 1С:Предприятие и СУБД

Настройка оповещений Database Mail при ошибках бэкапов в MSSQL

Обновлено: 26.08.2026 · Официальная документация ↗
  • Задания резервного копирования падают, но дежурный администратор не получает уведомлений на почту.
  • Письма застревают со статусом 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;
💡 Практика специалистов: Не ограничивайтесь оповещением по email только при падении заданий. Обязательно настройте глобальный Alert на критические системные ошибки с Severity 19–25 и ошибки повреждения страниц (Error 823, 824, 825).

Частые вопросы (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;.

Полезные материалы
Рекомендуем