Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:Azure SQL Managed Instance
Met SQL Server Agent- in SQL Server en sql Managed Instancekunt u taken maken en plannen die periodiek kunnen worden uitgevoerd voor een of meer databases om Transact-SQL (T-SQL)-query's 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 moet u SQL Agent-taken gebruiken?
Er zijn verschillende scenario's waarin u SQL Agent-taken kunt gebruiken:
- Beheertaken automatiseren en plannen dat ze elke weekdag, na kantooruren, enzovoort worden uitgevoerd.
- Implementeer schemawijzigingen, referentiebeheer, prestatiegegevensverzameling of tenanttelemetrieverzameling (klant).
- Werk referentiegegevens bij (informatie die gebruikelijk is voor alle databases), laad gegevens uit Azure Blob Storage. Microsoft raadt het gebruik van SHARED ACCESS SIGNATURE-verificatie aan voor verificatie bij Azure Blob Storage.
- Algemene onderhoudstaken, waaronder
DBCC CHECKDB
om gegevensintegriteit of indexonderhoud te garanderen om de queryprestaties te verbeteren. Configureer taken voor uitvoering in een verzameling databases op terugkerende basis, zoals tijdens daluren. - Verzamel queryresultaten van een set databases in een centrale tabel op basis van een doorlopende basis. Prestatiequery's kunnen voortdurend worden uitgevoerd en geconfigureerd om extra taken te activeren die moeten worden uitgevoerd.
- Gegevens verzamelen voor rapportage
- Gegevens uit een verzameling databases aggregeren in één doeltabel.
- Voer langer lopende query's voor gegevensverwerking uit in een grote set databases, bijvoorbeeld de verzameling telemetrie van klanten. Resultaten worden verzameld in een enkele doeltabel voor verdere analyse.
- Gegevensverplaatsingen
- Maak taken die wijzigingen in uw databases repliceren naar andere databases of verzamel updates die zijn aangebracht in externe databases en pas wijzigingen toe in de database.
- Taken maken die gegevens laden van of naar uw databases 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 opgegeven reeks T-SQL-scripts voor uw database. Gebruik opdrachten om een beheertaak te definiëren die één of meerdere keren kan worden uitgevoerd en gemonitord op succes of falen.
Een taak kan worden uitgevoerd op één lokale server of op meerdere externe servers. SQL Agent-taken zijn een intern Database Engine-onderdeel dat wordt uitgevoerd in de SQL Managed Instance-service.
Er zijn verschillende belangrijke concepten in SQL Agent-taken:
- taakstappen set van een of meer stappen die binnen de taak moeten worden uitgevoerd. Voor elke taakstap kunt u een strategie voor opnieuw proberen definiëren en de actie die moet optreden als de taakstap slaagt of mislukt.
- Planningen definiëren wanneer de taak moet worden uitgevoerd.
- Meldingen kunt u regels definiëren die worden gebruikt om operators via e-mail op de hoogte te stellen zodra de taak is voltooid.
Taakstappen
Sql Agent-taakstappen zijn reeksen acties die door SQL Agent moeten worden uitgevoerd. Elke stap heeft de volgende stap die moet worden uitgevoerd als de stap slaagt of mislukt, het aantal nieuwe pogingen in een geval van een fout.
Met SQL Agent kunt u verschillende soorten taakstappen maken, zoals Transact-SQL taakstappen waarmee één Transact-SQL batch wordt uitgevoerd op de database of opdracht van het besturingssysteem/PowerShell-stappen waarmee aangepast besturingssysteemscript kan worden uitgevoerd, SSIS-taakstappen waarmee u gegevens kunt laden met behulp van SSIS-runtime of replicatie stappen waarmee u wijzigingen van uw database naar andere databases kunt publiceren.
Notitie
Zie Gebruik Azure SQL Managed Instance met SQL Server Integration Services (SSIS) in Azure Data Factoryvoor meer informatie over het gebruik van de Azure SSIS Integration Runtime met de SSISDB die wordt gehost door SQL Managed Instance.
transactionele replicatie kunt 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 Instancevoor meer informatie.
Andere typen taakstappen worden momenteel niet ondersteund in SQL Managed Instance, zoals samenvoegreplicatie en wachtrijlezer.
Taakplanningen
Een planning geeft aan wanneer een taak wordt uitgevoerd. Meerdere taken kunnen volgens hetzelfde schema worden uitgevoerd en meer dan één planning kan worden toegepast op dezelfde taak.
Een schema kan de volgende voorwaarden definiëren voor het tijdstip waarop een taak wordt uitgevoerd:
- Wanneer SQL Server Agent wordt gestart. Taak wordt geactiveerd na elke failover.
- Eén keer, op een specifieke datum en tijd, wat handig is voor vertraagde uitvoering van een taak.
- Volgens een terugkerend schema.
Zie Een taak plannenvoor 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.
Vacaturemeldingen
Met SQL Agent-taken kunt u meldingen ontvangen wanneer de taak is voltooid of mislukt. U kunt meldingen ontvangen via e-mail.
Als deze nog niet is ingeschakeld, moet u eerst de functie Database Mail configureren op 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 SQL Agent-taken in SQL Managed Instance, moet er een profiel zijn dat AzureManagedInstance_dbmail_profile
wordt genoemd. 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 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 exemplaren in SQL Managed Instance. Soms worden 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 beveiligingsgegevens en definieert geen beveiligingsprincipaal. 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';
Controleer of het e-mailbericht is geslaagd of mislukt via het Database Mail-logboek in SSMS.
Vervolgens kunt u een 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';
Taakgeschiedenis
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 Agent-bewaarbeleid voor records van de taakgeschiedenis zijn ingesteld op de standaardwaarde van 1000 records in totaal en maximaal 100 geschiedenisrecords per taak.
Zie SQL Agent-taakgeschiedenis weergevenvoor meer informatie.
Vaste databaserollidmaatschap
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 in het systeem opgeslagen procedures die worden vermeld. 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 voor meer informatie over de ondersteunde functieverschillen tussen SQL Server en SQL Managed Instance T-SQL-verschillen van SQL Server.
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 door het systeem opgeslagen procedure
sp_set_agent_properties
wordt niet ondersteund.
- De door het systeem opgeslagen procedure
- 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.
- Eventlog wordt niet ondersteund.
- Taakplanning gebaseerd op een niet-actieve CPU wordt niet ondersteund.
- Stappen voor het samenvoegen van replicatietaken worden niet ondersteund.
- 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
- Wat is Azure SQL Managed Instance?
- Wat is er nieuw in Azure SQL Managed Instance?
- T-SQL-verschillen tussen Azure SQL Managed Instance en SQL Server
- vergelijking van -functies: Azure SQL Database en Azure SQL Managed Instance