SQL Server Agent
SQL Server Agent — это компонент Microsoft SQL Server, предназначенный для автоматизации выполнения административных и служебных задач в реляционной системе управления базами данных. Он представляет собой службу Windows, которая работает в фоновом режиме и позволяет создавать, планировать, управлять и выполнять задания (jobs), а также реагировать на возникающие события и выдавать оповещения. SQL Server Agent является ключевым инструментом для обеспечения непрерывности работы базы данных, периодического обслуживания (такого как резервное копирование и обновление статистики), мониторинга и решения проблем без постоянного вмешательства администратора.
История и версии
SQL Server Agent впервые появился в версии SQL Server 6.5 (выпуск 1996 года) и назывался SQL Executive. В последующих версиях (SQL Server 7.0, 1998 год) он был переименован в SQL Server Agent, а его функциональность была значительно расширена. Начиная с SQL Server 2005 (выпущен в 2005 году), компонент был включён в состав всех выпусков (изданий) продукта, кроме базового Express Edition, который не поддерживает службу SQL Server Agent. В современных версиях (2016, 2019, 2022) SQL Server Agent продолжает развиваться: улучшено взаимодействие с PowerShell, добавлена поддержка runbook и интеграция с Azure DevOps, а также возможность управления заданиями через графический интерфейс SQL Server Management Studio (SSMS) и Transact-SQL.
Функциональные возможности
Основные возможности SQL Server Agent включают:
- Автоматизация заданий (Jobs). Пользователь может создать последовательность шагов (steps) на языке T-SQL, командной строки, PowerShell, ActiveX Script (VBScript, JScript) или Integration Services. Каждый шаг может иметь свою цель: выполнить хранимую процедуру, запустить утилиту командной строки, вернуть результаты в таблицу и т.д.
- Планирование (Schedules). Задание может запускаться по расписанию: один раз в определённое время, ежедневно, еженедельно, ежемесячно, при запуске SQL Server Agent или при определённом событии.
- Оповещения (Alerts). SQL Server Agent может автоматически генерировать оповещения (например, запись в журнал, отправка электронной почты, запуск задания) в ответ на:
- возникновение ошибок с заданным номером (severity level);
- выполнение оператора
RAISERRORс определённым сообщением; - превышение порогов значений производительности (например, длительность выполнения запроса, количество активных блокировок).
- Операторы (Operators). Это учётные записи пользователей (обычно администраторов), которые получают уведомления от SQL Server Agent. Уведомления могут быть отправлены по электронной почте (через Database Mail), пейджеру (устаревший протокол) или в системный журнал.
- Прокси-учётные записи (Proxies). Позволяют заданиям выполняться в контексте безопасности, отличном от владельца задания. Это необходимо, когда шаги задания требуют доступа к сетевым ресурсам или файлам, к которым у основного пользователя нет прав.
- Мониторинг состояния. SQL Server Agent отслеживает состояние службы и может автоматически перезапустить её в случае сбоя.
Компоненты и архитектура
SQL Server Agent состоит из двух основных частей:
- Служба Windows. Запускается автоматически при старте операционной системы (если настроено). Служба может использовать учётную запись
NT Service\SQLSERVERAGENT(начиная с SQL Server 2012) или локальную/доменную учётную запись. Учётная запись службы должна иметь права доступа к файловой системе, реестру, сети и, при необходимости, к Active Directory. - Хранилище объектов. Все задания, расписания, оповещения и операторы хранятся в базах данных SQL Server: в системной базе
msdb(таблицыsysjobs,sysjobsteps,schedules,sysalertsи другие). Архитектура позволяет управлять SQL Server Agent удалённо через SSMS, T-SQL или инструменты командной строки (PowerShell, SQLCMD).
Управление заданиями
Создание задания
Задание создаётся с помощью:
- графического интерфейса SSMS (пункт «Агент SQL Server» -> «Задания»);
- хранимых процедур (например,
sp_add_job,sp_add_jobstep); - модуля SQLPS (
Invoke-SqlCmd,Add-SqlAgentJob).
Пример базового T-SQL скрипта для создания задания, выполняющего резервное копирование базы данных:
``sql USE msdb; GO EXEC dbo.sp_add_job @job_name = N'Backup_AdventureWorks'; EXEC dbo.sp_add_jobstep @job_name = N'Backup_AdventureWorks', @step_name = N'Backup_Data', @subsystem = N'TSQL', @command = N'BACKUP DATABASE AdventureWorks TO DISK = ''D:\Backups\AdventureWorks.bak'''; EXEC dbo.sp_add_schedule @schedule_name = N'Daily_Backup', @freq_type = 4, -- ежедневно @active_start_time = 220000; -- 22:00 EXEC dbo.sp_attach_schedule @job_name = N'Backup_AdventureWorks', @schedule_name = N'Daily_Backup'; EXEC dbo.sp_add_jobserver @job_name = N'Backup_AdventureWorks'; ``
Типы шагов заданий
Шаги заданий могут быть следующих типов (subsystem):
- TSQL — выполнение кода Transact-SQL.
- CmdExec — выполнение команды операционной системы (например,
osql,bcp,powershell.exe). - PowerShell — выполнение PowerShell-скриптов.
- ActiveX Script — выполнение VBScript или JScript (устаревший).
- Integration Services Package — выполнение пакетов SSIS.
- Analysis Services Command — выполнение команд многомерных выражений (MDX) или языка запросов Data Mining.
- Replication — выполнение заданий репликации.
Управление выполнением
Для каждого шага можно задать логику продолжения при успехе (перейти к следующему шагу, завершить задание с успехом) и при ошибке (перейти к другому шагу, завершить с ошибкой, попробовать снова). Задания могут выполняться последовательно, параллельно (ограниченно) или в режиме ветвления.
Оповещения и уведомления
SQL Server Agent позволяет настроить оповещения, которые активируются при возникновении определённых событий. Например:
- Оповещение по номеру ошибки. Если возникает ошибка с кодом 823 (ошибка ввода-вывода), SQL Server Agent может отправить письмо администратору.
- Оповещение по уровню серьезности (severity). Уровни от 1 до 25 (от простых предупреждений до фатальных ошибок).
- Оповещение по сообщению RAISERROR. Если в коде T-SQL встречается
RAISERROR (N'My custom error', 16, 1) WITH LOG, SQL Server Agent может запустить задание или отправить уведомление. - Оповещение по производительности (Performance Condition Alert). Например, если средняя загрузка ЦП SQL Server превышает 90% в течение 5 минут.
Уведомления могут быть отправлены:
- по электронной почте (через Database Mail);
- в журнал событий Windows;
- на пейджер (устаревшая функция).
Безопасность
SQL Server Agent работает в контексте безопасности Windows. Для выполнения заданий (особенно с шагами CmdExec или PowerShell) требуется, чтобы учётная запись службы имела соответствующие права. Прокси-учётные записи позволяют делегировать выполнение шагов другому пользователю, не давая ему доступ к службе напрямую.
Разграничение доступа к управлению SQL Server Agent осуществляется через роли базы данных msdb:
SQLAgentUserRole— может управлять только своими собственными заданиями.SQLAgentReaderRole— может просматривать все задания.SQLAgentOperatorRole— может включать/отключать задания и изменять их свойства.
Ограничения и особенности
- SQL Server Agent не входит в состав SQL Server Express Edition. Для Express Edition автоматизация возможна только через внешние планировщики (например, Task Scheduler Windows).
- В кластерных средах (Always On Failover Cluster Instance) служба SQL Server Agent должна быть настроена для автоматического перемещения вместе с ролью кластера.
- В среде Availability Group (Always On) задания SQL Server Agent могут выполняться только на первичной реплике; для выполнения на всех репликах необходимо создавать отдельные задания на каждой.
- Для работы Database Mail требуется настроенный профиль почтового сервера SMTP.
Применение
SQL Server Agent широко используется в следующих сценариях:
- Регулярное резервное копирование баз данных (полное, дифференциальное, журнала транзакций).
- Обслуживание баз данных: перестроение индексов, обновление статистики, проверка целостности (DBCC CHECKDB).
- Автоматическая обработка данных: загрузка данных из файлов, трансформация и выгрузка (ETL).
- Мониторинг состояния системы, включая свободное место на дисках, блокировки, время выполнения запросов.
- Запуск внешних скриптов и утилит по расписанию.
Альтернативы
Существуют и другие средства автоматизации для SQL Server:
- SQL Server Integration Services (SSIS) — мощный инструмент ETL, но не предназначен специально для администрирования.
- Task Scheduler Windows — может запускать командные файлы или PowerShell скрипты, но не имеет глубокой интеграции с SQL Server (например, не может отслеживать события SQL Server или передавать результаты логирования).
- PowerShell с модулем SQLPS/SqlServer — позволяет создавать скрипты, которые можно запускать по расписанию через Task Scheduler, но опять же без встроенных оповещений и управления из среды SQL Server.
Интересные факты
- В ранних версиях SQL Server (до 6.5) автоматизация отсутствовала; задания выполнялись администраторами вручную или через скрипты
osql. - SQL Server Agent может быть настроен на отправку уведомлений не только администратору, но и в систему мониторинга (например, через SNMP trap), хотя это требует дополнительной настройки.
- В SQL Server 2008 появилась возможность запускать задания на нескольких серверах в рамках многосерверного администрирования (Multiserver Administration), где один сервер (master) управляет заданиями на нескольких целевых (target) серверах.
Источники
- Microsoft Learn: SQL Server Agent
- Документация по SQL Server Database Engine
- "SQL Server 2019 Administration Inside Out" — William Assaf, Randolph West, Sven Aelterman
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →