Поделиться через


Автоматизация задач управления с помощью заданий Агента SQL в Управляемом экземпляре SQL Azure

Область применения: Управляемый экземпляр SQL Azure

С помощью агента SQL Server в Управляемом экземпляре AzureSQL можно создавать и планировать задания, которые могут периодически выполняться в одной или нескольких базах данных. Эти задания агента SQL выполняют запросы Transact-SQL (T-SQL) и выполняют задачи обслуживания. В этой статье рассматривается использование Агента SQL для Управляемого экземпляра SQL.

Примечание.

Агент SQL недоступен в Базе данных SQL Azure или Azure Synapse Analytics. Вместо этого мы рекомендуем автоматизацию заданий с помощью Elastic Jobs.

Когда следует использовать задания Агента SQL

Существует несколько сценариев, в которых можно использовать задание Агента SQL:

  • Автоматизация задач управления, а также их добавление в расписание для запуска каждый рабочий день, в нерабочие часы и т. д.
    • Внедрение изменений схемы, управление учетными данными, сбор данных о производительности или сбор телеметрических данных клиента.
    • Обновите справочные данные (сведения, общие для всех баз данных) и загрузите данные из хранилища BLOB-объектов Azure. См. BULK_INSERT для получения сведений об аргументах, используемых для проверки подлинности в хранилище Blob Azure.
    • Общие задачи обслуживания, в том числе DBCC CHECKDB для обеспечения целостности данных или обслуживание индекса для повышения производительности запросов. Настройка заданий для выполнения в коллекции баз данных на постоянной основе, например в часы наименьшей нагрузки.
    • Сбор результатов запроса из набора баз данных в центральную таблицу на постоянной основе. Запросы производительности можно постоянно выполнять и настраивать для активации дополнительных задач для выполнения.
  • Сбор данных для создания отчетов
    • Сбор данных из коллекции баз данных в одну целевую таблицу.
    • Выполняйте запросы обработки данных с повышенным временем выполнения для большого набора баз данных, например коллекции телеметрии клиентов. Результаты собираются в одну целевую таблицу для дальнейшего анализа.
  • Перемещения данных
    • Создание заданий, которые реплицируют изменения, внесенные в базах данных, в другие базы данных, или собирают обновления, выполняемые в удаленных базах данных, и применяют изменения в базе данных.
    • Создание заданий, загружающих данные в базы данных и обратно, с помощью SQL Server Integration Services (SSIS).

Задания агента SQL в Управляемом экземпляре SQL

Агент SQL Server выполняет задания агента SQL, используемые для автоматизации задач в Управляемом экземпляре SQL.

Задания агента SQL — это указанная серия скриптов T-SQL для базы данных. Используйте задания, чтобы определить задачу администрирования, которую можно запустить один или несколько раз и отслеживать ее успешное выполнение или сбой.

Задание может выполняться на одном локальном экземпляре или в нескольких удаленных экземплярах. Задание агента SQL — это внутренний компонент ядра СУБД, который выполняется в службе управляемого экземпляра SQL.

Существует несколько ключевых понятий в заданиях агента SQL:

  • Шаги задания — это набор одного или нескольких шагов, которые должны выполняться в задании. Для каждого шага задания можно определить стратегию повторных попыток и действие, которое должно произойти, если шаг задания выполнен успешно или завершается сбоем.
  • Расписания определяют, когда должно выполняться задание.
  • Уведомления позволяют определить правила, используемые для уведомления операторов по электронной почте после завершения задания.

Шаги задания

Шаги задания агента SQL — это последовательности действий, которые должен выполнять агент SQL. Каждый шаг имеет следующий шаг, который должен выполняться, если шаг завершается успешно или завершается сбоем, и заданное число повторных попыток, если это не удается.

Агент SQL позволяет создавать различные типы шагов задания.

  • Transact-SQL этапы задания, выполняющие один пакет Transact-SQL для базы данных.
  • Команда ОС или шаги PowerShell, которые могут выполнять настраиваемый скрипт ОС.
  • Действия задания SSIS, позволяющие загружать данные с помощью среды выполнения SSIS.
  • Шаги репликации, которые могут публиковать изменения из базы данных в другие базы данных.

Репликация транзакций может реплицировать изменения из таблиц в другие базы данных в Управляемом экземпляре SQL Azure, Базе данных SQL Azure или SQL Server. Дополнительные сведения см. в разделе Настройка репликации в Управляемом экземпляре SQL Azure.

Другие типы шагов задания, такие как репликация слиянием и средство чтения очередей, в настоящее время не поддерживаются в Управляемом экземпляре SQL.

Расписания заданий

Расписание определяет время выполнения задания. Несколько заданий могут выполняться по тому же расписанию, а несколько расписаний могут применяться для одного задания.

Расписание может определить следующие условия для времени выполнения задания:

  • Запустите каждый раз, когда запускается агент SQL Server. Задание активируется после каждой отказоустойчивости.
  • Запустите один раз с определенной датой и временем, которая полезна для отложенного выполнения задания.
  • Начните с повторяющегося расписания.

Дополнительные сведения о планировании задания Агента SQL см. в статье Schedule a Job (Планирование задания).

Примечание.

Управляемый экземпляр SQL Azure в настоящее время не позволяет запускать задание при простое ЦП.

Уведомления о вакансиях

Задания агента SQL позволяют получать уведомления об успешном завершении задания или в случае возникновения ошибки. Уведомления можно получать по электронной почте.

Сначала необходимо настроить функцию Database Mail в Управляемом экземпляре SQL, если она еще не включена:

GO
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE

В качестве примера упражнения настройте учетную запись электронной почты для отправки уведомлений по электронной почте. Назначьте учетную запись профилю электронной почты с именем AzureManagedInstance_dbmail_profile. Чтобы отправлять электронные письма с помощью заданий SQL Agent в SQL Managed Instance, необходимо иметь профиль с именем AzureManagedInstance_dbmail_profile. В противном случае управляемый экземпляр SQL не может отправлять сообщения электронной почты через агент SQL.

Примечание.

Для почтового сервера мы рекомендуем использовать службы ретрансляции SMTP с проверкой подлинности для отправки электронной почты. Обычно эти службы ретрансляции подключаются через порты 25 или 587 для подключений TLS или порт 465 для SSL-подключений, однако компонент Database Mail можно настроить для использования любого порта. Для этих портов требуется новое правило для исходящего трафика в группе безопасности сети вашего управляемого экземпляра. Эти службы используются для сохранения репутации IP-адреса и домена, чтобы свести к минимуму вероятность того, что внешние домены будут отклонять ваши сообщения или помещать их в папку "Спам". Рассмотрим службу ретрансляции SMTP, уже прошедшую проверку подлинности на локальных серверах. SendGrid — одна из таких служб ретрансляции SMTP в Azure, но есть и другие.

Используйте следующий пример скрипта, чтобы создать учетную запись Database Mail и профиль, а затем связать их вместе:

-- Create a Database Mail account
EXECUTE msdb.dbo.sysmail_add_account_sp
    @account_name = 'SQL Agent Account',
    @description = 'Mail account for Azure SQL Managed Instance SQL Agent system.',
    @email_address = '$(loginEmail)',
    @display_name = 'SQL Agent Account',
    @mailserver_name = '$(mailserver)' ,
    @username = '$(loginEmail)' ,
    @password = '$(password)';

-- Create a Database Mail profile
EXECUTE msdb.dbo.sysmail_add_profile_sp
    @profile_name = 'AzureManagedInstance_dbmail_profile',
    @description = 'E-mail profile used for messages sent by Managed Instance SQL Agent.';

-- Add the account to the profile
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
    @profile_name = 'AzureManagedInstance_dbmail_profile',
    @account_name = 'SQL Agent Account',
    @sequence_number = 1;

Проверьте конфигурацию Database Mail с помощью T-SQL с помощью системной хранимой процедуры sp_send_dbmail :

DECLARE @body VARCHAR(4000) = 'The email is sent from ' + @@SERVERNAME;
EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'AzureManagedInstance_dbmail_profile',
    @recipients = 'ADD YOUR EMAIL HERE',
    @body = 'Add some text',
    @subject = 'Azure SQL Instance - test email';

Вы можете уведомить оператора, что с вашими заданиями агента SQL что-то произошло. Оператор определяет контактные сведения о лице, ответственном за обслуживание одного или нескольких экземпляров в Управляемом экземпляре SQL. Иногда обязанности оператора возлагаются на одно лицо.

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

Создать операторы можно с помощью SQL Server Management Studio (SSMS) или сценария Transact-SQL, показанного в следующем примере:

EXEC msdb.dbo.sp_add_operator
    @name=N'AzureSQLTeam',
    @enabled=1,
    @email_address=N'[email protected]';

Подтвердите успешную или неудачную отправку электронного письма с помощью журнала Database Mail в SSMS.

Вы можете изменить любое задание агента SQL и назначить операторы, которые уведомляются по электронной почте, если задание завершается, завершается сбоем или завершается успешно. Измените задание с помощью SSMS или следующего скрипта T-SQL:

EXEC msdb.dbo.sp_update_job @job_name=N'Load data using SSIS',
    @notify_level_email=3, -- Options are: 1 on succeed, 2 on failure, 3 on complete
    @notify_email_operator_name=N'AzureSQLTeam';

История работы

Управляемый экземпляр SQL в настоящее время не позволяет изменять свойства агента SQL, так как они хранятся в базовых значениях реестра. Это означает, что параметры настройки политики сохранения агента для записей истории заданий установлены по умолчанию в размере 1000 общих записей и максимум 100 записей истории на задание.

Дополнительные сведения см. в разделе Просмотр журнала заданий Агента SQL.

Обновлено членство в ролях базы данных

Если пользователи, связанные с учетными записями nonsysadmin, добавляются в любую из трех фиксированных ролей базы данных агента SQL в системной базе данных msdb, возникает проблема, когда требуется явное предоставление EXECUTE разрешений трем системным хранимым процедурам в базе данных master. Если эта проблема возникла, отображается сообщение The EXECUTE permission was denied on the object <object_name> (Microsoft SQL Server, Error: 229) об ошибке.

После добавления пользователей в предопределенную роль базы данных агента SQL (SQLAgentUserRole, SQLAgentReaderRole или SQLAgentOperatorRole) в msdb, для каждого логина пользователя, добавленного в эти роли, выполните следующий скрипт T-SQL, чтобы явно предоставить EXECUTE разрешения системным хранимым процедурам. В этом примере предполагается, что имя пользователя и имя входа совпадают:

USE [master]
GO
CREATE USER [login_name] FOR LOGIN [login_name];
GO
GRANT EXECUTE ON master.dbo.xp_sqlagent_enum_jobs TO [login_name];
GRANT EXECUTE ON master.dbo.xp_sqlagent_is_starting TO [login_name];
GRANT EXECUTE ON master.dbo.xp_sqlagent_notify TO [login_name];

Ограничения заданий Агента SQL в управляемом экземпляре SQL

Следует отметить различия между агентом SQL, доступным в SQL Server и как частью управляемого экземпляра SQL. Дополнительные сведения о различиях в поддерживаемых функциях между SQL Server и Управляемым экземпляром SQL см. в статье Отличия T-SQL Управляемого экземпляра SQL Azure от SQL Server.

Некоторые функции агента SQL, доступные в SQL Server, не поддерживаются в управляемом экземпляре SQL:

  • Параметры агента SQL Server доступны только для чтения.
    • Системная хранимая процедура sp_set_agent_properties не поддерживается.
  • В настоящее время включение или отключение агента SQL не поддерживается. Агент SQL работает всегда.
  • Хотя уведомления частично поддерживаются, следующие элементы не поддерживаются:
    • Пейджер не поддерживается.
    • NetSend не поддерживается.
    • Оповещения не поддерживаются.
  • Прокси-серверы не поддерживаются.
  • Журнал событий не поддерживается.
  • Триггер расписания заданий на основе простоя ЦП не поддерживается.
  • Шаги задания для репликации слиянием не поддерживаются.
  • Средство чтения очередей не поддерживается.
  • Службы Analysis Services не поддерживаются.
  • Запуск скрипта, хранящегося в качестве файла на диске, не поддерживается.
  • Импорт внешних модулей, таких как dbatools и dbachecks, не поддерживается.
  • PowerShell Core не поддерживается.