Condividi tramite


Automatizzare le attività di gestione usando i processi di SQL Agent in Istanza gestita di SQL di Azure

Si applica a:Istanza gestita di SQL di Azure SQL

Usando SQL Server Agent in Istanza gestita di AzureSQL, è possibile creare e pianificare processi che possono essere eseguiti periodicamente su uno o più database. Questi processi di SQL Agent eseguono query Transact-SQL (T-SQL) ed eseguono attività di manutenzione. Questo articolo illustra l'uso di SQL Agent per Istanza gestita di SQL.

Nota

SQL Agent non è disponibile nel database SQL di Azure o in Azure Synapse Analytics. È invece consigliabile l'automazione dei lavori con Elastic Jobs.

Quando usare i processi di SQL Agent

I processi di SQL Agent possono essere usati in diversi scenari:

  • Automatizzare le attività di gestione e quindi pianificare l'esecuzione in ogni giorno feriale, fuori orario lavorativo e così via.
    • Distribuire le modifiche dello schema, la gestione delle credenziali, la raccolta di dati sulle prestazioni o la raccolta di dati di telemetria del tenant (cliente).
    • Aggiornare i dati di riferimento (informazioni comuni in tutti i database) e caricare i dati dall'archivio BLOB di Azure. Vedere BULK_INSERT per gli argomenti usati per l'autenticazione nell'archivio BLOB di Azure.
    • Attività di manutenzione comuni, tra cui DBCC CHECKDB per garantire l'integrità dei dati o la manutenzione degli indici per migliorare le prestazioni delle query. Configurare i processi per l'esecuzione in una raccolta di database su base periodica, ad esempio durante le fasce orarie non di punta.
    • Raccogliere i risultati delle query da un set di database in una tabella centrale in modo continuativo. Le query sulle prestazioni possono essere eseguite continuamente e configurate per attivare più attività da eseguire.
  • Raccogliere i dati per i report
    • Aggregare i dati di una raccolta di database in una singola tabella di destinazione.
    • Eseguire query di elaborazione dei dati a più lunga durata per una vasta serie di database, ad esempio la raccolta della telemetria dei clienti. I risultati vengono raccolti in una tabella di destinazione singola per ulteriori analisi.
  • Movimenti dei dati
    • Creare processi che replicano le modifiche apportate ai database in altri database o raccolgono gli aggiornamenti effettuati in database remoti e applicano le modifiche nel database.
    • Creare compiti che caricano dati da o verso i database usando SQL Server Integration Services (SSIS).

Processi di lavoro SQL Agent in Istanza SQL gestita

SQL Server Agent esegue processi di SQL Agent usati per l'automazione delle attività in Istanza gestita di SQL.

Le attività di SQL Agent sono una serie specificata di script T-SQL sul tuo database. Usare i processi per definire un'attività amministrativa eseguibile una o più volte e monitorabile per verificarne l'esito positivo o negativo.

Un'attività può essere eseguita in un'istanza locale o in più istanze remote. Il processo agente SQL è un componente interno del motore di database eseguito all'interno del servizio SQL Managed Instance.

Esistono diversi concetti chiave nei processi di SQL Agent:

  • I passaggi del processo sono un set di uno o più passaggi che devono essere eseguiti all'interno del processo. Per ogni passaggio del processo, è possibile definire una strategia di ripetizione dei tentativi e l'azione che deve verificarsi se il passaggio del processo ha esito positivo o negativo.
  • Le pianificazioni definiscono quando deve essere eseguito il processo.
  • Le notifiche consentono di definire le regole usate per inviare notifiche agli operatori tramite posta elettronica al termine del processo.

Fasi di lavoro

I passaggi del processo di SQL Agent sono sequenze di azioni che SQL Agent deve eseguire. Ogni passaggio prevede un passaggio seguente che deve essere eseguito se il passaggio ha esito positivo o negativo e un set di tentativi in caso di errore.

SQL Agent consente di creare diversi tipi di passaggi di processo.

  • Transact-SQL passaggi del processo che eseguono un singolo batch Transact-SQL sul database.
  • Comandi del sistema operativo/passaggi di PowerShell che possono eseguire script del sistema operativo personalizzati.
  • Passaggi del processo SSIS che consentono di caricare i dati usando il runtime SSIS.
  • Passaggi di replica che possono pubblicare modifiche dal database ad altri database.

La replica transazionale può replicare le modifiche dalle tabelle in altri database in Istanza gestita di SQL, database SQL di Azure o SQL Server. Per informazioni, vedere Configurare la replica in un database di Istanza gestita di SQL di Azure.

Altri tipi di passaggi di processo non sono attualmente supportati nelle Istanza SQL gestita, come la replicazione merge e il lettore di coda.

Programmazioni dei lavori

Un programma specifica quando viene eseguita un'attività. Più di un lavoro può essere eseguito secondo la stessa programmazione, e più di una programmazione può essere applicata allo stesso lavoro.

Per quanto riguarda quando un processo deve essere eseguito, una pianificazione può definire le condizioni seguenti:

  • Avvia ogni volta che viene avviato SQL Server Agent. Il processo viene attivato dopo ogni failover.
  • Avviare una sola volta, in una data e un'ora specifiche, utile per l'esecuzione ritardata di un'attività.
  • Iniziare in base a una pianificazione ricorrente.

Per altre informazioni sulla pianificazione di un processo di SQL Agent, vedere Pianificare un processo.

Nota

Istanza gestita di SQL di Azure attualmente non consente di avviare un processo quando la CPU è inattiva.

Notifiche di lavoro

I processi di SQL Agent consentono di ricevere notifiche quando il processo viene completato o non riesce. È possibile ricevere le notifiche tramite posta elettronica.

Se non è già abilitata, è prima necessario configurare la funzionalità di Posta elettronica database in Istanza gestita di SQL:

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

Come esercizio di esempio, configurare un account di posta elettronica per l'invio delle notifiche tramite posta elettronica. Assegnare l'account al profilo di posta elettronica denominato AzureManagedInstance_dbmail_profile. Per inviare messaggi di posta elettronica usando i processi di SQL Agent in Istanza gestita di SQL, deve essere presente un profilo che deve essere chiamato AzureManagedInstance_dbmail_profile. In caso contrario, Istanza gestita di SQL non è in grado di inviare messaggi di posta elettronica tramite SQL Agent.

Nota

Per il server di posta, è consigliabile usare i servizi di inoltro SMTP (Simple Mail Transfer Protocol) autenticati per inviare messaggi di posta elettronica. Questi servizi di inoltro si connettono in genere tramite le porte 25 o 587 per le connessioni TLS (Transport Layer Security) o la porta 465 per le connessioni SSL, ma Posta elettronica database può essere configurata per l'uso di qualsiasi porta. Queste porte richiedono una nuova regola in uscita nel gruppo di sicurezza di rete dell'istanza gestita. Questi servizi vengono usati per mantenere la reputazione dell'IP e del dominio per ridurre al minimo la possibilità che i domini esterni rifiutino i messaggi o li inviino alla cartella SPAM. Considerare un servizio di inoltro SMTP autenticato già presente nei server locali. In Azure, SendGrid è un servizio di inoltro SMTP, ma ne esistono altri.

Usare lo script di esempio seguente per creare un account e un profilo Posta elettronica database, quindi associarli insieme:

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

Verificare la configurazione di Posta del database tramite T-SQL usando la procedura di sistema 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';

È possibile notificare all'operatore che si sono verificati determinati eventi nei processi di SQL Agent. Un operatore definisce le informazioni di contatto per la persona responsabile della manutenzione di una o più istanze in Istanza gestita di SQL. Le responsabilità di operatore vengono talvolta assegnate a una sola persona.

In ambienti con più istanze gestite di SQL o istanze di SQL Server, molti utenti possono condividere le responsabilità degli operatori. Un operatore non contiene informazioni di sicurezza e non definisce un'entità di sicurezza. Idealmente, un operatore non è un individuo le cui responsabilità possono cambiare, ma un gruppo di distribuzione di posta elettronica.

È possibile creare gli operatori usando SQL Server Management Studio (SSMS) o lo script Transact-SQL illustrato nell'esempio seguente:

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

Confermare il successo o il fallimento dell'email tramite il Log di Posta elettronica del database in SSMS.

È possibile modificare qualsiasi processo di SQL Agent e assegnare operatori che ricevono notifiche tramite posta elettronica se il processo viene completato, ha esito negativo o ha esito positivo. Modificare il processo usando SSMS o lo script T-SQL seguente:

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

Cronologia lavorativa

Istanza gestita di SQL attualmente non consente di modificare le proprietà di SQL Agent perché sono archiviate nei valori del Registro di sistema sottostanti. Ciò significa che le opzioni per la regolazione dei criteri di conservazione di Agent per i record della cronologia dei processi sono fissate al valore predefinito di 1.000 record totali e un massimo di 100 record di cronologia per processo.

Per ulteriori informazioni, vedere Consulta la cronologia dei processi di SQL Server Agent.

Adesione al ruolo predefinito del database

Se gli utenti collegati agli account di accesso nonsysadmin vengono aggiunti a uno dei tre ruoli predefiniti del database di SQL Agent nel msdb database di sistema, esiste un problema in cui è necessario concedere autorizzazioni esplicite EXECUTE a tre stored procedure di sistema nel master database. Se si verifica questo problema, viene visualizzato il messaggio di errore The EXECUTE permission was denied on the object <object_name> (Microsoft SQL Server, Error: 229).

Dopo aver aggiunto utenti a un ruolo predefinito del database di SQL Agent (SQLAgentUserRole, SQLAgentReaderRole o SQLAgentOperatorRole) in msdbper ogni account di accesso dell'utente aggiunto a questi ruoli, eseguire lo script T-SQL seguente per concedere EXECUTE in modo esplicito le autorizzazioni alle stored procedure di sistema elencate. In questo esempio si presuppone che il nome utente e il nome di accesso siano uguali:

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

Limitazioni dell'attività di SQL Agent in Istanza SQL gestita

Vale la pena notare le differenze tra SQL Agent disponibile in SQL Server e nella SQL Managed Instance. Per maggiori informazioni sulle differenze delle funzionalità supportate tra SQL Server e Istanza gestita di Azure SQL, vedere Differenze T-SQL tra Istanza gestita di Azure SQL e SQL Server.

Alcune funzionalità di SQL Agent disponibili in SQL Server non sono supportate in Istanza gestita di SQL:

  • Le impostazioni dell'agente SQL sono di sola lettura.
    • La procedura memorizzata di sistema sp_set_agent_properties non è compatibile.
  • L'abilitazione/disabilitazione di SQL Agent non è attualmente supportata. SQL Agent è sempre in esecuzione.
  • Anche se le notifiche sono parzialmente supportate, le opzioni seguenti non sono supportate:
    • Il cercapersone non è supportato.
    • NetSend non è supportato.
    • Gli avvisi non sono supportati.
  • I proxy non sono supportati.
  • Il log eventi non è supportato.
  • Il trigger di pianificazione dei processi basato su una CPU inattiva non è supportato.
  • I passaggi del processo di replica di tipo merge non sono supportati.
  • L'utilità di lettura coda non è supportata.
  • Analysis Services non è supportato.
  • L'esecuzione di uno script archiviato come file su disco non è supportato.
  • L'importazione di moduli esterni, ad esempio dbatools e dbachecks, non è supportata.
  • PowerShell Core non è supportato.