Открыть сервис

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 состоит из двух основных частей:

  1. Служба Windows. Запускается автоматически при старте операционной системы (если настроено). Служба может использовать учётную запись NT Service\SQLSERVERAGENT (начиная с SQL Server 2012) или локальную/доменную учётную запись. Учётная запись службы должна иметь права доступа к файловой системе, реестру, сети и, при необходимости, к Active Directory.
  2. Хранилище объектов. Все задания, расписания, оповещения и операторы хранятся в базах данных 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 минут.

Уведомления могут быть отправлены:

Безопасность

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 →