Настройка Database Mail в MS SQL 2005 для уведомления об ошибках

16 декабря, 2011 Рубрики: HOWTO, Microsoft SQL, Windows

настройка Database mail в MS SQL 2005Доброго времени, читатели блога Любителя экспериментов! В продолжении статьи о Maintenance Plans для MS SQL 2005 дополняю статьей о том, как настроить уведомление об ошибках Maintenance Plan MS SQL 2005 по электронной почте. Это позволит сэкономить время и силы ) на ежедневный ручной контроль выполнения регламентных заданий.

Введение в Database Mail в MS SQL Server 2005

Database Mail появился в SQL Server 2005, заменив собой компонент SQLMail. Данный компонент используется для отправки сообщений электронной почты компонентом сервера  – Database Engine. Database Mail не требует установленного почтового клиента и сам общается с почтовым сервером по протоколу SMTP. Для того, чтобы все корректно заработало, необходимо несколько вещей: 1. Собственно, сам Microsoft SQL Server;  2. почтовый сервер, доступный с машины с SQL Server’ом; 3. членство в роли sysadmin у вашей учетной записи в SQL Server, поскольку настройку могут производить только члены этой роли.

Настройка Database Mail в MS SQL Server 2005

Шаг 1. Настройка Database Mail


В первую очередь, подключимся к нашему SQL Server’у с помощью SQL Server Management Studio. Раскрываем ветку Management, выбираем пункт Database Mail, жмахаем по нему правой кнопкой мыши и выбираем «Configure Database Mail»:

включение Database Mail

В появившемся мастере нажимаем Далее (Next). Теперь мы можем: настроить Database Mail, изменить профили и аккаунты Database Mail, изменить безопасность профилей и, наконец, изменить конфигурацию системы. Поскольку Database Mail мы ранее не использовали — изменять нам пока нечего, выбираем первый пункт «Set up Database Mail» и нажимаем «Next». Если ранее Database Mail не был настроен, то появиться сообщение о необходимости включить данную функцию – соглашаемся.

активация функции Database Mail Создадим новый профиль, например с именем “Алярмер” — именно он будет использоваться для отправки почты о невыполненных заданиях (job’ах) и добавим в него одну учетную запись (Account) — для чего нажмем кнопку «Add»:

добавление учетной записи SMTP
Поля в окне мастера Database Mail Configuration Wizard необходимо настроить под свои параметры и нажать несколько раз Next:

следующий шаг Database Mail Wizard

На данном этапе можно добавить дополнительные учетные записи на тот случай, если одна из записей “откажет”. После нажатия Next мы попадаем в следующее окно:

настройка публичных и приватных профилей SQL

В данном окне мастера на вкладке Private Profiles мы можем создать несколько профилей, то есть каждому пользователю msdb, включенному в роль DatabaseMailUserRole, можно назначить свой почтовый профиль. Или даже несколько почтовых профилей. Для этого необходимо установить галку «Access». Default Profile — если стоит «Yes», при использовании хранимой процедуры sp_send_dbmail, имя профиля по-умолчанию можно не указывать, туда будет подставлено имя профиля, отмеченного Default для этого пользователя. На закладке Public Profiles можно установить для свежесозданного профиля признаки Default = «Yes» и Public = «Yes». Теперь этот профиль смогут использовать все пользователи msdb включенные в роль DatabaseMailUserRole (и пользователи серверной роли sysadmin). После нажатия «Next» мы попадаем на предпоследний экран мастера настройки.

Последняя настройка учетной записи Database Mile Здесь мы можем настроить:

  • Account Retry Attempts — количество попыток отправки письма с использованием конкретной учетной записи (помните, что мы можем добавить в профиль несколько учетных записей? Вот, сначала SQL Server попробует отправить письмо от имени учетной записи с приоритетом 1 столько раз, сколько мы укажем, а потом, если письмо так и не уйдет — будет перебирать менее приоритетные учетные записи)
  • Account Retry Delay (seconds) — именно столько секунд SQL Server будет ждать прежде чем повторить попытку отправить письмо
  • Maximum File Size (Bytes) — SQL Server может добавлять файлы-вложения в письмо. Этим параметром можно ограничить размер такого вложения
  • Prohibited Attachment File Extensions — запрещенные разрешения для вложений, чтобы пользователь не мог сгененерировать и отправить файл .vbs, например
  • Database Mail Executable Minimum Lifetime (seconds) — Database Mail представляет из себя отдельный файл DatabaseMail(90-110).exe — этот параметр определяет через какой промежуток времени SQL Server «прибьет» запущенный процесс при отсутствии активности
  • Logging Level — этот параметр определяет как много информации будет писаться в лог, при работе Database Mail.

На последнем экране мы увидим какие учетные записи и профили будут созданы, а так же каким пользователям будет добавлена возможность использовать созданный профиль. Жмахаем «Finish». Настройку профиля и учетной записи почты можно считать завершенной.

Шаг 2. Отправка тестового письма

Для проверки корректности настроек можно отправить тестовое письмо. Для этого:

Отправка тестового письма через Database Mail

После ввода адреса получаетля и нажатия «Send Test E-Mail» – тестовое сообщение будет отправлено и при удачном стечении обстоятельств – будет получено получателем. Если сообщение до получателя не дошло, то бегом смотреть логи и искать ошибки. Во-первых, посмотрите журнал Database Mail. В SSMS зайдите в Management, ткните в Database Mail правой кнопкой мыши и выберите там Database Mail Log. Возможно вы просто неправильно указали параметры подключения к серверу — это, как ни странно, довольно-таки распространенная ошибка. Второе, что нужно проверить — это то, что в базе данных msdb включен Service Broker. Именно он используется для отправки сообщений. Для проверки, создайте новый запрос и выполните там:

SELECT is_broker_enabled
FROM sys.databases
WHERE name = 'msdb'

Если возвращаемое значение отличается от единицы, Service Broker выключен. Вы можете включить его так:

ALTER DATABASE msdb SET ENABLE_BROKER

Будем считать, что теперь Database Mail у нас настроена и тестовое письмо пришло.

Шаг 3. Создание оператора (получателя писем)

Для создания учетной записи лица, которое будет получать письма, необходимо:

Созадние оператора Database Mail

Заполнить указанные поля. Задать произвольное имя, поставить чекбокс “Enable” и задать адрес получателя. Нажать ОК.

Шаг 4. Настройка агента (SQL Server Agent)

Для настройки Ms SQL Server Agent необходимо:

настройка MS SQL Server Agent

Как видно, необходимо задать систему, используемую для отправки сообщений и созданный нами профиль. Далее нажать ОК и перезапустить SQL Server Agent.

Шаг 5. Настройка Maintenance Plan и Jobs

Для всех заданий, по которым необходимо уведомление, необходимо:

включение уведомления для Job

Зайти в свойства задания на вкладку Notifications и поставить чекбокс E-mail. Выбрать недавносозданного оператора и при каком условии посылать уведомление. “When the job fails“, т.е. уведомления посылать только если задание завершится с ошибкой,  “When the job succeeds” — когда задание завершится успешно, “When the job completes” – когда задание завершится вообще хоть как-то — с ошибкой, либо без ошибок.

В случае ошибок выполнения заданий будет послано сообщение, примерно следующего содержания:

From: [email protected]
Sent: Friday, December 16, 2011 9:30 PM
To: [email protected]
Subject: SQL Server Job System: 'название_невыполненной_задачи' completed on \\SQL
JOB RUN:    'название_невыполненной_задачи' was run on 16.12.2011 at 21:30:00
DURATION:   0 hours, 0 minutes, 1 seconds
STATUS:     Failed
MESSAGES:   The job failed.  The Job was invoked by Schedule 17 (название_невыполненной_задачи).  The last step to run was step 1 (название_невыполненной_задачи).

В этом сообщении можно разобрать следующее:

  1. Когда и какое задание выполнялось (JOB RUN: ‘название_невыполненной_задачи’was run on 16.12.2011 at 21:30:00)
  2. Сколько времени выполнялось задание до того как обнаружилась ошибка (DURATION: 0 hours, 0 minutes, 1 seconds)
  3. Итог выполнения (STATUS: Failed)
  4. Сообщение из журнала событий этого задания (MESSAGES:   The job failed.  The Job was invoked by Schedule 17 (название_невыполненной_задачи).  The last step to run was step 1 (название_невыполненной_задачи)), включающее в себя краткое описание ошибки

Резюме

Большая часть материала была скопирована со статьи (http://habrahabr.ru/blogs/mssql/132902/), за что автору спасибо. Хотя планировал все сделать сам :) Более подробную информацию можно получить в документации по Database Mail от разработчиков в ссылках ниже. Данная функция очень помогает в своевременном разрешении проблем с обслуживанием, НО не избавляет от необходимости периодически читать логи сервера! Удачных вам бэкапов!

Что еще почитать

Включение Database Mail в MS SQL Express – http://weblogs.sqlteam.com/mladenp/archive/2007/07/01/60245.aspx
Документация по Database Mail от разработчика – http://msdn.microsoft.com/ru-ru/library/ms175887.aspx

С Уважением, Mc.Sim!




Теги: , ,

11 комментариев к “Настройка Database Mail в MS SQL 2005 для уведомления об ошибках”

  1. Sergio
    3 февраля, 2012 at 16:37
    1

    Отлично все разжевано. Спасибо.
    Пока копался с оповещением по email нашел для себя очень интересную вещь в sql agent, можно создавать задания для архивации и перемещения резервных копий, конкретно можно прямо там писать cmd скрипты затем выстраивать их в шаги(steps) или подключать в Maintenance Plan эти задания. Крайне полезная фишка для меня.
    Кстати Mc.Sim если есть желание и время можно было бы написать две статьи по подъему icsci target на linux/win32 и использованию этих дисков для резервного копирования образов vhd для систем win7/2008srv и не только. Вообще тема iscsi интересна для резервного копирования.

    • 3 февраля, 2012 at 17:28
      2

      Желание есть, возможности нет :) нет под рукой оборудования iscsi :(

      • Sergio
        6 февраля, 2012 at 15:27
        3

        Дык там оборудования особо и не надо: свободный винт, сервак со свободным портом sata/sas/scsi/ide, ОС по желанию Linux/Win32-64, сетевухи и концентратор/коммутатор желательно с поддержкой jumboframe что-бы была скорость равная (примерно) записи на локальный диск но в целом можно обойтись без них однако смысл теряется.
        Хотя все то-же самое можно делать и по протоколу smb, если опять же сеть поддерживает jumboframe то скорости будут что надо.

        • 6 февраля, 2012 at 16:00
          4

          Ну в целом, бэкап я аналогично реализую через NFS+Kerberos и 2хGigabit Ethernet, объединённых в bond.
          По поводу статьи – я только за, но приоритет у меня сейчас другой – почтовый сервер и прокси-сервер.

  2. 17 декабря, 2012 at 15:18
    5

    Спасибо за статью, все очень подробно и понятно.
    Я все настроил, спасибо автору, ну тут такой вопрос, как реализовать отправку писем не на один адрес а скажем на два, чтоб шло дублирование?

    • 19 декабря, 2012 at 15:24
      6

      думаю, что достаточно указать адреса получателей через запятую.

      • Fakir
        3 февраля, 2014 at 13:15
        7

        Несколько адресов можно указать через точку-запятую

        • 12 февраля, 2014 at 15:53
          8

          Fakir, спасибо за дополнение.

  3. VPS
    21 июля, 2016 at 01:22
    9

    Добрый!
    Подскажите. как убрать email-сообщение
    SQL Server Message
    Microsoft(R) Server Maintenance Utility (Unicode) Version 12.0.2269
    Report was generated on "V8".
    Maintenance Plan: Backup_Seminar1
    Duration: 00:00:07
    Status: Succeeded.
    Details:
    Back Up Database (Differential) (V8)
    Backup Database on Local server connection
    Databases: Seminar1
    Type: Differential
    Append existing
    Task start: 2016-07-21T01:13:20.
    Task end: 2016-07-21T01:13:27.
    Success
    Command:EXECUTE master.dbo.xp_create_subdir N''B:\test\Seminar1''

    Заранее спасибо!

    • 4 августа, 2016 at 21:54
      10

      Видимо, у вас на шаге Back Up Database в плане Backup_Seminar1 стоит отправлять почту не во время ошибки, а при удачном выполнении.

  4. Михаил
    11 октября, 2016 at 22:25
    11

    Поскольку на текущий момент smtp серверов на 25 порту практически не осталось, то почтовая служба перестала отправлять уведомления. При попытке отправить уведомления с использованием SSL и 465 порта сыпятся сообщения об отключении от сервиса по тайм ауту. Решение не просто простое, а очень простое
    ВМЕСТО 465 порта необходимо писать 587
    проверено на mail.ru и на yandex.ru

    Автор внеси это в FAQ

Написать комментарий