Все описанное в этом посте будет актуально для 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.
Для чего это?
На самом деле каждый решает сам, нужно ему это или нет. Примеры использования включают следующее: каждое утро менеджер хочет получать на электронную почту результаты вчерашнего дня: сколько и какой продукции было продано, какой клиент сделал самый большой запрос, какие клиенты имеют задолженность и т. д. Другими словами, результаты любого запроса можно отправить с помощью Почтовая база данных; администратор базы данных желает получать по электронной почте информацию о том, какие задачи (работы) или планы обслуживания завершились с ошибкой (или, наоборот, завершились успешно); администратор базы данных хочет получать по электронной почте информацию об ошибках определенного уровня серьезности или определенного количества, произошедших на сервере; администратор базы данных хочет получить на электронную почту информацию о том, что размер базы близок к размеру жесткого диска и пора трясти начальство по поводу покупки нового оборудования; Администратор базы данных хочет получить что-то еще по электронной почте.Таким образом, Database Mail, на мой взгляд, будет наиболее полезен именно администраторам баз данных SQL Server, а учитывая, что сотовые операторы предоставляют услугу email-to-sms (честно говоря, я не силен в ОПСОС, возможно, это редкость).
, но у меня такое есть и абсолютно бесплатно), также может стать очень быстрым средством информирования.
Что нам нужно?
Итак, в первую очередь нам нужен SQL Server версии 2005 или старше.У меня SQL Server 2008 R2, но в этом случае разницы в настройках не будет. Database Mail, по данным Microsoft, доступна во всех редакциях, кроме Express Edition ( доказательство ), однако здесь Здесь Там подробно описано, как можно включить этот компонент. Второе, без чего Database Mail не будет работать, — это почтовый сервер, доступный с машины с SQL Server, и учетная запись на нем, с которой будут отправляться письма.
В моем примере роль такого сервера будет выполнять mail.ru. И третий — членство в роли системного администратора для вашей учетной записи SQL Server, поскольку только члены этой роли могут выполнять настройку.
Идти
Прежде всего, давайте подключимся к нашему SQL-серверу с помощью SQL Server Management Studio. Естественно, все шаги настройки можно выполнить с помощью предопределенных хранимых процедур, но я не стремлюсь сделать для запросов все возможное, особенно если для этого есть удобные мастера.Разверните ветку «Управление», выберите пункт «Почта базы данных», щелкните по нему правой кнопкой мыши и выберите «Настроить почту базы данных».
Экран приветствия мастера можно сразу отметить галочкой «Больше никогда не показывать мне эту хрень», так как никакой полезной информации на нем нет. И вот, мы уже стоим перед выбором.
Теперь мы можем: настроить Database Mail, изменить профили и учетные записи Database Mail, изменить безопасность профиля и, наконец, изменить конфигурацию системы.
Поскольку мы раньше не использовали Database Mail, нам пока менять нечего, выбираем первый пункт «Настроить Database Mail» и жмем «Далее».
И вот первый сюрприз.
SQL Server услужливо сообщает, что на самом деле такая возможность, как Database Mail, отключена и уточняет, хотим ли мы ее включить? Поскольку мы сюда пришли именно за этим, отвечаем «Да» и попадаем на следующий экран.
Создадим новый профиль с названием My First DBMail Profile - он будет использоваться для отправки почты о незавершенных задачах (jobs) и добавим в него одну учетную запись (Account) - для чего нажимаем кнопку "Добавить" (справа от текущий пустой список записей учетных записей).
Прежде чем писать пост, я зарегистрировал почту [email protected] просто для проведения экспериментов.
Естественно, вам нужно будет заполнить все эти поля по своему вкусу.
Например, наш внутренний почтовый сервер не требует авторизации для отправки писем и соответственно вы можете выбрать опцию «Анонимная аутентификация».
Отображаемое имя на этом экране — это то, что появится в поле «От» полученного письма, а имя учетной записи — это внутреннее имя учетной записи на SQL Server. Обратите внимание, что на данном этапе нет возможности проверить соединение с сервером и нет возможности отправить тестовое письмо - т.е.
если при заполнении допущена ошибка, ее поиск может занять некоторое время.
Будь осторожен.
Итак, у нас есть профиль и в него добавлен аккаунт. Нажмите «Далее» и посмотрите, что будет дальше.
Глядя на этот экран, а особенно на вкладку «Частные профили», не должно возникнуть вопроса, на который я раньше не обращал внимания – зачем мне возможность создавать несколько профилей?
Каждому пользователю msdb, включенному в роль DatabaseMailUserRole, можно назначить собственный профиль.
Или даже несколько.
Для этого необходимо поставить галочку «Доступ».
Профиль по умолчанию — если установлено значение «Да», при использовании хранимой процедуры sp_send_dbmail имя профиля по умолчанию можно опустить; туда будет подставлено имя профиля с пометкой Default для этого пользователя.
Однако я вернусь на вкладку «Публичные профили» и выставлю знаки «По умолчанию = «Да» и «Публикация = «Да» для вновь созданного профиля.
Теперь этот профиль могут использовать все пользователи msdb, включенные в роль DatabaseMailUserRole (и пользователи роли сервера sysadmin).
После нажатия «Далее» мы попадаем на предпоследний экран мастера настройки.
Здесь мы можем настроить: Account Retry Attempts — количество попыток отправить письмо с использованием определенной учетной записи (помните, что мы можем добавить в профиль несколько учетных записей? Здесь сначала SQL Server попытается отправить письмо от имени учетной записи с приоритетом 1 столько раз, сколько как укажем, а потом, если письмо все равно не уйдет, будет сортировать аккаунты с более низким приоритетом)
Задержка повторной попытки учетной записи (секунды) — сколько именно секунд SQL Server будет ждать, прежде чем попытаться отправить письмо еще раз.
Максимальный размер файла (в байтах).
SQL Server может добавлять файлы вложений в электронное письмо.
?Этот параметр может ограничить размер такого вложения.
Запрещенные расширения файлов вложений — запрещенные разрешения для вложений, чтобы пользователь не мог создавать и отправлять, например, файл .
vbs. Минимальное время жизни исполняемого файла Database Mail (секунды) — Database Mail представляет собой отдельный файл DatabaseMail(90-110).
exe — этот параметр определяет, по истечении какого периода времени SQL Server завершит запущенный процесс, если нет активности.
Уровень ведения журнала — этот параметр определяет, какой объем информации будет записываться в журнал при работе Database Mail. На последнем экране мы увидим, какие учетные записи и профили будут созданы, а также каким пользователям будет предоставлена возможность использовать созданный профиль.
Смело нажимайте «Готово».
SQL Server быстро завершит настройку и покажет, какие элементы и по какой причине не удалось завершить (если что-то не удалось).
Убедившись, что все в порядке, закрываем окно.
Давайте проверим правильность настроек Database Mail. Снова зайдите в «Управление», щелкните правой кнопкой мыши «Почта базы данных» и выберите «Отправить тестовое письмо».
Как мы видим, вновь созданный профиль уже выбран в качестве профиля, поля «Тема» и «Текст сообщения» заполняются автоматически.
Естественно, все это можно изменить, но значения по умолчанию меня устраивают. Остается только указать адрес, на который пойдет письмо, не мудрствуя лукаво - я пишу тот же адрес, с которого SQL Server отправит письмо (простите мою лень - зачем создавать два почтовых ящика, когда одного более чем достаточно? К счастью , SQL Server абсолютно не заботится о входящих письмах, он не умеет их читать).
И я нажимаю кнопку «Отправить тестовое письмо».
.
через 15 секунд во входящих:
Бинго! Письмо пришло.
По сути, можно считать задачу выполненной.
Но здесь я сделаю небольшое отступление для бедняг, которые безуспешно проверят почту и так и не увидят нужное им письмо.
Сначала просмотрите журнал Database Mail. В SSMS перейдите в раздел «Управление», щелкните правой кнопкой мыши «Почта базы данных» и выберите «Журнал почты базы данных».
Возможно, вы просто неправильно указали параметры подключения к серверу – это, как ни странно, довольно распространенная ошибка.
Второе, что нужно проверить, — включен ли Service Broker в базе данных msdb. Это то, что используется для отправки сообщений.
Создайте новый запрос и запустите его: SELECT is_broker_enabled
FROM sys.databases
WHERE name = 'msdb'
Если возвращаемое значение не равно единице, Service Broker отключен.
Вы можете включить его следующим образом: ALTER DATABASE msdb SET ENABLE_BROKER
Если Service Broker включен, все настройки выполнены правильно — кто знает — проверьте свою электронную почту еще раз.
Нет письма? Нажмите кнопку «Устранение неполадок», которая находится в окне, которое появляется после нажатия кнопки «Отправить тестовое письмо», и посмотрите типичные ошибки в справке Microsoft. Предположим, что теперь у нас настроена Database Mail и пришло тестовое письмо.
И что дальше?
И тогда начинается веселье.Теперь мы наконец можем использовать Database Mail для получения уведомлений от SQL Server о том, что с ним что-то не так (или, наоборот, что с ним все в порядке).
SQL Server может отправить уведомление о том, что задание выполнено успешно (или наоборот — выполнено с ошибкой).
Точнее, это может сделать агент SQL Server, который собственно и выполняет поставленные задачи.
Для того чтобы это сделать, ему необходимо сделать следующее.
Прежде всего создайте оператор.
То есть человек, получающий уведомления.
Для этого открываем агент SQL Server, выбираем «Операторы» и нажимаем «Новый оператор».
В появившемся окне заполняем имя (у меня это Администратор БД) и адрес электронной почты, на который будут приходить уведомления (указываю тот же многострадальный ящик на mail.ru).
Нажмите «ОК» и оператор будет создан за долю секунды.
Теперь у нас есть настроенный профиль Database Mail, оператор получения уведомлений, осталось только настроить SQL Server Agent. Для этого щелкните по нему правой кнопкой мыши (Агент SQL Server), выберите «Свойства» и перейдите на вкладку «Система оповещений».
Здесь ставим галочку «Включить почтовый профиль»
Сразу после этого элементы Почтовая система и Почтовый профиль становятся активными.
В Mail System мы можем выбрать Database Mail или, как злые некрофилы, SQL Mail (но его нужно настраивать отдельно), в Mail Profile мы можем выбрать, какой профиль Database Mail будет использоваться агентом SQL Server для отправки сообщений.
Это может быть общедоступный профиль или частный, но в этом случае пользователь Windows, под которым работает агент SQL Server, должен иметь логин, созданный в SQL Server, а также пользователь в msdb, входящий в роль DatabaseMailUserRole. .
Не желая заморачиваться с профилями, соглашаюсь на выбор публичного профиля и нажимаю «ОК».
Все.
Теперь вам необходимо перезапустить агент SQL Server. Это можно сделать из SSMS или из диспетчера конфигурации SQL Server. Выбирайте сами – откуда вам удобнее.
После перезагрузки проверим, что все настроено правильно и сообщения действительно поступают. Для этого я делаю задание, которое пытается создать резервную копию одной из баз данных, используя путь, который явно не существует. Захожу в свойства созданной задачи, перехожу на вкладку «Уведомления», ставлю галочку «Электронная почта» и выбираю вновь созданного оператора с именем «Администратор базы данных».
Третий столбец оставляю без изменений — там написано «При сбое задания», т.е.
я буду получать уведомления только в случае провала задания.
Однако там можно выбрать еще два варианта - когда задача завершится успешно, или когда задача вообще завершится как-то - с ошибкой, или без ошибок.
Настройки сделаны, запускаем задачу:
Отлично, путь, конечно, не найден, бэкап не сделан.
Я проверяю свой почтовый ящик:
Письмо доставлено.
В нем вы можете увидеть: Когда и какая задача выполнялась (ЗАДАНИЕ: «Резервное копирование с ошибками» было выполнено 19.11.2011 в 19:35:12) Как долго выполнялась задача до обнаружения ошибки (ДЛИТЕЛЬНОСТЬ: 0 часов, 0 минут, 1 секунда) Результат выполнения (СТАТУС: Не выполнено) - хотя на самом деле, если бы задание было успешно выполнено, письмо бы не пришло.
Сообщение из журнала событий этого задания (СООБЩЕНИЯ: задание не выполнено.
Задание было вызвано пользователем KATE-HOME\rancid. Последним выполняемым шагом был шаг 1 (тест).
), включая имя пользователя, выполнившего задание.
работа Этой информации будет достаточно, чтобы понять, что, когда и где пошло не так, и поможет в определении вариантов решения возникшей проблемы.
Счастливый конец
Надеюсь, эта информация была кому-то хотя бы полезной и, возможно, даже интересной.
Если кому интересно, могу написать о других способах использования Database Mail. В частности: внутри планов обслуживания, для создания оповещений (Alerts), а также о хранимой процедуре sp_send_dbmail, используемой для отправки электронных писем с помощью Database Mail.
P.S.
Появился на хабе еще один пост , посвященный настройке Database Mail. Там говорится, как настроить Database Mail с помощью сценариев.Теги: #sql-сервер #почта базы данных #новичок #администрирование #Microsoft SQL Server
-
Коннотация
19 Oct, 24 -
Как Мы Создавали Новый Сайт Firstdedic
19 Oct, 24 -
Когда «Делаю Плохо» == «Делаю Лучше»
19 Oct, 24 -
Методы Ценообразования Для Фрилансеров
19 Oct, 24 -
Костюм Для Отдыха Ларри Придет Снова!
19 Oct, 24 -
Wpa-Атака: Подробности
19 Oct, 24