|
|
|||||||||||||||||||||||||||||
|
Настройка Database Mail в MS SQL Server 2005 и старшеИсточник: habrahabr
Все описанное в этом посте будет актуально для Microsoft SQL Server 2005 и старших версий (2008, 2008 R2, Denali). Так же, в рамках этого поста, словосочетание "SQL Server" будет обозначать только Microsoft SQL Server, исключая MySQL, PostgreSQL, FireBird и прочие СУБД, которые, теоретически, можно назвать SQL Server. Что это за штука такая, Database Mail? Database Mail появился в SQL Server 2005, заменив собой компонент SQLMail. Database Mail (как ранее SQLMail) используется для отправки сообщений электронной почты самим SQL Server'ом (точнее, его компонентом Database Engine). Коренным отличием Database Mail от SQLMail является то, что последний, для отправки сообщений, использовал стороний клиент (Microsoft Outlook), который должен был быть установлен на машине с SQL Server'ом, а Database Mail сам общается с почтовым сервером по протоколу SMTP. Для чего это надо? Фактически, каждый решает для себя - нужно ему это или нет. В качестве примеров использования можно привести следующее: Что нам понадобится? Итак, в первую очередь нам нужнен SQL Server версии 2005 или старше. У меня стоит SQL Server 2008 R2, но, в данном случае, разницы в настройках не будет никакой. Database Mail, по мнению Microsoft, доступен во всех редакциях, за исключением Express Edition (пруф), однако, вот здесь есть подробное описание, как этот компонент можно включить. Поехали В первую очередь, подключимся к нашему SQL Server'у с помощью SQL Server Management Studio. Естественно, все действия по настройке можно выполнить с помощью предопределенных хранимых процедур, но я не стремлюсь делать запросам все что возможно, тем более, если для этого существуют удобные мастера. И вот, мы уже стоим перед выбором. Теперь мы можем: настроить Database Mail, изменить профили и аккаунты Database Mail, изменить безопасность профилей и, наконец, изменить конфигурацию системы. Поскольку Database Mail мы ранее не использовали - изменять нам пока нечего, выбираем первый пункт "Set up Database Mail" и нажимаем "Next". А вот и первый сюрприз. SQL Server услужливо сообщает, что вообще-то такая фича как Database Mail отключена и уточняет - желаем ли мы ее включить? Поскольку именно за этим мы сюда и пришли, отвечаем "Yes" и попадаем на следующий экран. Создадим новый профиль с именем My First DBMail Profile - именно он будет использоваться для отправки почты о невыполненных заданиях (job'ах) и добавим в него одну учетную запись (Account) - для чего нажмем кнопку "Add" (справа от пока пустого списка учетных записей). Перед написанием поста я зарегистрировал почту TestDBMail@mail.ru как раз для проведения экспериментов. Естественно, все эти поля вам нужно будет заполнить "под себя". Например, наш внутренний почтовый сервер не требует авторизации для отправки писем и, соответсвенно, можно выбрать пункт "Anonymous authentication". Display Name на этом экране - это то, что будет стоять в поле "From" у полученного письма, а Account name - это внутреннее имя учетной записи на SQL Server. Итак, у нас есть профиль, к нему добавлена учетная запись. Жмем "Next" и смотрим что дальше. Глядя на этот экран, а в особенности на вкладку Private Profiles, должен отпасть вопрос, на который я не обратил внимания раньше - для чего нужна возможность создания нескольких профилей. Каждому пользователю msdb, включенному в роль DatabaseMailUserRole, можно назначить свой профиль. Или даже несколько. Для этого необходимо установить галку "Access". Default Profile - если стоит "Yes", при использовании хранимой процедуры sp_send_dbmail, имя профиля по-умолчанию можно не указывать, туда будет подставлено имя профиля, отмеченного Default для этого пользователя. Однако же, я вернусь на закладку Public Profiles и установлю для свежесозданного профиля признаки Default = "Yes" и Public = "Yes". Теперь этот профиль смогут использовать все пользователи msdb включенные в роль DatabaseMailUserRole (и пользователи серверной роли sysadmin). После нажатия "Next" мы попадаем на предпоследний экран мастера настройки. Здесь мы можем настроить:
Смело жмем "Finish". SQL Server быстро закончит настройку и покажет какие пункты и по какой причине ему выполнить не удалось (если-таки что-то не удалось). Убедившись, что у нас все в порядке, закрываем окно. Проверим, что настройки Database Mail сделаны правильно. Снова идем в Management, нажимаем правой кнопкой на Database Mail и выбираем пункт "Send Test E-Mail". Как мы видим, в качестве профиля уже выбран только что созданный профиль, поля "Тема" и "Текст сообщения" автоматически заполнены. Естественно, все это можно изменить, но меня значения по-умолчанию устраивают. Осталось только указать адрес на который уйдет письмо, не мудрствуя лукаво - пишу тот же адрес, с которого SQL Server будет отправлять письмо (прошу простить мою лень - зачем создавать два ящика, когда и одного более чем достаточно? благо, SQL Server'у абсолютно наплевать на входящие письма, он их читать не умеет). И нажимаю кнопку "Send Test E-Mail". Бинго! Письмо пришло. Фактически, можно считать, что задача выполнена. Но здесь я сделаю небольшое отступление для бедолаг, которые безуспешно будут проверять почту, а нужного письма так и не увидят. FROM sys.databases WHERE name = 'msdb' А дальше, дальше-то что? А дальше начинается самое интересное. Теперь мы наконец-то можем использовать Database Mail для того чтобы получать уведомления от SQL Server'а о том, что у него что-то не так (или же наоборот, что у него все замечательно). В первую очередь - создать оператора. То есть лицо, получающее уведомления. Для этого мы открываем SQL Server Agent, выбираем Operators и тыкаем "New operator" В появившемся окне заполним имя (у меня это Database Administrator) и адрес электронной почты на которую будут приходить уведомления (я указываю все тот же многострадальный ящик на mail.ru). Жмем "Ок" и оператор создастся за доли секунды. Теперь у нас есть настроенный профиль Database Mail, оператор получающий уведомления, осталось настроить SQL Server Agent. Для этого жмем на него (SQL Server Agent) правой кнопкой мыши, выбираем пункт Properties и переходим на вкладку Alert System. Здесь ставим галку "Enable Mail Profile" Сразу после этого становятся активными элементы Mail System и Mail Profile. В Mail System мы можем выбрать Database Mail, или как злобные некрофилы SQL Mail (но ее надо настраивать отдельно), в Mail Profile мы можем выбрать какой профиль Database Mail будет использоваться SQL Server Agent'ом для отправки сообщений. Это может быть публичный профиль, либо приватный, но в этом случае у пользователя Windows, под которым запущен SQL Server Agent, должен быть создан логин в SQL Server, а так же пользователь в msdb, входящий в роль DatabaseMailUserRole. Не желая заморачиваться с профилями, я соглашаюсь с выбором публичного профиля и жму "Ок". Захожу в свойства созданного задания, перехожу на вкладку Notifications, ставлю галку E-mail и выбираю недавносозданного оператора по имени Database Administrator. Третью колонку я оставляю без изменения - там стоит "When the job fails", т.е. уведомления я получу только если задание завершится с ошибкой. Однако, там можно выбрать еще два варианта - когда задание завершится успешно, либо когда задание завершится вообще хоть как-то - с ошибкой, либо без ошибок. Настройки сделаны, запускаем задание: Отлично, путь, естественно не найден, бэкап не сделан. Проверяю почтовый ящик: Письмо доставлено. В нем можно увидеть: Хэппи энд Надеюсь эта информация была хоть кому-нибудь полезной и возможно даже интересной. Если у кого-нибудь возникнет интерес - я могу написать о других способах использования Database Mail. В частности: внутри планов обслуживания, для создания предупреждений (Alerts), а так же о хранимой процедуре sp_send_dbmail, используемой для отправки электронных сообщений с использованием Database Mail. Ссылки по теме
|
|