Automatyzowanie zadań zarządzania przy użyciu zadań agenta SQL w usłudze Azure SQL Managed Instance

Dotyczy:Azure SQL Managed Instance

Za pomocą programu SQL Server Agent w programie SQL Server i usłudze SQL Managed Instance można tworzyć i planować zadania, które mogą być okresowo wykonywane względem jednej lub wielu baz danych w celu uruchamiania zapytań języka Transact-SQL (T-SQL) i wykonywania zadań konserwacji. W tym artykule opisano korzystanie z agenta SQL dla usługi SQL Managed Instance.

Uwaga

Agent SQL nie jest dostępny w usłudze Azure SQL Database lub Azure Synapse Analytics. Zamiast tego zalecamy automatyzację zadań za pomocą zadań elastycznych.

Kiedy należy używać zadań agenta SQL

Istnieje kilka scenariuszy, w których można użyć zadań agenta SQL:

  • Automatyzowanie zadań zarządzania i planowanie ich uruchamiania co dzień powszedni, po godzinach itp.
    • Wdrażanie zmian schematu, zarządzanie poświadczeniami i zbieranie danych o wydajności lub danych telemetrycznych dotyczących dzierżaw (klientów).
    • Aktualizowanie danych referencyjnych (informacje wspólne dla wszystkich baz danych) i ładowanie danych z usługi Azure Blob Storage. Firma Microsoft zaleca korzystanie z uwierzytelniania SYGNATURY DOSTĘPU WSPÓŁDZIELONEGO w celu uwierzytelniania w usłudze Azure Blob Storage.
    • Typowe zadania konserwacji, w tym DBCC CHECKDB w celu zapewnienia integralności danych lub konserwacji indeksu w celu zwiększenia wydajności zapytań. Konfigurowanie zadań w celu cyklicznego wykonywania w kolekcji baz danych, na przykład poza godzinami szczytu.
    • Zbieranie na bieżąco wyników zapytań z zestawu baz danych w centralnej tabeli. Zapytania dotyczące wydajności mogą być nieprzerwanie wykonywane i skonfigurowane do wyzwalania dodatkowych zadań do wykonania.
  • Zbieranie danych na potrzeby raportowania
    • Agregowanie danych z kolekcji baz danych do pojedynczej tabeli docelowej.
    • Wykonywanie dłużej działających zapytań dotyczących przetwarzania danych w ramach dużego zestawu baz danych, na przykład w celu zbierania telemetrii klienta. Wyniki są zbierane w pojedynczej tabeli docelowej na potrzeby dalszej analizy.
  • Przenoszenie danych
    • Tworzenie zadań replikujących zmiany wprowadzone w bazach danych do innych baz danych lub zbieranie aktualizacji w zdalnych bazach danych i stosowanie zmian w bazie danych.
    • Tworzenie zadań polegających na ładowaniu zadań z lub do baz danych przy użyciu usług SQL Server Integration Services (SSIS).

Zadania agenta SQL w usłudze SQL Managed Instance

Zadania agenta SQL są wykonywane przez usługę SQL Agent, która nadal jest używana do automatyzacji zadań w programie SQL Server i usłudze SQL Managed Instance.

Zadania agenta SQL to określona seria skryptów języka T-SQL względem bazy danych. Zadania pozwalają na zdefiniowanie zadania administracyjnego, które można uruchomić jeden lub więcej razy i monitorować pod kątem powodzenia lub niepowodzenia.

Zadanie można uruchomić na jednym serwerze lokalnym lub na wielu serwerach zdalnych. Zadania agenta SQL to wewnętrzny składnik aparatu bazy danych wykonywany w usłudze SQL Managed Instance.

Istnieje kilka podstawowych pojęć dotyczących zadań agenta SQL:

  • Kroki zadania ustawiają co najmniej jeden krok, który ma zostać wykonany w ramach zadania. Dla każdego kroku zadania można zdefiniować strategię ponawiania próby i akcję do wykonania, gdy krok zadania zakończy się powodzeniem lub niepowodzeniem.
  • Harmonogramy definiują, kiedy należy wykonać zadanie.
  • Powiadomienia umożliwiają definiowanie reguł, które będą używane do powiadamiania operatorów za pośrednictwem poczty e-mail po zakończeniu zadania.

Kroki zdania

Kroki zadania agenta SQL to sekwencje akcji, które mają być wykonywane przez agenta SQL. Każdy krok ma następny krok, który ma zostać wykonany, jeśli krok zakończy się pomyślnie lub nie powiedzie się. W razie niepowodzenia jest określana liczba ponownych prób.

Agent SQL umożliwia tworzenie różnych typów kroków zadania, takich jak kroki zadania języka Transact-SQL, które wykonują pojedynczą partię Transact-SQL względem bazy danych, lub kroki polecenia systemu operacyjnego/programu PowerShell, które mogą wykonywać niestandardowy skrypt systemu operacyjnego, kroki zadania usług SSIS, które umożliwiają ładowanie danych przy użyciu środowiska uruchomieniowego usług SSIS lub kroki replikacji , które mogą publikować zmiany z bazy danych do innych baz danych.

Uwaga

Aby uzyskać więcej informacji na temat korzystania ze środowiska Azure SSIS Integration Runtime z bazą danych SSISDB hostowanej przez usługę SQL Managed Instance, zobacz Używanie usługi Azure SQL Managed Instance z usługami SQL Server Integration Services (SSIS) w usłudze Azure Data Factory.

Replikacja transakcyjna może replikować zmiany z tabel do innych baz danych w usłudze SQL Managed Instance, usłudze Azure SQL Database lub programie SQL Server. Aby uzyskać więcej informacji, zobacz Konfigurowanie replikacji w usłudze Azure SQL Managed Instance.

Inne typy kroków zadań nie są obecnie obsługiwane w usłudze SQL Managed Instance, takich jak replikacja scalania i czytnik kolejek.

Harmonogramy zadań

Harmonogram określa moment uruchomienia zadania. W ramach tego samego harmonogramu można uruchomić więcej niż jedno zadanie, a do tego samego zadania można zastosować więcej niż jeden harmonogram.

W harmonogramie można zdefiniować następujące warunki związane z czasem wykonywania zadania:

  • Zawsze, gdy program SQL Server Agent jest uruchamiany. Zadanie jest aktywowane po każdym przejściu w tryb failover.
  • Jeden raz w określonym dniu i o określonej godzinie — ta opcja jest przydatna w przypadku opóźnionego wykonywania zadania.
  • Zgodnie z harmonogramem cyklicznym.

Aby uzyskać więcej informacji na temat planowania zadania agenta SQL, zobacz Planowanie zadania.

Uwaga

Usługa Azure SQL Managed Instance obecnie nie umożliwia uruchamiania zadania, gdy procesor jest bezczynny.

Powiadomienia dotyczące zadań

Zadania agenta SQL umożliwiają otrzymywanie powiadomień, gdy zadanie zakończy się pomyślnie lub zakończy się niepowodzeniem. Powiadomienia można otrzymywać za pośrednictwem poczty e-mail.

Jeśli nie jest jeszcze włączona, najpierw należy skonfigurować funkcję Poczta bazy danych w usłudze SQL Managed Instance:

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

Na przykład skonfiguruj konto e-mail, które będzie używane do wysyłania powiadomień e-mail. Przypisz konto do profilu poczty e-mail o nazwie AzureManagedInstance_dbmail_profile. Aby wysyłać wiadomości e-mail przy użyciu zadań agenta SQL w usłudze SQL Managed Instance, powinien istnieć profil, który musi mieć nazwę AzureManagedInstance_dbmail_profile. W przeciwnym razie usługa SQL Managed Instance nie będzie mogła wysyłać wiadomości e-mail za pośrednictwem programu SQL Agent.

Uwaga

W przypadku serwera poczty zalecamy wysyłanie wiadomości e-mail przy użyciu uwierzytelnionych usług przekazywania SMTP. Te usługi przekazywania zwykle łączą się za pośrednictwem portów TCP 25 lub 587 dla połączeń za pośrednictwem protokołu TLS lub portu 465 dla połączeń SSL, jednak poczta bazy danych może być skonfigurowana do używania dowolnego portu. Te porty wymagają nowej reguły ruchu wychodzącego w sieciowej grupie zabezpieczeń wystąpienia zarządzanego. Te usługi są używane do utrzymania reputacji adresów IP i domeny w celu zminimalizowania możliwości, że domeny zewnętrzne odrzucają wiadomości lub umieszczają je w folderze SPAM. Rozważ uwierzytelnienie usługi przekazywania SMTP już na serwerach lokalnych. Na platformie Azure usługa SendGrid jest jedną z takich usług przekazywania SMTP, ale istnieją inne.

Użyj następującego przykładowego skryptu, aby utworzyć konto i profil poczty bazy danych, a następnie skojarzyć je razem:

-- 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;

Przetestuj konfigurację poczty bazy danych za pomocą języka T-SQL przy użyciu procedury składowanej systemu sp_send_db_mail :

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';  

Możesz powiadomić operatora, że wystąpił problem z zadaniami agenta SQL. Operator definiuje informacje kontaktowe dla osoby odpowiedzialnej za konserwację co najmniej jednego wystąpienia w usłudze SQL Managed Instance. Czasami obowiązki operatora są przypisywane do jednej osoby.

W systemach z wieloma wystąpieniami w usłudze SQL Managed Instance lub SQL Server wiele osób może współdzielić obowiązki operatora. Operator nie zawiera informacji o zabezpieczeniach i nie definiuje podmiotu zabezpieczeń. W idealnym przypadku operator nie jest osobą, której obowiązki mogą ulec zmianie, ale grupa dystrybucyjna poczty e-mail.

Operatory można tworzyć przy użyciu programu SQL Server Management Studio (SSMS) lub skryptu Języka Transact-SQL pokazanego w poniższym przykładzie:

EXEC msdb.dbo.sp_add_operator
    @name=N'AzureSQLTeam',
    @enabled=1,
    @email_address=N'AzureSQLTeamn@contoso.com';

Potwierdź powodzenie lub niepowodzenie wiadomości e-mail za pośrednictwem dziennika poczty bazy danych w programie SSMS.

Następnie można zmodyfikować dowolne zadanie agenta SQL i przypisać operatory, które będą powiadamiane za pośrednictwem poczty e-mail, jeśli zadanie zakończy się, zakończy się niepowodzeniem lub powiedzie się przy użyciu programu SSMS lub następującego skryptu języka 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';

Historia zadania

Usługa SQL Managed Instance obecnie nie zezwala na zmianę żadnych właściwości agenta SQL, ponieważ są one przechowywane w podstawowych wartościach rejestru. Oznacza to, że opcje dostosowywania zasad przechowywania agenta dla rekordów historii zadań są stałe domyślnie 1000 wszystkich rekordów i maksymalnie 100 rekordów historii na zadanie.

Aby uzyskać więcej informacji, zobacz Wyświetlanie historii zadań agenta SQL.

Naprawiono członkostwo w roli bazy danych

Jeśli użytkownicy połączeni z identyfikatorami logowania innych niż sysadmin zostaną dodani do dowolnej z trzech stałych ról bazy danych programu SQL Agent w systemowej msdb bazie danych, istnieje problem, w którym jawne uprawnienia EXECUTE muszą zostać przyznane trzem systemowym procedurom składowanych w master bazie danych. Jeśli wystąpi ten problem, zostanie wyświetlony komunikat The EXECUTE permission was denied on the object <object_name> (Microsoft SQL Server, Error: 229) o błędzie.

Po dodaniu użytkowników do stałej roli bazy danych programu SQL Agent (SQLAgentUserRole, SQLAgentReaderRole lub SQLAgentOperatorRole) w programie msdbdla każdego z identyfikatorów logowania użytkownika dodanych do tych ról wykonaj poniższy skrypt języka T-SQL, aby jawnie udzielić uprawnień EXECUTE do wymienionych procedur składowanych systemu. W tym przykładzie przyjęto założenie, że nazwa użytkownika i nazwa logowania są takie same:

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];

Ograniczenia zadań agenta SQL w usłudze SQL Managed Instance

Warto zauważyć różnice między agentem SQL dostępnym w programie SQL Server i w ramach usługi SQL Managed Instance. Aby uzyskać więcej informacji na temat obsługiwanych różnic funkcji między programem SQL Server i usługą SQL Managed Instance, zobacz Różnice języka T-SQL usługi Azure SQL Managed Instance z programu SQL Server.

Niektóre funkcje agenta SQL, które są dostępne w programie SQL Server, nie są obsługiwane w usłudze SQL Managed Instance:

  • Ustawienia agenta SQL są tylko do odczytu.
    • Procedura sp_set_agent_properties składowana systemu nie jest obsługiwana.
  • Włączanie/wyłączanie agenta SQL nie jest obecnie obsługiwane. Agent SQL zawsze działa.
  • Chociaż powiadomienia są częściowo obsługiwane, następujące nie są obsługiwane:
    • Pager nie jest obsługiwany.
    • Polecenie NetSend nie jest obsługiwane.
    • Alerty nie są obsługiwane.
  • Serwery proxy nie są obsługiwane.
  • Dziennik zdarzeń nie jest obsługiwany.
  • Wyzwalacz harmonogramu zadań na podstawie bezczynnego procesora CPU nie jest obsługiwany.
  • Kroki zadania scalania replikacji nie są obsługiwane.
  • Czytnik danych kolejki nie jest obsługiwany.
  • Usługi Analysis Services nie są obsługiwane.
  • Uruchamianie skryptu przechowywanego jako plik na dysku nie jest obsługiwane.
  • Importowanie modułów zewnętrznych, takich jak dbatools i dbachecks, nie jest obsługiwane.
  • Program PowerShell Core nie jest obsługiwany.

Dowiedz się więcej

Następne kroki