Delen via


Beheertaken automatiseren met behulp van SQL Agent-taken in Azure SQL Managed Instance

Van toepassing op: Azure SQL Managed Instance

Met behulp van SQL Server Agent in SQL Server en SQL Managed Instance kunt u taken maken en plannen die periodiek kunnen worden uitgevoerd op een of meer databases om Transact-SQL-query's (T-SQL) uit te voeren en onderhoudstaken uit te voeren. In dit artikel wordt het gebruik van SQL Agent voor SQL Managed Instance behandeld.

Notitie

SQL Agent is niet beschikbaar in Azure SQL Database of Azure Synapse Analytics. In plaats daarvan raden we taakautomatisering aan met elastische taken.

Wanneer gebruikt u SQL Agent-taken

Er zijn verschillende scenario's waarin u SQL Agent-taken kunt gebruiken:

  • Beheertaken automatiseren en deze vervolgens plannen voor uitvoering op elke weekdag, na kantooruren enzovoort.
    • Implementeer schemawijzigingen, referentiebeheer, het verzamelen van prestatiegegevens of telemetrie van tenant (klant).
    • Referentiegegevens (algemene informatie voor alle databases) bijwerken, gegevens laden uit Azure-blobopslag. Microsoft raadt aan SHARED ACCESS SIGNATURE-verificatie te gebruiken om te verifiëren bij Azure Blob Storage.
    • Algemene onderhoudstaken, waaronder DBCC CHECKDB het waarborgen van gegevensintegriteit of indexonderhoud om de queryprestaties te verbeteren. Configureer taken die op terugkerende basis, bijvoorbeeld tijdens daluren, moeten worden uitgevoerd.
    • Verzamel op continue basis queryresultaten uit een reeks databases in een centrale tabel. Prestatiequery's kunnen voortdurend worden uitgevoerd en geconfigureerd om de uitvoering van aanvullende taken te activeren.
  • Gegevens verzamelen voor rapportage
    • Verzamel gegevens uit een verzameling databases in één doeltabel.
    • Voer langer durende gegevensverwerkingsquery's uit voor een groot aantal databases, zoals het verzamelen van klanttelemetrie. Resultaten worden in één doeltabel verzameld voor verdere analyse.
  • Gegevensverplaatsingen
    • Taken maken waarmee wijzigingen die zijn aangebracht in uw databases, naar andere databases worden gerepliceerd of updates verzamelen die zijn uitgevoerd in externe databases en wijzigingen doorvoeren in de database.
    • Taken maken waarmee gegevens vanuit of naar uw databases worden geladen met behulp van SQL Server Integration Services (SSIS).

SQL Agent-taken in SQL Managed Instance

SQL Agent-taken worden uitgevoerd door de SQL Agent-service die nog steeds wordt gebruikt voor taakautomatisering in SQL Server en SQL Managed Instance.

SQL Agent-taken zijn een reeks T-SQL-scripts die voor uw database zijn opgegeven. Gebruik taken om een administratieve taak te definiëren die een keer of vaker kan worden uitgevoerd en kan worden gecontroleerd op slagen of mislukken.

Een taak kan op één lokale server of op meerdere externe servers worden uitgevoerd. SQL Agent-taken zijn een intern Database Engine-onderdeel dat wordt uitgevoerd in de SQL Managed Instance-service.

Er zijn enkele belangrijke concepten in SQL Agent-taken:

  • Taakstappen zijn een of meer stappen die in de taak moet worden uitgevoerd. U kunt voor elke stap een strategie voor opnieuw proberen definiëren en de actie die moet plaatsvinden moet als de taakstap is geslaagd of mislukt.
  • Schema's definiëren wanneer de taak moet worden uitgevoerd.
  • Met meldingen kunt u regels definiëren die worden gebruikt om een melding naar operators te sturen via een e-mailbericht wanneer de taak is voltooid.

Taakstappen

SQL Agent-taakstappen zijn reeksen met acties die door SQL Agent moeten worden uitgevoerd. Elke stap bevat de volgende stap die moet worden uitgevoerd als de stap is geslaagd of mislukt en in het laatste geval het aantal nieuwe pogingen in geval van een fout.

Met SQL Agent kunt u verschillende soorten taakstappen maken, zoals Transact-SQL-taakstappen waarmee één Transact-SQL-batch wordt uitgevoerd voor de database, of opdracht van het besturingssysteem/PowerShell-stappen waarmee u aangepast besturingssysteemscript, SSIS-taakstappen kunt uitvoeren waarmee u gegevens kunt laden met behulp van SSIS-runtime of replicatiestappen waarmee u wijzigingen van uw database naar andere databases kunt publiceren.

Notitie

Zie Azure SQL Managed Instance gebruiken met SSIS Integration Services (SSIS) in Azure Data Factory voor meer informatie over het gebruik van Azure SSIS Integration Runtime met SSIS (SSIS) die wordt gehost door SQL Managed Instance.

Transactionele replicatie kan de wijzigingen van uw tabellen repliceren naar andere databases in SQL Managed Instance, Azure SQL Database of SQL Server. Zie Replicatie configureren in Azure SQL Managed Instance voor meer informatie.

Andere typen taakstappen worden momenteel niet ondersteund in SQL Managed Instance, zoals samenvoegreplicatie en wachtrijlezer.

Jobplanningen

Een schema geeft aan wanneer een taak wordt uitgevoerd. Er kan meer dan één taak worden uitgevoerd in hetzelfde schema en er kan meer dan één schema worden toegepast op dezelfde taak.

Een schema kan de volgende voorwaarden definiëren voor het moment waarop een taak wordt uitgevoerd:

  • Wanneer SQL Server Agent wordt gestart. De taak wordt geactiveerd na elke failover.
  • Eén keer op een specifieke datum en tijd, wat handig is voor uitgestelde uitvoering van een taak.
  • Met een terugkerend schema.

Zie Een taak plannen voor meer informatie over het plannen van een SQL Agent-taak.

Notitie

Met Azure SQL Managed Instance kunt u momenteel geen taak starten wanneer de CPU niet actief is.

Taakmeldingen

Met SQL Agent-taken kunt u meldingen ontvangen wanneer de taak is voltooid of mislukt. U kunt meldingen via e-mail ontvangen.

Als deze nog niet is ingeschakeld, moet u eerst de functie Database Mail configureren in SQL Managed Instance:

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

Stel als voorbeeldoefening het e-mailaccount in dat wordt gebruikt om de e-mailmeldingen te verzenden. Wijs het account toe aan het e-mailprofiel met de naam AzureManagedInstance_dbmail_profile. Als u e-mail wilt verzenden met behulp van SQL Agent-taken in SQL Managed Instance, moet er een profiel zijn dat moet worden aangeroepen AzureManagedInstance_dbmail_profile. Anders kan SQL Managed Instance geen e-mailberichten verzenden via SQL Agent.

Notitie

Voor de e-mailserver wordt u aangeraden geverifieerde SMTP-relayservices te gebruiken om e-mail te verzenden. Deze relayservices maken doorgaans verbinding via TCP-poorten 25 of 587 voor verbindingen via TLS of poort 465 voor SSL-verbindingen, maar Database Mail kan worden geconfigureerd voor het gebruik van elke poort. Voor deze poorten is een nieuwe uitgaande regel vereist in de netwerkbeveiligingsgroep van uw beheerde exemplaar. Deze services worden gebruikt om ip- en domeinreputatie te behouden om de mogelijkheid te minimaliseren dat externe domeinen uw berichten weigeren of in de map SPAM plaatsen. Overweeg een geverifieerde SMTP-relayservice die al aanwezig is op uw on-premises servers. In Azure is SendGrid een dergelijke SMTP-relayservice, maar er zijn andere.

Gebruik het volgende voorbeeldscript om een Database Mail-account en -profiel te maken en deze vervolgens aan elkaar te koppelen:

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

Test de Database Mail-configuratie via T-SQL met behulp van de sp_send_db_mail door het systeem opgeslagen procedure:

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

U kunt de operator waarschuwen dat er iets is gebeurd met uw SQL Agent-taken. Een operator definieert contactgegevens voor een persoon die verantwoordelijk is voor het onderhoud van een of meer beheerde SQL-exemplaren. Soms zijn operatorverantwoordelijkheden toegewezen aan één persoon.

In systemen met meerdere exemplaren in SQL Managed Instance of SQL Server, kunnen veel personen operatorverantwoordelijkheden delen. Een operator bevat geen informatie over beveiliging, en definieert geen beveiligingsprincipal. Idealiter is een operator geen persoon waarvan de verantwoordelijkheden kunnen veranderen, maar een e-maildistributiegroep.

U kunt operators maken met behulp van SQL Server Management Studio (SSMS) of het Transact-SQL-script dat wordt weergegeven in het volgende voorbeeld:

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

Bevestig dat het e-mailbericht is geslaagd of mislukt via het database-e-maillogboek in SSMS.

U kunt vervolgens elke SQL Agent-taak wijzigen en operators toewijzen die via e-mail worden gewaarschuwd als de taak is voltooid, mislukt of slaagt met behulp van SSMS of het volgende T-SQL-script:

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

Jobgeschiedenis

Met SQL Managed Instance kunt u momenteel geen SQL Agent-eigenschappen wijzigen omdat deze zijn opgeslagen in de onderliggende registerwaarden. Dit betekent dat de opties voor het aanpassen van het bewaarbeleid voor agent voor taakgeschiedenisrecords zijn ingesteld op de standaardwaarde van 1000 records en maximaal 100 geschiedenisrecords per taak.

Zie De taakgeschiedenis van SQL Agent weergeven voor meer informatie.

Lidmaatschap van databaserol opgelost

Als gebruikers die zijn gekoppeld aan niet-sysadmin-aanmeldingen worden toegevoegd aan een van de drie vaste SQL Agent-databaserollen in de msdb systeemdatabase, bestaat er een probleem waarbij expliciete EXECUTE-machtigingen moeten worden verleend aan drie door het systeem opgeslagen procedures in de master database. Als dit probleem optreedt, wordt het foutbericht The EXECUTE permission was denied on the object <object_name> (Microsoft SQL Server, Error: 229) weergegeven.

Zodra u gebruikers toevoegt aan een vaste SQL Agent-databaserol (SQLAgentUserRole, SQLAgentReaderRole of SQLAgentOperatorRole) in msdb, voert u voor elk van de aanmeldingen van de gebruiker die aan deze rollen zijn toegevoegd, het onderstaande T-SQL-script uit om expliciet EXECUTE-machtigingen te verlenen aan de vermelde opgeslagen procedures van het systeem. In dit voorbeeld wordt ervan uitgegaan dat de gebruikersnaam en aanmeldingsnaam hetzelfde zijn:

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

Beperkingen voor SQL Agent-taken in SQL Managed Instance

Het is de moeite waard om de verschillen te noteren tussen SQL Agent die beschikbaar is in SQL Server en als onderdeel van SQL Managed Instance. Zie T-SQL-verschillen tussen SQL Server en SQL Managed Instance voor meer informatie over de ondersteunde functieverschillen tussen SQL Server en SQL Managed Instance.

Sommige van de SQL Agent-functies die beschikbaar zijn in SQL Server, worden niet ondersteund in SQL Managed Instance:

  • SQL Agent-instellingen zijn alleen-lezen.
    • De opgeslagen systeemprocedure sp_set_agent_properties wordt niet ondersteund.
  • Het in- of uitschakelen van SQL Agent wordt momenteel niet ondersteund. SQL Agent wordt altijd uitgevoerd.
  • Hoewel meldingen gedeeltelijk worden ondersteund, worden de volgende niet ondersteund:
    • Pager wordt niet ondersteund.
    • NetSend wordt niet ondersteund.
    • Waarschuwingen worden niet ondersteund.
  • Proxy's worden niet ondersteund.
  • Gebeurtenislogboek wordt niet ondersteund.
  • Taakplanningtrigger op basis van een niet-actieve CPU wordt niet ondersteund.
  • Stappen voor het samenvoegen van replicatietaken worden niet ondersteund.
  • De wachtrijlezer wordt niet ondersteund.
  • Analysis Services wordt niet ondersteund.
  • Het uitvoeren van een script dat is opgeslagen als een bestand op schijf, wordt niet ondersteund.
  • Het importeren van externe modules, zoals dbatools en dbachecks, wordt niet ondersteund.
  • PowerShell Core wordt niet ondersteund.

Meer informatie

Volgende stappen