Свойства агента SQL Server (страница «Система предупреждений»)
В Управляемом экземпляре Azure SQL в настоящее время поддерживается большинство функций агента SQL Server (но не все). Подробные сведения см. в статье Различия в T-SQL между Управляемым экземпляром SQL Azure и SQL Server.
Эта страница используется для просмотра и изменения параметров сообщений, отправляемых предупреждениями агента Microsoft SQL Server.
Параметры
Почтовый сеанс
Параметры в данном разделе предназначены для настройки почты агента SQL Server .
Включить почтовый профиль
Включает почту агента SQL Server . По умолчанию почта агента SQL Server не включена.
Почтовая система
Устанавливает почтовую систему для использования агентом SQL Server . Database Mail
После изменений системы электронной почты необходимо перезапустить службу агента SQL Server , чтобы эти изменения вступили в силу.
Профиль электронной почты
Устанавливает профиль для использования агентом SQL Server . Для создания нового профиля вы можете также выбрать пункт .
Электронные сообщения на пейджер
Параметры в этом разделе позволяют настроить электронные сообщения, отправляемые на адреса пейджеров для работы с вашей пейджинговой системой.
Форматирование адреса для электронных сообщений на пейджер
Данный раздел позволяет задать формат адресов и темы, включаемые в электронные сообщения на пейджер.
Поле «Кому»
Задает параметры для строки сообщения Кому .
Prefix
Введите любой фиксированный текст, требуемый системой в начале строки Кому сообщений, отправляемых на пейджер.
Пейджер
Содержит адрес электронной почты для сообщения между префиксом и суффиксом.
Суффикс
Введите любой фиксированный текст, требуемый пейджинговой системой в конце строки Кому сообщений, отправляемых на пейджер.
Поле «Копия»
Задает параметры для строки сообщения Копия .
Prefix
Введите любой фиксированный текст, требуемый системой в начале строки Копия сообщений, отправляемых на пейджер.
Пейджер
Содержит адрес электронной почты для сообщения между префиксом и суффиксом.
Суффикс
Введите любой фиксированный текст, требуемый пейджинговой системой в конце строки Копия сообщений, отправляемых на пейджер.
Тема
Задает параметры для строки темы сообщения.
Prefix
Введите любой фиксированный текст, требуемый системой в начале строки Тема сообщений, отправляемых на пейджер.
Суффикс
Введите любой фиксированный текст, требуемый системой в конце строки Тема сообщений, отправляемых на пейджер.
Включить тело электронного письма в сообщение уведомления
Включает тело электронного письма в сообщение, отправляемое на пейджер.
Резервный оператор
Данный раздел позволяет задать параметры для резервного оператора.
Включить резервный оператор
Задает резервный оператор.
Оператор
Устанавливает имя оператора для получения уведомлений об отказах.
Уведомлять с помощью
Устанавливает метод для использования при уведомлении резервного оператора.
Замена токенов
Данный раздел позволяет включить токены шагов заданий, которые могут использоваться в заданиях, выполняемых предупреждениями агента SQL Server . Дополнительные сведения о токенах шагов заданий см. в разделе Использование токенов в шагах задания.
Все пользователи Windows с разрешением на запись в журнал событий Windows могут получить доступ к шагам заданий, которые активированы предупреждениями агента SQL Server . Чтобы избежать этого нарушения безопасности, в SQL Server токены агента, которые могут использоваться в заданиях, активированных предупреждениями, по умолчанию отключены. К этим токенам относятся: $(A-DBN) , $(A-SVR) , $(A-ERR) , $(A-SEV) и $(A-MSG) .
При необходимости использовать эти токены перед их включением убедитесь, что только члены доверенных групп безопасности Windows, таких как группа «Администраторы», обладают разрешением на работу с журналом событий компьютера, на котором находится SQL Server .
Заменить токенами всех ответов заданий на предупреждения
Установите этот флажок, чтобы включить замену токенов для заданий, активизированных предупреждениями SQL Server .
Агент SQL Server
В Управляемом экземпляре Azure SQL в настоящее время поддерживается большинство функций агента SQL Server (но не все). Подробные сведения см. в статье Различия в T-SQL между Управляемым экземпляром SQL Azure и SQL Server.
Агент SQL Server — это служба Microsoft Windows, выполняющая запланированные административные задачи, которые называются заданиями в SQL Server.
Преимущества агента SQL Server
Агент SQL Server использует SQL Server для хранения сведений о задании. Задание состоит из одного или нескольких шагов. Каждый шаг содержит собственную задачу, например создание резервной копии базы данных.
Агент SQL Server может выполнять задания по расписанию в ответ на определенное событие или по требованию. Например, можно автоматизировать задачу создания резервной копии всех серверов компании, чтобы она выполнялась ежедневно по окончании рабочего дня. Запланируйте выполнение резервного копирования после 22:00 с понедельника по пятницу. Если во время создания резервной копии возникает проблема, агент SQL Server регистрирует соответствующее событие и выдает уведомление.
Служба агента SQL Server по умолчанию отключена, если во время установки SQL Server явно не выбран автоматический запуск службы.
SQL Server Agent Components
Агент SQL Server использует следующие компоненты, чтобы определить задачи для выполнения, время для выполнения задач и порядок уведомления об успешном или неудачном завершении задач.
Задания
Задание — это указанная последовательность действий, выполняемая агентом SQL Server. Используйте задания, чтобы определить задачу администрирования, которую можно запустить один или несколько раз и отслеживать ее успешное выполнение или сбой. Задание может выполняться на одном локальном или на нескольких удаленных серверах.
Задания агента SQL Server, которые выполнялись во время отработки отказа в экземпляре отказоустойчивого кластера SQL Server, не возобновляются после отработки отказа и переключения на другой узел отказоустойчивого кластера. Задания агента SQL Server, которые выполнялись во время приостановки работы узла Hyper-V, не возобновляются, если приостановка вызывает отработку отказа с переходом на другой узел. Задания, выполнение которых было начато, но не завершилось в связи с событием отработки отказа, регистрируются в журнале как начатые, но дополнительных записей журнала о завершении или сбое нет. Задания агента SQL Server выглядят как незавершенные.
Выполнять задания можно несколькими способами:
- по одному или нескольким расписаниям;
- в ответ на одно или несколько предупреждений;
- посредством выполнения хранимой процедуры sp_start_job;
Каждое действие в задании является шагом задания. Например, шаг задания может состоять из выполнения инструкции Transact-SQL, выполнения пакета служб SQL Server Integration Services или выдачи команды серверу служб Analysis Services. Шагами задания управляют как частью задания.
Каждый шаг задания выполняется в указанном контексте безопасности. Для шагов заданий, использующих Transact-SQL, применяйте инструкцию EXECUTE AS, чтобы указать контекст безопасности для шага задания. Для других типов шагов заданий используйте учетную запись-посредник, чтобы указать контекст безопасности для шага задания.
Расписания
Расписание определяет время выполнения задания. Несколько заданий могут выполняться по тому же расписанию, а несколько расписаний могут применяться для одного задания. Расписание может определить следующие условия для времени выполнения задания:
- при каждом запуске агента SQL Server;
- каждый раз, когда загрузка ЦП компьютера достигает уровня, который определен как уровень простоя;
- однажды, в указанные дату и время;
- Для повторяющегося расписания.
видны узлы
Предупреждение — это автоматический ответ на наступление указанного события. Например, событие может быть заданием, которое начинает выполняться, или системным ресурсом, достигшим указанного порогового значения. Пользователь определяет условия, при которых выдается предупреждение.
Предупреждение может быть реакцией на одно из следующих условий:
- события SQL Server;
- условия производительности SQL Server;
- события инструментария управления Microsoft Windows (WMI) на компьютере, где работает агент SQL Server;
Предупреждение может выполнять следующие действия:
- уведомить один или несколько операторов;
- Выполнение задания
Дополнительные сведения см. в статье Оповещения.
Операторы
Оператор определяет контактные сведения о лице, ответственном за обслуживание одного или нескольких экземпляров SQL Server. В некоторых организациях обязанности оператора возлагаются на одно лицо. В организациях, использующих несколько серверов, обязанности оператора могут быть разделены между несколькими лицами. Оператор не содержит сведений о безопасности и не определяет субъект безопасности.
SQL Server может уведомлять операторов о предупреждениях через.
- электронная почта;
- пейджер (через электронную почту);
- команда net send.
Чтобы отправлять уведомления с помощью net send, служба Windows Messenger должна быть запущена на компьютере, где работает агент SQL Server.
Режимы отправки уведомлений с помощью пейджера и команды net send будут удалены из агента SQL Server в следующей версии SQL Server. Старайтесь не использовать эти функции в новых разработках и предусмотрите соответствующие изменения в приложениях, которые используют их в настоящее время.
Для отправки операторам уведомлений по электронной почте или на пейджер необходимо настроить агент SQL Server для использования компонента Database Mail. Дополнительные сведения см. в разделе о компоненте Database Mail.
Можно определить оператора как псевдоним для группы лиц. Таким способом все члены этого псевдонима не будут проверяться одновременно. Дополнительные сведения см. в разделе Операторы.
Безопасность при администрировании агента SQL Server
Агент SQL Server использует предопределенные роли базы данных SQLAgentUserRole, SQLAgentReaderRole и SQLAgentOperatorRole в базе данных msdb для управления доступом к агенту SQL Server для пользователей, не входящих в предопределенную роль сервера sysadmin. Помимо этих предопределенных ролей базы данных, подсистемы и учетные записи-посредники позволяют администраторам базы данных гарантировать, что каждый шаг задания выполняется с минимальными разрешениями, необходимыми для выполнения задачи.
Роли
Доступ к агенту SQL Server имеют члены предопределенных ролей базы данных SQLAgentUserRole, SQLAgentReaderRole и SQLAgentOperatorRole в базе данных msdb, а также члены предопределенной роли сервера sysadmin. Пользователь, не принадлежащий ни к одной из этих ролей, не может использовать агент SQL Server. Дополнительные сведения о ролях, используемых агентом SQL Server, см. в разделе Обеспечение безопасности агента SQL Server.
Подсистемы
Подсистема — это предопределенный объект, который содержит функции, доступные шагу задания. Каждая учетная запись-посредник имеет доступ к одной или нескольким подсистемам. Подсистемы обеспечивают безопасность, поскольку разграничивают доступ учетных записей-посредников к функциям. Каждый шаг задания выполняется в контексте учетной записи-посредника, за исключением этапов задания Transact-SQL. На этапах задания Transact-SQL применяйте команду EXECUTE AS, чтобы задать контекст безопасности для владельца задания.
SQL Server определяет подсистемы, перечисленные в следующей таблице:
Поскольку в шагах задания Transact-SQL учетные записи-посредники не используются, какие-либо подсистемы агента SQL Server для шагов задания Transact-SQL отсутствуют.
Агент SQL Server применяет ограничения подсистемы принудительно, даже если обычно субъект безопасности для учетной записи-посредника имеет разрешение на выполнение задачи на шаге задания. Например, пользователь, являющийся членом предопределенной роли администратора сервера, не сможет выполнить шаг задания служб SQL Server Integration Services, если его учетная запись-посредник не имеет доступа к подсистеме служб SQL Server Integration Services, несмотря на то, что пользователь может выполнять пакеты служб SQL Server Integration Services.
прокси-серверы;
Агент SQL Server для управления контекстами безопасности использует учетные записи-посредники. Учетная запись-посредник может быть использована на нескольких шагах задания. Создавать учетные записи-посредники могут члены предопределенной роли администратора сервера.
Каждой учетной записи-посреднику соответствует учетная запись системы безопасности. и может быть связана с множеством подсистем и множеством имен входа. Учетная запись-посредник может применяться только для шагов задания, которые используют связанную с этой учетной записью-посредником подсистему. Чтобы создать шаг задания, использующий определенную учетную запись-посредник, владелец задания должен либо использовать связанное с ней имя входа, либо быть членом роли, имеющей неограниченный доступ к учетным записям-посредникам. Члены предопределенной роли администратора сервера имеют неограниченный доступ к учетным записям-посредникам. Члены ролей SQLAgentUserRole, SQLAgentReaderRoleи SQLAgentOperatorRole могут использовать только учетные записи-посредники, на которые им был предоставлен особый доступ. Каждому пользователю, входящему в одну из предопределенных ролей базы данных агента SQL Server, необходимо предоставить доступ к конкретным учетным записям-посредникам, чтобы пользователь мог создавать шаги задания, которые будут использовать эти учетные записи-посредники.
Связанные задачи
Используйте следующие шаги для настройки агента SQL Server для автоматического администрирования SQL Server:
- Определите, какие административные задачи или события сервера происходят регулярно, а также можно ли эти задачи или события администрировать программным путем. Подходящей для автоматизации является такая задача, которая включает предсказуемую последовательность шагов и выполняется в определенное время или в ответ на определенное событие.
- Определите набор заданий, расписаний, предупреждений и операторов, используя среду SQL Server Management Studio, скрипты Transact-SQL или управляющие объекты SQL Server (SMO). Дополнительные сведения см. в разделе Создание заданий.
- Выполните определенные задания агента SQL Server.
Для экземпляра SQL Server по умолчанию служба SQL Server называется SQLSERVERAGENT. В именованных экземплярах служба агента SQL Server имеет имя SQLAgent$имя_экземпляра.
Если запущено несколько экземпляров SQL Server, то, чтобы автоматизировать общие для всех экземпляров задания, можно использовать администрирование нескольких серверов. Дополнительные сведения см. в статье Автоматизация администрирования в масштабах предприятия.
Используйте следующие задачи, чтобы начать работу с агентом SQL Server:
| Описание | Раздел |
|---|---|
| Содержит инструкции по настройке агента SQL Server. | Настройка агента SQL Server |
| Описывает запуск, остановку и приостановку службы агента SQL Server. | Запуск, остановка или приостановка службы агента SQL Server |
| Описывает вопросы задания учетных записей для службы агента SQL Server. | Выбор учетной записи для службы агента SQL Server |
| Описывает использование журнала ошибок агента SQL Server. | Журнал ошибок агента SQL Server |
| Содержит инструкции по использованию объектов производительности. | Использование объектов производительности |
| Описывает мастер планов обслуживания — программу, которая используется для создания заданий, оповещений и операторов для автоматизации администрирования экземпляра SQL Server. | Использование мастера планов обслуживания |
| Описывает автоматизацию задач администрирования с помощью агента SQL Server. | Задачи автоматизированного администрирования (агент SQL Server) |
NOSQLPS
Начиная с версии SQL Server 2019, вы можете отключить SQLPS. Для этого в первой строке шага задания типа PowerShell можно добавить #NOSQLPS , чтобы Агент SQL не запускал автоматическую загрузку модуля SQLPS. После этого задание Агента SQL запустит установленную на компьютере версию PowerShell, и вы можете использовать любой другой модуль PowerShell.
Если вы хотите использовать модуль SqlServer в шаге задания Агента SQL, можно поместить этот код в первые две строки скрипта.
#NOSQLPS Import-Module -Name SqlServer
См. также:
- Настройка контактной зоны
- Агент SQL Server с PowerShell
3.5. SQL Server Agent — Часть 1
В состав сервера MS SQL Server входит сервис SQL Server Agent, который состоит из сообщений, операторов и работ. Наибольший интерес программистов и администраторов вызывают работы, поэтому этой теме мы уделим достаточно подробное внимание.
Работа администратора очень часто связана с выполнением однообразных задач, что превращает рабочий день в серые будни. Для меня это самое сложное, поэтому многократно выполняемые задачи я стремлюсь автоматизировать. У MS SQL Server есть достаточно мощное средство автоматизации – работ (job). Работы – это набор определенных действий (например, SQL запросов), которые могут выполняться сервером автоматически в определенное время с помощью планировщика (Schedule) или запускаться администратором вручную.
Ярким примером задач администратора, которые могут вызывать скуку, является обслуживание баз данных, о чем мы будем достаточно много говорить в главе 4. Например, можно запрограммировать сервер так, чтобы он каждый день в конце рабочего дня создавал резервную копию базы данных.
Работы состоят из шагов, которые последовательно выполняются сервером MS SQL Server. Выполнение каждого последующего шага может зависеть от результата предыдущего. Таким образом, можно строить определенную логику задач.
Вы должны учитывать, что работы выполняются не самим сервисом MS SQL Server, а сервисом SQL Server Agent, который входит в поставку MS SQL Server. Поэтому, убедитесь, что этот сервис работает, иначе работы не смогут выполняться по расписанию.
Помимо этого, если сервис обращается к удаленным серверам по сети, то SQL Server Agent должен работать под реальной учетной записью, а не под системной. Чтобы изменить имя пользователя, с правами, которыми работает сервис, запустите оснастку Сервисы (Пуск/Панель управления/Администрирование/Сервисы). Перед вами откроется окно, как на рисунке 3.1. Найдите строку с именем сервиса SQLSERVERAGENT и дважды щелкните по ней. Перейдите на закладку «Вход в систему» (Log on) и укажите реальную учетную запись пользователя, который существует в системе и обладает правами на необходимые ресурсы вашего компьютера и удаленного сервера, к которому будет происходить подключение по сети. Если сервис SQL Server Agent будет работать с правами системного аккаунта, то у него не хватит прав на подключение к удаленной системе, потому что системный аккаунт не имеет имени пользователя и пароля, необходимых для аутентификации.
3.5.1. Добавление работы
Начнем с добавления записей. Для этого используется хранимая процедура sp_add_job, которая выглядит следующим образом:
sp_add_job [ @job_name = ] 'job_name' [ , [ @enabled = ] enabled ] [ , [ @description = ] 'description' ] [ , [ @start_step_id = ] step_id ] [ , [ @category_name = ] 'category' ] [ , [ @category_id = ] category_id ] [ , [ @owner_login_name = ] 'login' ] [ , [ @notify_level_eventlog = ] eventlog_level ] [ , [ @notify_level_email = ] email_level ] [ , [ @notify_level_netsend = ] netsend_level ] [ , [ @notify_level_page = ] page_level ] [ , [ @notify_email_operator_name = ] 'email_name' ] [ , [ @notify_netsend_operator_name = ] 'netsend_name' ] [ , [ @notify_page_operator_name = ] 'page_name' ] [ , [ @delete_level = ] delete_level ] [ , [ @job_id = ] job_id OUTPUT ]
Рассмотрим параметры, которые передаются данной процедуре:
- @job_name – имя работы, которое должно быть уникальным и не может содержать символ процента;
- @enabled – индикатор активности работы. Если параметр равен 1, то работа активна и может выполняться из планировщика задач. Если указать 0, то работа не может выполняться автоматически, запуск доступен только вручную;
- @description – текстовое описание работы;
- @start_step_id – идентификатор работы, которая должна выполняться первой, по умолчанию используется число 1;
- @category_name – имя категории;
- @category_id – идентификатор категории. Этот параметр может использоваться в определенных языках программирования;
- @owner_login_name – имя пользователя, который будет являться владельцем работы. Если ничего не указано, то владельцем будет текущий пользователь;
- @notify_level_eventlog – какие сообщения должны сохраняться в журнале событий Windows. Здесь можно указать одно из следующих значений:
- 0 – никакие сообщения;
- 1 – сообщения об удачном завершении;
- 2 – сообщения об ошибках (значение по умолчанию);
- 3 – все сообщения.
Прежде чем использовать процедуру, необходимо отметить, что она принадлежит базе данных msdb, поэтому необходимо подключиться именно к этой базе.
Есть еще одно ограничение – вы должны указывать имена только реально существующих в базе данных операторов, поэтому посмотрим на пример без указания операторов:
USE msdb EXEC sp_add_job @job_name = 'Тестовая работа', @enabled = 1, @description = 'Это тестовая работа', @notify_level_eventlog = 3, @notify_level_email = 2, @notify_level_netsend = 1
3.5.2. Управление операторами
Оператор – это описание человека, который должен получать сообщения сервера MS SQL Server и сообщения о ходе выполнения работы. Для создания оператора используется процедура sp_add_operator, которая выглядит следующим образом:
sp_add_operator [ @name = ] 'name' [ , [ @enabled = ] enabled ] [ , [ @email_address = ] 'email_address' ] [ , [ @pager_address = ] 'pager_address' ] [ , [ @weekday_pager_start_time = ] weekday_pager_start_time ] [ , [ @weekday_pager_end_time = ] weekday_pager_end_time ] [ , [ @saturday_pager_start_time = ] saturday_pager_start_time ] [ , [ @saturday_pager_end_time = ] saturday_pager_end_time ] [ , [ @sunday_pager_start_time = ] sunday_pager_start_time ] [ , [ @sunday_pager_end_time = ] sunday_pager_end_time ] [ , [ @pager_days = ] pager_days ] [ , [ @netsend_address = ] 'netsend_address' ] [ , [ @category_name = ] 'category' ]
Рассмотрим параметры этой процедуры:
- @name – имя оператора;
- @enabled – если параметр равен 1, то оператор активен, а если указать 0, то оператор не доступен и не должен получать сообщений;
- @email_address – электронный адрес (e-mail) оператора. Если значение этого параметра является физическим адресом SMTP:flenov@mail.ru, а не псевдонимом flenov, то он должен быть заключен в квадратные скобки [SMTP:flenov@mail.ru]. Дело в том, что по умолчанию MS SQL Server использует почтовый сервис Exchange Service, который использует свою систему именования ящиков;
- @pager_address – адрес Интернет пейджера;
- @weekday_pager_start_time – время, после которого можно отправлять сообщения на пейджер в рабочий день. Время указывается в формате ЧЧММСС, например, число 100100 соответствует 10 часам, 01 минуте и 00 секундам;
- @weekday_pager_end_time – время, до которого можно отправлять сообщения на пейджер в рабочий день. Время указывается в формате ЧЧММСС, например, число 100100 соответствует 10 часам, 01 минуте и 00 секундам;
- @saturday_pager_start_time и @sunday_pager_start_time – время, после которого можно отправлять сообщения на пейджер в субботу и в воскресенье соответственно. Время указывается в формате ЧЧММСС, например, число 100100 соответствует 10 часам, 01 минуте и 00 секундам;
- @saturday_pager_end_time и @sunday_pager_end_time – время, до которого можно отправлять сообщения на пейджер в субботу и в воскресенье соответственно. Время указывается в формате ЧЧММСС, например, число 100100 соответствует 10 часам, 01 минуте и 00 секундам;
- @pager_days – этот параметр определяет дни, в которые оператор доступен для получения сообщений на пейджер. Здесь можно указать одно из следующих значений или сумму из нескольких чисел:
- 0 – никогда (это значение по умолчанию);
- 1 – по воскресеньям;
- 2 – по понедельникам;
- 4- по вторникам;
- 8 – по средам;
- 16- по четвергам;
- 32 – по пятницам;
- 64 – по субботам.
Как указать, что пользователь доступен с понедельника по пятницу? Для этого складываем соответствующие числа 2+4+8+16+32. В результате мы получим 62 и именно это значение необходимо указать в параметре @pager_days.
- @netsend_address – сетевой адрес оператора (имя компьютера), на который нужно отправлять сообщения;
- @category_name – имя категории сообщений.
Посмотрим, как можно создать оператора, который будет получать сообщения на e-mail адрес:
use msdb exec sp_add_operator @name = 'Андрей', @enabled = 1, @email_address ='[SMTP:flenov@mail.ru]'
Следующий пример создает оператора, который может получать e-mail и NET SEND сообщения:
use msdb exec sp_add_operator @name = 'Михаил', @enabled = 1, @email_address ='[SMTP:admin@mail.ru]', @netsend_address ='admincomp'
Теперь посмотрим, как можно создать работу, в которой сообщения о статусе выполнения работы передаются операторам:
USE msdb EXEC sp_add_job @job_name = 'Тестовая работа 2', @enabled = 1, @description = 'Это тестовая работа с указанием оператора', @notify_level_eventlog = 3, @notify_level_email = 2, @notify_level_netsend = 1, @notify_email_operator_name = 'Андрей', @notify_netsend_operator_name = 'Михаил'
Если хотя бы один из операторов, указанных в примере не будет существовать в базе данных, выполнение процедуры завершиться неудачей.
Изменение оператора
Для изменения параметров оператора используется процедура sp_update_operator, которая выглядит так:
sp_update_operator [@name =] 'name' [, [@new_name =] 'new_name'] [, [@enabled =] enabled] [, [@email_address =] 'email_address'] [, [@pager_address =] 'pager_number'] [, [@weekday_pager_start_time =] weekday_pager_start_time] [, [@weekday_pager_end_time =] weekday_pager_end_time] [, [@saturday_pager_start_time =] saturday_pager_start_time] [, [@saturday_pager_end_time =] saturday_pager_end_time] [, [@sunday_pager_start_time =] sunday_pager_start_time] [, [@sunday_pager_end_time =] sunday_pager_end_time] [, [@pager_days =] pager_days] [, [@netsend_address =] 'netsend_address'] [, [@category_name =] 'category']
Параметры процедуры изменения оператора такие же, как и при создании, поэтому не будем тратить время на рассмотрения оператора, а лучше посмотрим его работу на практике. Следующий пример изменяет e-mail и сетевой адрес:
exec sp_update_operator @name = 'Михаил', @email_address ='[SMTP:mikhail@mail.ru]', @netsend_address ='notebook'
Указание имени оператора является обязательным, потому что процедура должна знать, какого именно оператора нужно обновлять.
Следующий пример делает оператора не активным, после чего он не будет получать информационные сообщения:
exec sp_update_operator @name = 'Михаил', @enabled=0
Изменяется только параметр @enabled, а все остальные не изменяются и сохраняют свои значения.
Информация об операторе
Чтобы убедится в том, что изменения прошли успешно, можно воспользоваться процедурой sp_help_operator, которая выводит информацию об операторе. В качестве параметра @operator_name нужно передать имя интересующего вас оператора, например, так:
exec sp_help_operator @operator_name = 'Михаил'
Давайте снова сделаем Михаила активным, чтобы он мог получать информационные сообщения:
exec sp_update_operator @name = 'Михаил', @enabled=1
Удаление оператора
Для удаления оператора используется процедура sp_delete_operator, которая выглядит следующим образом:
sp_delete_operator [ @name = ] 'name' [ , [ @reassign_to_operator = ] 'reassign_operator' ]
Здесь всего два параметра:
- @name – имя удаляемого оператора;
- @reassign_to_operator – не обязательный параметр, где можно указать оператора, которому должны быть назначены события, отслеживаемые удаляемым оператором.
Следующий пример удаляет оператора Михаил, а все события, которые он отслеживал, будет теперь отслеживать Андрей:
EXEC sp_delete_operator @name = 'Михаил', @reassign_to_operator = 'Андрей'
3.5.3. Добавление шага
Мы научились создавать и удалять работу, а также добавлять операторов, но все это пока лишено смысла, ведь создаваемая работа еще ничего не умеет делать. Чтобы наделить смыслом предыдущие несколько страниц данной книги, необходимо научиться создавать шаги работы. Для этого используется процедура sp_add_jobstep. В общем виде процедура выглядит следующим образом:
sp_add_jobstep [ @job_id = ] job_id | [ @job_name = ] 'job_name' [ , [ @step_id = ] step_id ] < , [ @step_name = ] 'step_name' >[ , [ @subsystem = ] 'subsystem' ] [ , [ @command = ] 'command' ] [ , [ @additional_parameters = ] 'parameters' ] [ , [ @cmdexec_success_code = ] code ] [ , [ @on_success_action = ] success_action ] [ , [ @on_success_step_id = ] success_step_id ] [ , [ @on_fail_action = ] fail_action ] [ , [ @on_fail_step_id = ] fail_step_id ] [ , [ @server = ] 'server' ] [ , [ @database_name = ] 'database' ] [ , [ @database_user_name = ] 'user' ] [ , [ @retry_attempts = ] retry_attempts ] [ , [ @retry_interval = ] retry_interval ] [ , [ @os_run_priority = ] run_priority ] [ , [ @output_file_name = ] 'file_name' ] [ , [ @flags = ] flags ]
В первой строке указано, что процедуре необходимо указать или идентификатор или имя работы, которой нужно добавить новый шаг. Давайте рассмотрим параметры более подробно:
- @job_id – идентификатор работы, куда нужно добавить шаг;
- @job_name – имя работы, которой нужно добавить шаг;
- @step_id – автоматически увеличиваемое число, начиная с единицы. Если параметр не указан, то значение будет установлено автоматически (следующее за максимально существующим номером шага), т.е. шаг будет добавлен в конец цепочки шагов. Если у вас уже есть шаги с номерами 1, 2 и 3, и вы указали в параметре @step_id число 3, то новое значение будет вставлено на третью позицию, а шаг, который был на этом месте ранее, сместиться на четвертую. При этом, идентификаторы шагов будут перенумерованы автоматически;
- @step_name – имя шага;
- @subsystem – система команд, которые будут выполняться сервером на данном шаге. В этом параметре можно указать одно из следующих значений:
- ACTIVESCRIPTING – выполняться должен активный сценарий;
- CMDEXEC – на данном шаге будет выполняться команда ОС или внешняя программа;
- DISTRIBUTION – выполнение дистрибутора репликации;
- SNAPSHOT – выполнение агента репликации снятия снимка;
- LOGREADER – выполнение агента чтения журнала;
- MERGE – выполнение агента репликации смешивания (Merge);
- TSQL – шаг будет выполнять команду Transact-SQL (это значение по умолчанию).
- 1 – выход с сообщением об удачном завершении. Если работе установлен оператор, отслеживающий удачное завершение работы, то он получит соответствующее уведомление;
- 2 – выход с ошибкой. Иногда удачное выполнение команды является отрицательным результатом. Например, запрос может проверять наличие несвязанных строк. Если строки найдены, то по идее шаг должен вернуть положительный результат, но не связанные строки – это нарушение целостности. Поэтому можно указать, что при удачном выполнении сценария, необходимо завершить работу с ошибкой и проинформировать оператора, если он установлен;
- 3 – перейти к выполнению следующего оператора;
- 4 – перейти к выполнению шага, указанного в параметре @on_success_step_id.
- 0 – нет никаких дополнительных опций (это значение по умолчанию);
- 2 – результат выполнения должен добавляться в выходной файл, указанный в параметре @output_file_name;
- 4 – перезаписать выходной файл. Существующее содержимое будет уничтожено.
Давайте добавим в работу с именем ‘Тестовая работа 2’ два шага. На первом шаге будет удаляться таблица tbAndrey, а на втором, эта же таблица будет создаваться с помощью оператора SELECT INTO. Создание первого шага для решения данной задачи может выглядеть примерно следующим образом:
EXEC sp_add_jobstep @job_name = 'Тестовая работа 2', @step_name = 'Удаляем таблицу', @subsystem = 'TSQL', @command = 'DROP TABLE tbAndrey', @database_name = 'FlenovSQLBook', @on_success_action = 3, @on_fail_action = 3
Данный шаг будет выполнять команду Transact-SQL, а значит, в параметре @subsystem указываем значение ‘TSQL’. В параметре @command указываем непосредственно SQL команду. Так как по умолчанию запрос будет выполняться в базе данных master, то в параметре @database_name явно указываем свою базу.
Основанная задача работы – создать таблицу tbAndrey и заполнить значениями, но для этого сначала старую таблицу нужно удалить. А что если старой таблицы нет (ее кто-то удалил или вообще ее небыло)? В этом случае все равно работа должна продолжать выполняться, поэтому в параметрах @on_success_action и @on_fail_action указываем значение 3, то есть переход на следующий шаг.
Теперь создадим второй шаг, на котором будет производиться создание таблицы:
EXEC sp_add_jobstep @job_name = 'Тестовая работа 2', @step_name = 'Выбираем Андреев', @subsystem = 'TSQL', @command = 'SELECT * INTO tbAndrey FROM tbPeoples WHERE vcName=''Андрей''', @database_name = 'FlenovSQLBook', @on_success_action = 1, @on_fail_action = 2
В данном случае переход на следующий шаг не ожидается, поэтому завершаем работу с соответствующим кодом.
Когда вы пишете сценарий для работы, вы можете использовать некоторые вспомогательные конструкции, которые во время выполнения будут заменяться на определенные параметры. Во как сказал! Рассмотрим возможные конструкции, и на что они заменяются:
- [A-DBN] – заменяется именем базы данных;
- [A-SVR] – заменяется именем сервера;
- [A-ERR] – номер ошибки;
- [A-SEV] – критичность ошибки;
- [A-MSG] – заменяется текстовым сообщением;
- [DATE] – текущая дата;
- [JOBID] – идентификатор работы;
- [MACH] – имя компьютера;
- [MSSA] – имя сервиса SQLServerAgent;
- [SQLDIR] – директория, в которую установлен SQL сервер;
- [STEPCT] – сколько раз был запущена работа (количество попыток);
- [STEPID] – идентификатор шага;
- [TIME] – текущее время в формате HHMMSS;
- [STRTTM] — время в формате HHMMSS, когда работа была запущена;
- [STRTDT] – дата в формате YYYYMMDD когда работа была запущена.
Будьте внимательны, все конструкции должны заключаться в квадратные скобки, и все они чувствительны к регистру.
Давайте посмотрим, как использовать эти конструкции, а заодно увидим, как можно вставлять новые шаги. Следующим пример не добавляет новый шаг, а вставляет его на первую позицию (параметр @step_id равен 1):
EXEC sp_add_jobstep @job_name = 'Тестовая работа 2', @step_id=1, @step_name = 'Вставляем строку', @subsystem = 'TSQL', @command = 'INSERT INTO tbPeoples (vcName, vcSurname) VALUES(''[MACH]'', ''[STEPID]'')', @database_name = 'FlenovSQLBook', @on_success_action = 3, @on_fail_action = 3В данном примере, в качестве команды в таблицу tbPeoples вставляется строка, в которой имени назначается имя компьютера (конструкция [MACH]), а в качестве фамилии указывается текущий номер шага (конструкция [STEPID]).
Обратите внимание, что в параметре @command, в SQL запросе в параметре VALUES вставляемые в таблицу значения должны быть в одинарных кавычках, а мы указали по две одинарных с каждой стороны. Почему? Дело в том, что вся команда INSERT должна быть в одинарных кавычках:
@command='КОМАНДА'
Если внутри команды используется одинарная кавычка, то сервер воспримет ее как конец команды, и он станет преждевременным. Например:
@command = 'INSERT INTO tbPeoples (vcName, vcSurname) VALUES('[MACH]', '[STEPID]')'В данном случае, сервер поместит в параметр @command только строку:
@command = 'INSERT INTO tbPeoples (vcName, vcSurname) VALUES('Именно этот текст находиться между первыми двумя кавычками. Чтобы этого не произошло, внутри команды нужно продублировать все одинарные кавычки, что и происходит в примере выше.
Автоматически заменяемые во время выполнения конструкции действительно могут упростить разработку работ и иногда оказываются незаменимыми, особенно даты и время выполнения работы.
Давайте создадим еще один шаг, на котором будет выполняться системная команда, и при этом этот шаг мы вставим под номером 2:
EXEC sp_add_jobstep @job_name = 'Тестовая работа 2', @step_id=2, @step_name = 'Системная команда', @subsystem = 'CMDEXEC', @command = 'del c:\text.txt', @on_success_action = 3, @on_fail_action = 3
Так как будет выполняться системная команда, параметр @subsystem устанавливаем в CMDEXEC. В параметре @command для примера я указал команду удаления файла text.txt из корня диска С:. Когда вы будете тестировать пример (о том, как это сделать мы узнаем в разделе 3.5.5), не забудьте создать этот файл, чтобы убедиться в том, что файл после выполнения работы исчезает.
При выполнении системных команд вы должны учитывать следующее:
- Команды выполняются в контексте и с правами MS SQL Server. Это значит, что на экране не будет отображаться результат, даже если вы запускаете программу, которая должна что-то отображать на экране или должна иметь визуальный интерфейс. Чтобы убедиться в этом, можно в качестве системной команды указать calc (калькулятор). После запуска работы, вы ничего не увидите на экране;
- Не запускайте в качестве команды программы с визуальным интерфейсом. Такие программы не видны на экране, поэтому их невозможно будет закрыть, а значит, работа просто зависнет и не сможет завершить работу;
- Будьте аккуратны при задании команд, чтобы их выполнение было конечным, и не произошло зависания всей работы. Например, если задать команду ping -t localhost, то работа будет бесконечно пинговать локальный компьютер. Это приведет к зацикливанию шага и дальнейшее выполнение работы станет невозможным.
Для чего используются уведомления sql server агента
- Главная
- ТЕХНИЧЕСКАЯ
- WINDOWS
- MS SQL
- MS SQL SERVER настройка уведомлений по почте
MS SQL SERVER настройка уведомлений по почте
- размер шрифта уменьшить размер шрифтаувеличить размер шрифта
- Печать
- Эл. почта
Оцените материал
(45 голосов)После настройки и введения в эксплуатацию MS SQL сервера обязательно потребуется настроить ряд регламентных заданий. Эти задания требуются для автоматического обслуживания развёрнутых баз (проверка баз данных, их резервное копирование, обслуживание индексов и т.д.). При долгосрочном использовании баз могут возникнуть ситуации, когда регламентные задачи могут отрабатываться с ошибками (нехватка места для резервных копий, критические ошибки в базах данных и другие).
Для оперативного оповещения об ошибках выполнения регламентных заданий MS SQL можно настроить специальный компонент оповещения Database Mail.
Настройка Компоненты Database Mail
Вначале необходимо настроить профиль Database Mail. Для этого нужно запустить мастер настройки.

В случае первоначальной настройки компонента нужно выбрать первый пункт «Установить компонент Database Mail». После этого подтвердить включение компонента Database Mail.

Далее нужно задать имя профиля и добавить учётную запись SMTP (адрес и настройки сервера отправки писем).

На следующем шаге мастера отметить созданный профиль, как «Открытый» и «Профиль по умолчанию».

Следующий шаг мастера изменений не требует.

После создания профиля желательно выполнить проверку, отправив тестовое письмо.

Добавление оператора оповещений
Теперь требуется создать Операторов (пользователей, которым будут высылаться оповещения).

Для оператора достаточно указать Имя и адрес почты (куда будут высылаться оповещения)

Теперь нужно активировать профиль компонента Database Mail в настройках агента SQL.


Создание задач оповещения
Задача создаётся в виде дополнительного шага (Задача «Уведомление оператора») регламентного задания. Основным вариантом применения будет выполнение шага при неудачном выполнении одной из операций регламентного задания. В задаче уведомления требуется указать оператора, которому будет выслано оповещение, тему и содержание письма.
