SQL Server Agent

Si applica a: SQL Server Istanza gestita di SQL di Azure

Questo articolo offre una panoramica di SQL Server Agent, ovvero un servizio di Microsoft Windows che esegue attività amministrative pianificate (denominate processi) in SQL Server e Istanza gestita di SQL di Azure.

Importante

In Istanza gestita di SQL di Azure sono attualmente supportate la maggior parte delle funzionalità di SQL Server Agent, ma non tutte. Per informazioni dettagliate, vedere Differenze T-SQL tra Istanza gestita di SQL di Azure e SQL Server.

Vantaggi di SQL Server Agent

SQL Server Agent usa SQL Server per archiviare le informazioni sul processo. I processi sono costituiti da uno o più passaggi, ciascuno dei quali contiene un'attività, ad esempio il backup di un database.

SQL Server Agent è in grado di eseguire un processo incluso in una pianificazione, in risposta a un evento specifico, oppure su richiesta. Se, ad esempio, l'esigenza è quella di eseguire il backup di tutti i server aziendali ogni sera in orario non lavorativo, è possibile automatizzare questa attività, Pianificare l'esecuzione del backup dopo le 22:00, dal lunedì al venerdì. In caso di problemi durante il backup, SQL Server Agent può registrare l'evento e inviarne notifica all'utente.

Nota

Per impostazione predefinita, all'installazione di SQL Server il servizio SQL Server Agent viene disabilitato, a meno che l'utente non scelga esplicitamente l'avvio automatico del servizio.

Componenti di SQL Server Agent

SQL Server Agent utilizza i componenti seguenti per definire le attività da eseguire, quando eseguirle e come fornire informazioni in merito alla riuscita o meno delle attività.

Usare Gestione configurazione SQL Server per gestire il servizio SQL Server Agent e usare SQL Server Management Studio (SSMS) per gestire facilmente le proprietà di SQL Server Agent, i processi, gli avvisi, gli operatori e i proxy in un'interfaccia utente grafica.

Processi

Un processo è una serie specificata di azioni eseguite da SQL Server Agent. Usare i processi per definire un'attività amministrativa eseguibile una o più volte e monitorabile per verificarne l'esito positivo o negativo. Un processo può essere eseguito in un server locale o in più server remoti.

Importante

SQL Server Agent in esecuzione al momento di un evento di failover su un'istanza del cluster di failover SQL Server non riprendono dopo il failover su un altro nodo del cluster di failover. I processi di SQL Server Agent in esecuzione quando un nodo Hyper-V viene messo in pausa non riprendono se la pausa provoca un failover in un altro nodo. I processi che iniziano ma che non riescono a essere completati a causa di un evento di failover vengono registrati come avviati, ma non mostrano voci di log aggiuntive per il completamento o l'errore. SQL Server Agent in questi scenari sembrano non avere mai termine.

È possibile eseguire i processi in diversi modi:

  • In base a una o più pianificazioni.

  • In risposta a uno o più avvisi.

  • Eseguendo la stored procedure sp_start_job.

Ogni azione di un processo viene definita passaggio del processo. Un passaggio del processo, ad esempio, può essere costituito dall'esecuzione di un'istruzione Transact-SQL, di un pacchetto di SSIS o di un comando in un server Analysis Services. I passaggi del processo vengono gestiti come parte di un processo.

Ogni passaggio del processo viene eseguito in un contesto di sicurezza specifico. Nel caso dei passaggi di processo che utilizzano Transact-SQL, usare l'istruzione EXECUTE AS per impostare il contesto di sicurezza corrispondente. Per gli altri tipi di passaggi di processo, utilizzare un account proxy per impostare il contesto di sicurezza corrispondente.

Usare la stored procedure di sistema sp_help_job per trovare informazioni su un processo specifico. Usare la tabella di sistema dbo.sysjobs per visualizzare informazioni sui processi. Ad esempio, usare l'istruzione Transact-SQL (T-SQL) seguente per visualizzare informazioni su tutti i processi in un server:

USE MSDB
GO
SELECT job_id, [name] FROM dbo.sysjobs;

Pianificazioni

Una pianificazione specifica quando viene eseguito un processo. La stessa pianificazione può includere l'esecuzione di più processi e allo stesso processo possono essere applicate più pianificazioni. Per quanto riguarda quando un processo deve essere eseguito, una pianificazione può definire le condizioni seguenti:

  • A ogni avvio di SQL Server Agent.

  • Quando l'utilizzo della CPU del computer corrisponde al livello di inattività.

  • Una sola volta in corrispondenza di una data e un'ora specifiche.

  • In base a una pianificazione ricorrente.

Per altre informazioni, vedere Creare e collegare le pianificazioni ai processi.

Avvisi

Un avviso è una risposta automatica a un evento specifico. Ad esempio, un evento può essere generato dall'avvio di un processo o dal raggiungimento della soglia specifica delle risorse di sistema. Le condizioni per la generazione di un avviso vengono definite dall'utente.

Un avviso può rispondere a una delle condizioni seguenti:

  • Eventi di SQL Server

  • Condizioni delle prestazioni di SQL Server

  • Eventi WMI (Microsoft Windows Management Instrumentation) nel computer in cui viene eseguito SQL Server Agent

Un avviso può eseguire le azioni seguenti:

  • Invio di una notifica a uno o più operatori

  • Eseguire un processo

Per altre informazioni, vedere Avvisi.

Operatori

Un operatore definisce le informazioni di contatto relative al responsabile della manutenzione di una o più istanze di SQL Server. In alcune organizzazioni le mansioni di operatore vengono assegnate a un unico dipendente. In organizzazioni con più server, tali mansioni possono essere ripartite tra più dipendenti. Un operatore non include informazioni di sicurezza e non definisce un'entità di sicurezza.

SQL Server può inviare agli operatori notifiche di avvisi tramite...

  • E-mail

  • Cercapersone (tramite posta elettronica)

  • net send

Nota

Per inviare notifiche usando net send, è necessario che il servizio Windows Messenger sia avviato nel computer in cui si trova SQL Server Agent.

Importante

Le opzioni Cercapersone e net send vengono rimosse da SQL Server Agent in una versione futura di SQL Server. Evitare pertanto di utilizzarle in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui sono state implementate.

Per inviare notifiche agli operatori usando la posta elettronica o i cercapersone, è necessario configurare SQL Server Agent per l'uso di Posta elettronica database. Per ulteriori informazioni, vedere Posta elettronica database.

È possibile definire un operatore come alias assegnato a un gruppo di utenti. In questo modo, tutti i membri dell'alias non vengono verificati contemporaneamente. Per altre informazioni, vedere Operatori.

Sicurezza per l'amministrazione di SQL Server Agent

SQL Server Agent usa i ruoli predefiniti del database SQLAgentUserRole, SQLAgentReaderRole e SQLAgentOperatorRole nel database msdb per controllare l'accesso a SQL Server Agent per gli utenti che non sono membri del ruolo predefinito del server sysadmin. Sottosistemi e proxy consentono agli amministratori del database di garantire l'esecuzione di tutti i passaggi di processo con le autorizzazioni minime necessarie all'esecuzione della relativa attività.

Ruoli

I membri dei ruoli predefiniti del database SQLAgentUserRole, SQLAgentReaderRole e SQLAgentOperatorRole in msdb e i membri del ruolo predefinito del server sysadmin hanno accesso a SQL Server Agent. Un utente che non appartiene a nessuno di questi ruoli non può utilizzare SQL Server Agent. Per altre informazioni sui ruoli usati da SQL Server Agent, vedere Implementazione della sicurezza di SQL Server Agent.

Subsystems

Un sottosistema è un oggetto predefinito che rappresenta funzionalità disponibili per un passaggio di processo. Ogni proxy ha accesso a uno o più sottosistemi. I sottosistemi offrono sicurezza in quanto delimitano l'accesso alle funzionalità disponibili per un proxy. Ogni passaggio di processo viene eseguito nel contesto di un proxy, ad eccezione dei passaggi di processo Transact-SQL. I passaggi di processo Transact-SQL usano il comando EXECUTE AS per impostare il contesto di sicurezza sul proprietario del processo.

In SQL Server vengono definiti i sottosistemi inclusi nella tabella seguente:

Nome sottosistema Descrizione
Script Microsoft ActiveX Esegue un passaggio di processo con script ActiveX.

Avviso Il sottosistema di scripting ActiveX verrà rimosso da SQL Server Agent in una versione futura di Microsoft SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.
Sistema operativo (CmdExec) Esegue un programma eseguibile.
PowerShell Esegue un passaggio di processo con script di PowerShell.
Server di distribuzione repliche Esegue un passaggio di processo tramite cui viene attivata l'utilità Agente distribuzione repliche.
Merge repliche Esegue un passaggio di processo tramite cui viene attivata l'utilità Agente merge repliche.
Lettura coda repliche Esegue un passaggio di processo tramite cui viene attivata l'utilità Agente di lettura coda repliche.
Snapshot repliche Esegue un passaggio di processo tramite cui viene attivata l'utilità Agente snapshot repliche.
Lettura log repliche Esegue un passaggio di processo tramite cui viene attivata l'utilità Agente lettura log repliche.
Comando di Analysis Services Esegue un comando di Analysis Services.
Query di Analysis Services Esegue una query di Analysis Services.
Esecuzione pacchetti SSIS Esegue un pacchetto SSIS.

Nota

Poiché i passaggi del processo Transact-SQL non usano proxy, non è disponibile alcun sottosistema SQL Server Agent per i passaggi del processo Transact-SQL.

SQL Server Agent applica restrizioni di sottosistema anche quando l'entità di sicurezza per il proxy disporrebbe dell'autorizzazione necessaria per eseguire l'attività nel passaggio di processo. Ad esempio, un proxy per un utente membro del ruolo predefinito del server sysadmin non può eseguire un passaggio di processo SSIS a meno che non abbia accesso al sottosistema SSIS, anche se l'utente può eseguire pacchetti SSIS.

Proxy

SQL Server Agent ua i proxy per la gestione dei contesti di sicurezza. È possibile utilizzare un proxy in più passaggi di processo. I membri del ruolo predefinito del server sysadmin sono autorizzati alla creazione di proxy.

Ogni proxy corrisponde a una credenziale di sicurezza e può essere associato a un set di sottosistemi e a un set di account di accesso. È possibile utilizzare il proxy solo per i passaggi di processo che utilizzano un sottosistema associato al proxy stesso. Per creare un passaggio di processo che utilizza un proxy specifico, il proprietario del processo deve usare un account di accesso associato a tale proxy oppure essere un membro di un ruolo con accesso senza limitazioni ai proxy. I membri del ruolo predefinito del server sysadmin hanno privilegi di accesso senza limitazioni ai proxy. I membri del ruolo SQLAgentUserRole, SQLAgentReaderRoleo SQLAgentOperatorRole possono utilizzare solo i proxy ai quali sono specificamente autorizzati ad accedere. È necessario concedere l'accesso a proxy specifici a ogni utente membro di uno di questi ruoli predefiniti del database di SQL Server Agent, in modo che possa creare passaggi di processo che utilizzano tali proxy.

Amministrazione di Power Automate

Per configurare SQL Server Agent per automatizzare l'amministrazione SQL Server, seguire questi passaggi:

  1. Individuare le attività amministrative o gli eventi server che si verificano regolarmente e che possono essere gestiti a livello di programmazione. È possibile automatizzare un'attività se implica una sequenza prevedibile di passaggi e si verifica a un'ora specifica o in risposta a un evento specifico.

  2. Definire un set di processi, pianificazioni, avvisi e operatori tramite SQL Server Management Studio, script Transact-SQL o SQL Server Management Objects (SMO). Per ulteriori informazioni, vedere Creare le commesse.

  3. Eseguire i processi di SQL Server Agent definiti.

Nota

Per un'istanza predefinita di SQL Server, il nome del servizio SQL Server è SQLSERVERAGENT. Nel caso di istanze denominate il nome del servizio SQL Server Agent è SQLAgent$instancename.

Se si eseguono più istanze di SQL Server, è possibile usare l'amministrazione multiserver per automatizzare attività comuni a tutte le istanze. Per altre informazioni, vedere Amministrazione automatizzata in un'organizzazione.

Per un'introduzione a SQL Server Agent, usare le attività riportate di seguito:

Descrizione Articolo
Viene descritto come configurare SQL Server Agent. Configurazione di SQL Server Agent
Viene descritto come avviare, arrestare e sospendere il servizio SQL Server Agent. Avvio, arresto o sospensione del servizio SQL Server Agent
Descrive le considerazioni di cui tener conto per specificare un account per il servizio SQL Server Agent. Selezionare un account per il servizio SQL Server Agent
Descrive come utilizzare il log degli errori di SQL Server Agent. Log degli errori di SQL Server Agent
Viene descritto come utilizzare gli oggetti prestazioni. Utilizzo degli oggetti prestazioni
Viene descritta la Creazione guidata piano di manutenzione, un'utilità che consente di usare per creare processi, avvisi e operatori allo scopo di automatizzare l'amministrazione di un'istanza di SQL Server. Usare la Creazione guidata piano di manutenzione
Viene descritto come utilizzare SQL Server Agent per automatizzare le attività amministrative. Automatizzazione delle attività amministrative (SQL Server Agent)

NOSQLPS

A partire da SQL Server 2019, è possibile disabilitare SQLPS. Nella prima riga di un passaggio di processo di tipo PowerShell è possibile aggiungere #NOSQLPS per impedire a SQL Agent di caricare automaticamente il modulo SQLPS. A questo punto, il processo di SQL Agent esegue la versione di PowerShell installata nel computer e quindi è possibile usare qualsiasi altro modulo di PowerShell desiderato.

Per usare il modulo SqlServer nel passaggio del processo di SQL Agent, inserire il codice nelle prime due righe dello script.

#NOSQLPS
Import-Module -Name SqlServer