Настройка 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»:
В появившемся мастере нажимаем Далее (Next). Теперь мы можем: настроить Database Mail, изменить профили и аккаунты Database Mail, изменить безопасность профилей и, наконец, изменить конфигурацию системы. Поскольку Database Mail мы ранее не использовали — изменять нам пока нечего, выбираем первый пункт «Set up Database Mail» и нажимаем «Next». Если ранее Database Mail не был настроен, то появиться сообщение о необходимости включить данную функцию – соглашаемся.
Создадим новый профиль, например с именем “Алярмер” — именно он будет использоваться для отправки почты о невыполненных заданиях (job’ах) и добавим в него одну учетную запись (Account) — для чего нажмем кнопку «Add»:
Поля в окне мастера Database Mail Configuration Wizard необходимо настроить под свои параметры и нажать несколько раз Next:
На данном этапе можно добавить дополнительные учетные записи на тот случай, если одна из записей “откажет”. После нажатия Next мы попадаем в следующее окно:
В данном окне мастера на вкладке Private Profiles мы можем создать несколько профилей, то есть каждому пользователю msdb, включенному в роль DatabaseMailUserRole, можно назначить свой почтовый профиль. Или даже несколько почтовых профилей. Для этого необходимо установить галку «Access». Default Profile — если стоит «Yes», при использовании хранимой процедуры sp_send_dbmail, имя профиля по-умолчанию можно не указывать, туда будет подставлено имя профиля, отмеченного Default для этого пользователя. На закладке Public Profiles можно установить для свежесозданного профиля признаки Default = «Yes» и Public = «Yes». Теперь этот профиль смогут использовать все пользователи msdb включенные в роль DatabaseMailUserRole (и пользователи серверной роли sysadmin). После нажатия «Next» мы попадаем на предпоследний экран мастера настройки.
- 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. Отправка тестового письма
Для проверки корректности настроек можно отправить тестовое письмо. Для этого:
После ввода адреса получаетля и нажатия «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. Создание оператора (получателя писем)
Для создания учетной записи лица, которое будет получать письма, необходимо:
Заполнить указанные поля. Задать произвольное имя, поставить чекбокс “Enable” и задать адрес получателя. Нажать ОК.
Шаг 4. Настройка агента (SQL Server Agent)
Для настройки Ms SQL Server Agent необходимо:
Как видно, необходимо задать систему, используемую для отправки сообщений и созданный нами профиль. Далее нажать ОК и перезапустить SQL Server Agent.
Шаг 5. Настройка Maintenance Plan и Jobs
Для всех заданий, по которым необходимо уведомление, необходимо:
Зайти в свойства задания на вкладку 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 (название_невыполненной_задачи).
В этом сообщении можно разобрать следующее:
- Когда и какое задание выполнялось (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 (название_невыполненной_задачи)), включающее в себя краткое описание ошибки
Резюме
Большая часть материала была скопирована со статьи (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!
Другие материалы в категории HOWTO
- HOWTO SAMBA на 2 интерфейса и 2 сети с разными smb.conf
- HOWTO использование backports в Debian
- SQUID аутентификация (Kerberos и LDAP) на основе доменных групп Active Directory
- Конспект установки Debian на сервер
- SSH сервер на Debian
- Настройка Database Mail в MS SQL 2005 для уведомления об ошибках
- Настройка Microsoft SQL Server для 1С Предприятие (Maintenance Plans)
- Перенос DrWeb ES 6.0 с Windows на Debian со сменой типа БД
- HOWTO Active Directory 2008 R2 как Kerberos KDC для NFSv4
- Watermark (водяные знаки) на изображении в WordPress
Отлично все разжевано. Спасибо.
Пока копался с оповещением по email нашел для себя очень интересную вещь в sql agent, можно создавать задания для архивации и перемещения резервных копий, конкретно можно прямо там писать cmd скрипты затем выстраивать их в шаги(steps) или подключать в Maintenance Plan эти задания. Крайне полезная фишка для меня.
Кстати Mc.Sim если есть желание и время можно было бы написать две статьи по подъему icsci target на linux/win32 и использованию этих дисков для резервного копирования образов vhd для систем win7/2008srv и не только. Вообще тема iscsi интересна для резервного копирования.
Желание есть, возможности нет нет под рукой оборудования iscsi
Дык там оборудования особо и не надо: свободный винт, сервак со свободным портом sata/sas/scsi/ide, ОС по желанию Linux/Win32-64, сетевухи и концентратор/коммутатор желательно с поддержкой jumboframe что-бы была скорость равная (примерно) записи на локальный диск но в целом можно обойтись без них однако смысл теряется.
Хотя все то-же самое можно делать и по протоколу smb, если опять же сеть поддерживает jumboframe то скорости будут что надо.
Ну в целом, бэкап я аналогично реализую через NFS+Kerberos и 2хGigabit Ethernet, объединённых в bond.
По поводу статьи – я только за, но приоритет у меня сейчас другой – почтовый сервер и прокси-сервер.
Спасибо за статью, все очень подробно и понятно.
Я все настроил, спасибо автору, ну тут такой вопрос, как реализовать отправку писем не на один адрес а скажем на два, чтоб шло дублирование?
думаю, что достаточно указать адреса получателей через запятую.
Несколько адресов можно указать через точку-запятую
Fakir, спасибо за дополнение.
Добрый!
Подскажите. как убрать 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''
Заранее спасибо!
Видимо, у вас на шаге Back Up Database в плане Backup_Seminar1 стоит отправлять почту не во время ошибки, а при удачном выполнении.
Поскольку на текущий момент smtp серверов на 25 порту практически не осталось, то почтовая служба перестала отправлять уведомления. При попытке отправить уведомления с использованием SSL и 465 порта сыпятся сообщения об отключении от сервиса по тайм ауту. Решение не просто простое, а очень простое
ВМЕСТО 465 порта необходимо писать 587
проверено на mail.ru и на yandex.ru
Автор внеси это в FAQ