SQL Server Agent

S’applique à : SQL Server Azure SQL Managed Instance

Cet article fournit une vue d’ensemble de SQL Server Agent, qui est un service Microsoft Windows qui exécute des tâches d’administration planifiées (appelées tâches) dans SQL Server et Azure SQL Managed Instance.

Important

Dans Azure SQL Managed Instance, la plupart, mais pas toutes les fonctionnalités SQL Server Agent sont actuellement prises en charge. Pour plus d’informations, consultez Différences T-SQL entre Azure SQL Managed Instance et SQL Server.

Avantages de SQL Server Agent

SQL Server Agent utilise SQL Server pour stocker des informations sur les travaux. Les travaux contiennent une ou plusieurs étapes de travail. Chaque étape contient sa propre tâche, par exemple, la sauvegarde d'une base de données.

SQL Server Agent peut exécuter un travail selon une planification, en réponse à un événement spécifique ou sur demande. Par exemple, si vous sauvegardez l’ensemble des serveurs de l’entreprise chaque jour ouvrable après les horaires de bureau, vous pouvez automatiser cette tâche. Planifiez l’exécution de la sauvegarde après 22h00 du lundi au vendredi. Si la sauvegarde rencontre un problème, SQL Server Agent peut enregistrer l’événement et vous en avertir.

Notes

Par défaut, le service SQL Server Agent est désactivé quand SQL Server est installé, sauf si l’utilisateur choisit explicitement de démarrer automatiquement le service.

SQL Server Agent Components

SQL Server Agent utilise les composants ci-après pour définir les tâches à exécuter et quand, et pour signaler si elles ont réussi ou échoué.

Utilisez le Gestionnaire de configuration SQL Server pour gérer le service SQL Server Agent et utiliser SQL Server Management Studio (SSMS) pour gérer facilement les propriétés, les tâches, les alertes, les opérateurs et les proxys SQL Server Agent dans une interface utilisateur graphique.

travaux

Un travail est une série d’actions spécifiées effectuées par SQL Server Agent. Utilisez des travaux pour définir une tâche d’administration qui peut être exécutée une ou plusieurs fois, et dont la réussite ou l’échec sont surveillés. Un travail peut s’exécuter sur un serveur local ou sur plusieurs serveurs distants.

Important

Les travaux SQL Server Agent qui s’exécutent au moment d’un événement de basculement sur une instance de cluster de basculement SQL Server ne reprennent pas sur un autre nœud de cluster de basculement après le basculement. Les travaux SQL Server Agent qui s’exécutent au moment où un nœud Hyper-V est mis en pause ne reprennent pas si la pause provoque un basculement vers un autre nœud. Les travaux qui commencent mais ne peuvent pas se terminer à cause d'un événement de basculement sont enregistrés comme commencés, mais n'affichent pas d'entrées de journal supplémentaires pour l'achèvement ou l'échec. Les travaux SQL Server Agent dans ces scénarios apparaissent comme ne s’étant jamais terminés.

Vous pouvez exécuter un travail :

  • en fonction d'une ou plusieurs planifications ;

  • en réponse à une ou plusieurs alertes ;

  • En exécutant la procédure stockée sp_start_job.

Chaque action d'un travail est appelée étape du travail. Par exemple, une étape du travail peut être l’exécution d’une instruction Transact-SQL, l’exécution d’un package SSIS ou l’envoi d’une commande à un serveur Analysis Services. Les étapes du travail sont gérées dans le cadre d'un travail.

Chaque étape s'exécute dans un contexte de sécurité spécifique. Pour les étapes du travail qui utilisent Transact-SQL, utilisez l’instruction EXECUTE AS pour définir le contexte de sécurité de l’étape du travail. Pour les autres types d'étapes, utilisez un compte proxy.

Utilisez la procédure stockée système sp_help_job pour obtenir des informations sur une tâche spécifique. Utilisez la table système dbo.sysjobs pour afficher des informations sur les tâches. Par exemple, utilisez l’instruction Transact-SQL (T-SQL) suivante pour afficher des informations sur tous les travaux sur un serveur :

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

Planifications

Une planification programme l'exécution d'un travail. Plusieurs travaux peuvent s’exécuter sur la même planification, et plusieurs planifications peuvent appliquer le même travail. Une planification peut définir les conditions suivantes pour l’heure d’exécution d’un travail :

  • À chaque démarrage de SQL Server Agent.

  • Quand l’utilisation du processeur atteint le niveau d’inactivité que vous avez défini.

  • ponctuellement, à une date et une heure spécifiques ;

  • Selon une planification récurrente.

Pour plus d’informations, consultez Créer des planifications et les attacher à des tâches.

Alertes

Une alerte est une réponse automatique à un événement donné. Par exemple, un événement peut être un travail qui démarre ou des ressources système qui atteignent un seuil spécifique. Vous définissez les conditions selon lesquelles une alerte est déclenchée.

Une alerte peut être une réponse à :

  • Événements SQL Server

  • Conditions des performances de SQL Server

  • Des événements Windows Management Instrumentation sur l'ordinateur qui exécute SQL Server Agent.

Une alerte peut :

  • prévenir un ou plusieurs opérateurs ;

  • Exécuter une tâche

Pour plus d’informations, consultez Alertes.

Opérateurs

Un opérateur définit les informations de contact pour une personne responsable de la maintenance d’une ou plusieurs instances de SQL Server. Dans certaines sociétés, les responsabilités d'opérateur sont affectées à une seule personne. Dans les entreprises qui ont de nombreux serveurs, plusieurs personnes peuvent se partager les responsabilités d'opérateur. Un opérateur ne contient pas d’informations de sécurité et ne définit pas de principal de sécurité.

SQL Server peut envoyer des alertes aux opérateurs via...

  • Messagerie électronique

  • Radiomessagerie (via e-mail)

  • net send

Notes

Pour envoyer des notifications en utilisant net send, le service Windows Messenger doit être actif sur l’ordinateur où SQL Server Agent se trouve.

Important

Les options de récepteur de radiomessagerie et net send seront supprimées de SQL Server Agent dans une version future de SQL Server. Évitez d'utiliser ces fonctionnalités dans une nouvelle tâche de développement et prévoyez de modifier les applications qui les utilisent actuellement.

Pour envoyer des notifications aux opérateurs par e-mail ou par radiomessagerie, vous devez configurer SQL Server Agent pour qu’il utilise Database Mail. Pour plus d’informations, consultez Messagerie de base de données.

Un opérateur peut être l'alias d'un groupe d'individus. De cette façon, tous les membres de cet alias ne sont pas avertis en même temps. Pour plus d’informations, consultez Opérateurs.

Sécurité pour l'administration de SQL Server Agent

SQL Server Agent utilise les rôles de base de données fixes SQLAgentUserRole, SQLAgentReaderRole et SQLAgentOperatorRole de la base de données msdb pour contrôler l’accès à SQL Server Agent pour les utilisateurs qui ne sont pas membres du rôle serveur fixe sysadmin. Outre ces rôles de base de données fixes, les sous-systèmes et les proxys aident les administrateurs de base de données à garantir que chaque étape de travail est exécutée avec les autorisations minimales nécessaires à la réalisation de cette tâche.

Rôles

Les membres des rôles de base de données fixes SQLAgentUserRole, SQLAgentReaderRoleet SQLAgentOperatorRole de msdb et les membres du rôle serveur fixe sysadmin ont accès à SQL Server Agent. Un utilisateur qui n’appartient à aucun de ces rôles ne peut pas utiliser SQL Server Agent. Pour plus d’informations sur les rôles utilisés par SQL Server Agent, consultez Implémenter la sécurité de SQL Server Agent.

Sous-systèmes

Un sous-système est un objet prédéfini qui représente la fonctionnalité disponible pour une étape de travail. Chaque proxy a accès à un ou plusieurs sous-systèmes. Les sous-systèmes assurent la sécurité en délimitant l'accès aux fonctionnalités mises à la disposition d'un proxy. Chaque étape de travail s’exécute dans le contexte d’un proxy, à l’exception des étapes de travail Transact-SQL. Les étapes de travail Transact-SQL utilisent la commande EXECUTE AS pour définir le contexte de sécurité sur le propriétaire du travail.

SQL Server définit les sous-systèmes listés dans le tableau suivant :

Nom du sous-système Description
Script ActiveX Microsoft Permet d'exécuter une étape de travail de script ActiveX

Avertissement Le sous-système de script ActiveX sera supprimé de SQL Server Agent dans une version future de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.
Système d’exploitation (CmdExec) Permet de lancer un programme exécutable.
PowerShell Exécutez une étape de travail de scripts PowerShell.
Serveur de distribution de réplication Permet d'exécuter une étape de travail qui active l'Agent de distribution.
Fusion de réplication Permet d'exécuter une étape de travail qui active l'Agent de fusion.
Agent de lecture de file d'attente de réplication Permet d'exécuter une étape de travail qui active l'Agent de lecture de la file d'attente de réplication.
Instantané de réplication Permet d'exécuter une étape de travail qui active l'Agent d'instantané des réplications.
Agent de lecture du journal des transactions de réplication Permet d'exécuter une étape de travail qui active l'Agent de lecture du journal des réplications.
Commandes Analysis Services Exécuter une commande Analysis Services.
Requête Analysis Services Exécuter une requête Analysis Services.
Exécution de package SSIS Exécuter un package SSIS.

Notes

Comme les étapes de travail Transact-SQL n’utilisent pas de proxys, il n’existe pas de sous-système SQL Server Agent pour les étapes de travail Transact-SQL.

SQL Server Agent applique les restrictions des sous-systèmes même si le principal de sécurité du proxy a généralement l’autorisation d’exécuter cette tâche dans l’étape de travail. Par exemple, un proxy pour un utilisateur qui est membre du rôle serveur fixe sysadmin ne peut pas exécuter une étape de travail SSIS, à moins que le proxy ait accès au sous-système SSIS, même si l’utilisateur peut exécuter des packages SSIS.

Proxies

SQL Server Agent utilise des proxys pour gérer les contextes de sécurité. Un proxy peut être utilisé dans plusieurs étapes de travail. Les membres du rôle de serveur fixe sysadmin peuvent créer des proxys.

Chaque proxy correspond à des informations d'identification de sécurité. Chaque proxy peut être associé à un ensemble de sous-systèmes et de connexions. Le proxy peut être utilisé uniquement pour les étapes de travail qui utilisent un sous-système associé au proxy. Pour créer une étape de travail qui utilise un proxy spécifique, le propriétaire du travail doit utiliser une connexion associée à ce proxy ou être membre d’un rôle sans restriction d’accès aux proxys. Les membres du rôle de serveur fixe sysadmin disposent d'un accès sans restriction aux proxys. Les membres des rôles SQLAgentUserRole, SQLAgentReaderRoleou SQLAgentOperatorRole peuvent utiliser uniquement les proxys pour lesquels un accès spécifique leur a été accordé. Chaque utilisateur membre de l’un des rôles de base de données fixes de SQL Server Agent doit disposer d’un accès à des proxys spécifiques de façon à pouvoir créer les étapes de travail qui les utilisent.

Administration de Automate

Utilisez les étapes suivantes pour configurer SQL Server Agent de façon à automatiser l’administration de SQL Server :

  1. Identifiez les tâches administratives et les événements de serveur se produisant régulièrement et déterminez si ces tâches ou ces événements peuvent être administrés par programme. Une tâche convient à l'automatisation si elle implique une séquence d'étapes prévisibles et se produit à un moment spécifique ou en réponse à un événement particulier.

  2. Définissez un ensemble de travaux, de planifications, d’alertes et d’opérateurs en utilisant SQL Server Management Studio, des scripts Transact-SQL ou SQL Server Management Objects (SMO). Pour plus d’informations, consultez Créer des travaux.

  3. Exécutez les travaux SQL Server Agent que vous avez définis.

Notes

Pour l’instance par défaut de SQL Server, le service SQL Server est nommé SQLSERVERAGENT. Pour les instances nommées, le service SQL Server Agent est nommé SQLAgent$nom_instance.

Si vous exécutez plusieurs instances de SQL Server, vous pouvez utiliser l’administration multiserveur pour automatiser des tâches courantes dans toutes les instances. Pour plus d’informations, consultez Administration automatisée à l’échelle d’une entreprise.

Utilisez les tâches suivantes pour démarrer avec SQL Server Agent :

Description Article
Explique comment configurer SQL Server Agent. Configurer l'Agent SQL Server
Explique comment démarrer, arrêter et interrompre le service SQL Server Agent. Démarrer, arrêter ou suspendre le service SQL Server Agent
Décrit les considérations à prendre en compte lors de la spécification d'un compte pour le service SQL Server Agent. Sélectionner un compte pour le service SQL Server Agent
Explique comment utiliser le journal des erreurs de SQL Server Agent. Journal des erreurs de l'Agent SQL Server
Explique comment utiliser des objets de performances. Utiliser des objets de performance
Décrit l’Assistant Plan de maintenance, un utilitaire que vous utilisez pour créer des travaux, des alertes et des opérateurs afin d’automatiser l’administration d’une instance de SQL Server. Utiliser l'Assistant Plan de maintenance
Explique comment automatiser des tâches administratives à l'aide de l'Agent SQL Server. Tâches d'administration automatisée (Agent SQL Server)

NOSQLPS

À partir de SQL Server 2019, vous pouvez désactiver SQLPS. Sur la première ligne d’une étape de travail de type PowerShell, vous pouvez ajouter #NOSQLPS, ce qui empêche SQL Agent de charger automatiquement le module SQLPS. À présent, la tâche de votre SQL Agent exécute la version de PowerShell installée sur l’ordinateur, puis vous pouvez utiliser n’importe quel autre module PowerShell de votre choix.

Pour utiliser le module SqlServer à l’étape de la tâche de votre SQL Agent, vous pouvez placer ce code sur les deux premières lignes de votre script.

#NOSQLPS
Import-Module -Name SqlServer