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

База данных msdb

msdb — это системная база данных в составе СУБД Microsoft SQL Server, предназначенная для хранения служебной информации, связанной с планированием задач (агент SQL Server), резервным копированием и восстановлением, оперативной репликацией, а также с историей выполнения операций и обслуживания сервера. Относится к числу системных баз данных, наряду с master, model, tempdb и Resource.

Назначение и роль

Основная функция msdb — обеспечение работы компонента SQL Server Agent (агент SQL Server), который отвечает за автоматизацию административных задач. В этой базе хранятся:

  • Определения заданий (jobs), их расписания (schedules), шаги (job steps) и уведомления (notifications).
  • Истории выполнения заданий и операторов (operators) — получателей уведомлений.
  • Информация об операциях резервного копирования и восстановления, включая историю и медиа-наборы.
  • Данные о планах обслуживания (maintenance plans) и их выполнении.
  • Параметры репликации (если репликация настроена на сервере).
  • Сведения о почтовых профилях Database Mail.
  • Записи о событиях, записанных в журнал SQL Server (например, через sp_add_alert).

Таким образом, msdb служит центральным хранилищем метаданных для автоматизации, мониторинга и администрирования экземпляра SQL Server.

Структура и содержимое

База данных msdb состоит из множества системных таблиц, представлений и хранимых процедур, разделённых по функциональным областям. Основные группы объектов:

### Таблицы агента SQL Server

  • sysjobs — содержит определения всех заданий.
  • sysjobsteps — шаги заданий (команды T-SQL, PowerShell, ActiveX и др.).
  • sysschedules — расписания запуска заданий.
  • sysjobhistory — история выполнения заданий.
  • sysoperatorsоператоры (получатели уведомлений по электронной почте, пейджеру или через net send).

### Таблицы резервного копирования и восстановления

  • backupset — информация о каждом наборе резервных копий (тип, дата, размер, устройство).
  • backupmediafamily — сведения о файлах или устройствах, на которые записана резервная копия.
  • backupfile — перечень файлов данных и журналов, включённых в резервную копию.
  • restorehistory — история операций восстановления.

### Таблицы Database Mail

  • sysmail_mailitems — отправленные и ожидающие отправки сообщения.
  • sysmail_log — журнал работы Database Mail.
  • sysmail_principalprofile — привязка профилей к пользователям.

### Таблицы планов обслуживания

  • sysmaintplan_plans — определения планов обслуживания.
  • sysmaintplan_subplans — подпланы (наборы задач).
  • sysmaintplan_log — журнал выполнения планов обслуживания.

### Таблицы репликации

  • MSreplication_options — глобальные параметры репликации.
  • MSagent_parameters — параметры агентов репликации.
  • MSdistribution_agents — информация об агентах распространения.

История и развитие

База данных msdb появилась в SQL Server 6.5 (1996 год) вместе с компонентом SQL Server Agent. В ранних версиях она была менее структурированной и содержала только базовые таблицы для заданий. Начиная с SQL Server 2000, в msdb были добавлены таблицы для резервного копирования, что позволило централизованно хранить историю операций. В SQL Server 2005 появилась поддержка Database Mail, а также расширены возможности мониторинга через системные представления. В версии SQL Server 2012 в msdb были добавлены таблицы для Always On Availability Groups (например, sys.availability_groups). В SQL Server 2016 и 2017 годах функциональность msdb была расширена для поддержки новых возможностей, таких как PolyBase и управляемые экземпляры.

Управление и обслуживание

### Восстановление msdb

msdb, как и другие системные базы данных, может быть восстановлена из резервной копии в случае повреждения. Однако процедура восстановления требует осторожности, так как msdb содержит критически важные для работы сервера данные. Восстановление msdb выполняется в однопользовательском режиме с помощью команды RESTORE DATABASE. После восстановления может потребоваться перезапуск SQL Server Agent.

### Очистка истории

Со временем таблицы msdb, особенно sysjobhistory и backupset, могут разрастаться, что влияет на производительность. Для автоматической очистки используются:

  • Планы обслуживания (Maintenance Cleanup Task).
  • Хранимая процедура sp_delete_backuphistory — удаляет устаревшие записи о резервных копиях.
  • Хранимая процедура sp_purge_jobhistory — удаляет историю заданий старше указанного срока.
  • Параметр @maximum_history_rows для задания syspolicy_purge_history.

### Резервное копирование

msdb рекомендуется включать в план регулярного резервного копирования, так как потеря данных этой базы может привести к необходимости заново настраивать задания, уведомления и планы обслуживания. Резервное копирование msdb выполняется стандартной командой BACKUP DATABASE msdb. Восстановление msdb из резервной копии возможно только на том же экземпляре SQL Server с той же версией и конфигурацией.

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

Доступ к msdb регулируется через роли базы данных:

  • db_owner — полный доступ.
  • SQLAgentUserRole — может создавать и управлять своими заданиями.
  • SQLAgentReaderRole — может просматривать все задания.
  • SQLAgentOperatorRole — может выполнять и останавливать задания, а также просматривать историю.

Кроме того, для выполнения операций резервного копирования и восстановления требуются соответствующие разрешения (например, BACKUP DATABASE).

Взаимодействие с другими системными базами

msdb тесно связана с другими системными базами:

  • master — содержит информацию о конфигурации сервера, в том числе о расположении файлов msdb.
  • tempdb — используется для временных данных при выполнении заданий и операций обслуживания.
  • model — служит шаблоном для создания новых баз данных, но не влияет напрямую на msdb.

При запуске SQL Server Agent происходит чтение данных из msdb для загрузки расписаний и заданий. Если msdb недоступна или повреждена, агент не запускается.

Типичные проблемы и их решение

  • Разрастание таблицы sysjobhistory — приводит к замедлению работы агента. Решение: настройка автоматической очистки через процедуру sp_purge_jobhistory или через план обслуживания.
  • Повреждение msdb — может произойти из-за сбоя диска или ошибки ввода-вывода. Решение: восстановление из резервной копии или, в крайнем случае, воссоздание msdb с помощью скрипта instmsdb.sql (находится в каталоге установки SQL Server).
  • Конфликт блокировок — при одновременном выполнении множества заданий может возникнуть взаимная блокировка. Решение: оптимизация расписаний и использование изоляции снимков состояния (snapshot isolation).

Примечания

  • Размер msdb по умолчанию составляет около 20–30 МБ, но может значительно увеличиваться при активном использовании агента и резервного копирования.
  • В SQL Server Express Edition функциональность msdb ограничена: отсутствует поддержка SQL Server Agent, поэтому задания и уведомления не создаются.
  • msdb не поддерживает репликацию в традиционном понимании, но может содержать метаданные для репликации, настроенной на сервере.

Источники

  1. Microsoft Docs — «msdb Database» (SQL Server documentation).
  2. Microsoft Docs — «System Databases» (SQL Server documentation).
  3. Microsoft Docs — «Backup and Restore of System Databases (SQL Server)».
  4. Microsoft Docs — «SQL Server Agent Tables (Transact-SQL)».
  5. Microsoft Docs — «Database Mail Configuration and Troubleshooting».
  6. Microsoft Docs — «Maintenance Plans in SQL Server».

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →