

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation de SQL Server Agent pour Amazon RDS
<a name="Appendix.SQLServer.CommonDBATasks.Agent"></a>

Avec Amazon RDS, vous pouvez utiliser SQL Server Agent sur une instance de base de données exécutant Microsoft SQL Server Enterprise Edition, Standard Edition ou Web Edition. SQL Server Agent est un service Microsoft Windows qui exécute des tâches administratives planifiées, appelées travaux. Vous pouvez utiliser SQL Server Agent pour exécuter les travaux T-SQL jobs afin de reconstruire les index, d'exécuter les contrôles de corruption et de regrouper les données dans une instance de base de données SQL Server.

Lorsque vous créez une instance de base de données SQL Server, l'utilisateur principal est inscrit dans le rôle `SQLAgentUserRole`.

SQL Server Agent peut exécuter un travail en fonction d'une planification, en réponse à un événement spécifique, ou à la demande. Pour plus d'informations, consultez [SQL Server Agent](http://msdn.microsoft.com/en-us/library/ms189237) dans la documentation Microsoft.

**Note**  
Évitez de planifier l'exécution de travaux pendant les fenêtres de maintenance et de sauvegarde de votre instance de base de données. Les processus de maintenance et de sauvegarde lancés par AWS peuvent interrompre un travail ou entraîner son annulation.  
Dans les déploiements Multi-AZ, les tâches de l’agent SQL Server sont répliquées de l’hôte principal vers l’hôte secondaire lorsque la fonction de réplication des tâches est activée. Pour plus d’informations, consultez [Activation de la réplication des tâches de l'agent SQL Server](#SQLServerAgent.Replicate).  
Les déploiements multi-AZ sont limités à 10 000 tâches SQL Server Agent. Si une limite plus élevée est nécessaire, demandez une augmentation en contactant le Support. Ouvrez la page du [Centre AWS Support](https://console.aws.amazon.com/support/home#/), connectez-vous si nécessaire, puis choisissez **Create case (Créer une demande de support)**. Sélectionnez **Service Limit increase (Augmentation des limites de service)**. Remplissez et envoyez le formulaire.

Pour afficher l'historique d'un travail SQL Server Agent dans SQL Server Management Studio (SSMS), ouvrez l'Explorateur d'objet, cliquez avec le bouton droit sur le travail, puis cliquez sur **View History (Afficher l'historique)**.

Étant donné que SQL Server Agent est exécuté sur un hôte géré dans une instance de base de données, certaines actions ne sont pas prises en charge :
+ L'exécution de travaux de réplication et de scripts de ligne de commande à l'aide d'ActiveX, du shell de commande Windows ou de Windows PowerShell n'est pas prise en charge.
+ Vous ne pouvez pas démarrer, arrêter ou redémarrer manuellement SQL Server Agent.
+ Les notifications par e-mail via SQL Server Agent ne sont pas disponibles à partir d'une instance de base de données.
+ Les alertes et les opérateurs SQL Server Agent ne sont pas pris en charge.
+ L'utilisation de SQL Server Agent pour créer des sauvegardes n'est pas prise en charge. Utilisez Amazon RDS for sauvegarder votre instance de base de données.
+ RDS for SQL Server ne prend pas en charge actuellement l’utilisation de jetons SQL Server Agent.

## Activation de la réplication des tâches de l'agent SQL Server
<a name="SQLServerAgent.Replicate"></a>

Vous pouvez activer la réplication des tâches de l'agent SQL Server à l'aide de la procédure stockée suivante :

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob';
```

Vous pouvez exécuter la procédure stockée sur toutes les versions de SQL Server prises en charge par Amazon RDS for SQL Server. Les tâches des catégories suivantes sont répliquées :
+ [Uncategorized (Local)] ([Non classé (local)])
+ [Uncategorized (Multi-Server)] ([Non classé (multi-serveurs)])
+ [Uncategorized] ([Non classé])
+ Data Collector (Collecteur de données)
+ Database Engine Tuning Advisor (Assistant Paramétrage du moteur de base de données)
+ Database Maintenance (Maintenance de base de données)
+ Full-Text (Texte intégral)

Seules les tâches qui utilisent des étapes de travail T-SQL sont répliquées. Les tâches comportant des types d'étapes tels que SQL Server Integration Services (SSIS), SQL Server Reporting Services (SSRS), Replication et PowerShell ne sont pas répliquées. Les tâches qui utilisent Database Mail (Messagerie de base de données) et les objets au niveau du serveur ne sont pas répliquées.

**Important**  
L'hôte principal est la source de vérité pour la réplication. Avant d'activer la réplication des tâches, assurez-vous que vos tâches SQL Server Agent se trouvent sur l'hôte principal. Si vous ne le faites pas, cela pourrait entraîner la suppression de vos tâches SQL Server Agent si vous activez la fonctionnalité lorsque des tâches plus récentes se trouvent sur l'hôte secondaire.

Vous pouvez utiliser la fonction suivante pour confirmer si la réplication est activée.

```
SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();
```

 La requête T-SQL renvoie le résultat suivant si les tâches de l'agent SQL Server sont répliquées. Si elles ne se répliquent pas, la requête ne renvoie rien pour `object_class`.

![\[Les tâches de l'agent SQL Server sont répliquées.\]](http://docs.aws.amazon.com/fr_fr/AmazonRDS/latest/UserGuide/images/SQLAgentJob.png)


Vous pouvez utiliser la fonction suivante pour trouver la dernière synchronisation des objets selon le fuseau horaire UTC.

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

Par exemple, supposons que vous modifiez une tâche de l'agent du serveur SQL à 01:00. Vous vous attendez à ce que l'heure de synchronisation la plus récente soit postérieure à 01:00, indiquant que la synchronisation a eu lieu.

Après la synchronisation, les valeurs renvoyées pour `date_created` et `date_modified` sur le nœud secondaire doivent correspondre.

![\[La dernière fois que les objets du serveur ont été synchronisés était à 01:21:23\]](http://docs.aws.amazon.com/fr_fr/AmazonRDS/latest/UserGuide/images/SQLAgentJob_last_sync_time.png)


Si vous utilisez également la réplication `tempdb`, vous pouvez activer la réplication à la fois pour les tâches SQL Agent et pour la configuration `tempdb` en les fournissant dans le paramètre `@object_type` :

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob,TempDbFile';
```

Pour plus d’informations sur la réplication `tempdb`, consultez [Configuration de TempDB pour les déploiements multi-AZ](SQLServer.TempDB.MAZ.md).

# Rôles SQL Server Agent
<a name="SQLServerAgent.AgentRoles"></a>

RDS for SQL Server prend en charge les rôles SQL Server Agent suivants avec différents niveaux d’autorisation pour la gestion des tâches :
+ **SQLAgentUserRole**

  Autorisations
  + Créer et gérer leurs propres tâches, planifications et opérateurs
  + Afficher les propriétés de leurs propres tâches et planifications
  + Impossible d’afficher ou de gérer les tâches créées par d’autres utilisateurs

  Ce rôle convient aux utilisateurs qui doivent créer et gérer leurs propres tâches, mais qui n’ont pas besoin d’accéder à celles créées par d’autres utilisateurs.
+ **SQLAgentReaderRole**

  Autorisations
  + Toutes les autorisations de SQLAgentUserRole
  + Afficher la liste de toutes les tâches et planifications, y compris celles créées par d’autres
  + Afficher les propriétés de toutes les tâches
  + Consulter l’historique des tâches

  Ce rôle convient aux utilisateurs qui ont besoin de surveiller l’état de toutes les tâches, mais qui n’ont pas besoin de les gérer.
+ **SQLAgentOperatorRole**

  Autorisations
  + Toutes les autorisations de SQLAgentUserRole et de SQLAgentReaderRole
  + Exécuter, arrêter ou démarrer des tâches
  + Gérer l’historique des tâches
  + Activer/désactiver les tâches et les planifications
  + Afficher les opérateurs et les proxys

  Ce rôle fournit les autorisations les plus complètes et convient aux utilisateurs qui ont besoin d’un contrôle total sur toutes les tâches.

Exécutez la commande suivante pour attribuer les rôles à votre identifiant SQL Server :

```
USE msdb;
EXEC sp_addrolemember 'SQLAgentOperatorRole', 'username';
```

## Gestion de SQLAgentOperatorRole dans RDS for SQL Server
<a name="SQLServerAgent.AgentRoles.ManageSQLAgentOperatorRole"></a>

Pour afficher les tâches en cours, vous devez ajouter le rôle SQLAgentOperatorRole à votre identifiant SQL Server et le supprimer avant de vous déconnecter de votre base de données.

Pour visualiser l’arborescence de SQL Server Agent dans SQL Server Management Studio, suivez les instructions suivantes :

**Afficher SQL Server Agent sur SQL Server Management Studio (SSMS)**

1. À l’aide des informations d’identification principales RDS, connectez-vous à l’instance RDS SQL Server et attribuez le rôle SQLAgentUserRole à l’utilisateur souhaité.

   ```
   USE msdb
   GO
   IF NOT EXISTS(SELECT name FROM sys.database_principals WHERE name = 'UserName')
   BEGIN
   CREATE USER UserName FROM LOGIN UserName
   END
   GO
   ALTER ROLE SQLAgentUserRole ADD MEMBER UserName
   GO
   GRANT ALTER ON ROLE::[SQLAgentOperatorRole] to UserName
   GO
   ```

   Ces commandes créent l’utilisateur dans la base de données `msdb`, dans le cas où elle n’existerait pas. Elles ajoutent également l’utilisateur au rôle SQLAgentUserRole, de sorte que l’arborescence SQL Server Agent sur SSMS soit visible. Enfin, elles accordent à l’utilisateur des autorisations de modification sur le rôle SQLAgentOperatorRole. Cela permet à l’utilisateur de s’ajouter/de se supprimer lui-même pour ce rôle. 

1. Pour vous ajouter au rôle mentionné ci-dessus, connectez-vous à l’instance RDS SQL Server, avec l’utilisateur qui a besoin de voir les tâches, et exécutez le script suivant.

   ```
   use msdb
   go
   ALTER ROLE SQLAgentOperatorRole ADD MEMBER UserName
   GO
   ```

   Ensuite, cliquez avec le bouton droit sur le dossier **Tâches**, puis choisissez **Actualiser**.

1. Lorsque vous effectuez cette action, l’onglet **Tâches** affiche un bouton **\$1** (plus). Cliquez pour développer la liste des tâches SQL Server Agent.

1. 
**Important**  
Avant de vous déconnecter de l’instance RDS SQL Server, vous devez vous retirer du rôle SQLAgentOperatorRole.

   Pour supprimer votre connexion au rôle SQLAgentOperatorRole, exécutez la requête suivante avant de vous déconnecter ou de fermer le Management Studio :

   ```
   USE msdb
   GO
   ALTER ROLE SQLAgentOperatorRole DROP MEMBER UserName
   GO
   ```

Pour plus d’informations, consultez [Utilisation du rôle SQLAgentOperatorRole dans RDS SQL Server](https://aws.amazon.com/blogs/database/leveraging-sqlagentoperatorrole-in-rds-sql-server/).

# Ajout d'un utilisateur au rôle SQLAgentUser
<a name="SQLServerAgent.AddUser"></a>

Pour ajouter un utilisateur/une connexion supplémentaire afin d'utiliser SQL Server Agent, connectez-vous en tant qu'utilisateur principal et exécutez les actions suivantes :

1. Créez une autre connexion de niveau serveur à l'aide de la commande `CREATE LOGIN`.

1. Créez un utilisateur dans `msdb` avec la commande `CREATE USER` puis liez cet utilisateur à la connexion que vous avez créée à l'étape précédente.

1. Ajoutez l'utilisateur à la procédure `SQLAgentUserRole` à l'aide de la procédure stockée système `sp_addrolemember`.

Par exemple, supposons que votre identifiant principal soit **admin** et que vous souhaitez accorder l'accès à SQL Server Agent à un utilisateur nommé **theirname** avec le mot de passe **theirpassword**. Dans ce cas, vous pouvez utiliser la procédure suivante.

**Pour ajouter un utilisateur au rôle SQLAgentUser**

1. Connectez-vous en tant qu'utilisateur principal.

1. Exécutez les commandes suivantes :

   ```
   --Initially set context to master database
   USE [master];
   GO
   --Create a server-level login named theirname with password theirpassword
   CREATE LOGIN [theirname] WITH PASSWORD = 'theirpassword';
   GO
   --Set context to msdb database
   USE [msdb];
   GO
   --Create a database user named theirname and link it to server-level login theirname
   CREATE USER [theirname] FOR LOGIN [theirname];
   GO
   --Added database user theirname in msdb to SQLAgentUserRole in msdb
   EXEC sp_addrolemember [SQLAgentUserRole], [theirname];
   ```

# Suppression d'une tâche SQL Server Agent
<a name="SQLServerAgent.DeleteJob"></a>

Vous utilisez la procédure stockée `sp_delete_job` pour supprimer les travaux de l’agent SQL Server sur Amazon RDS for Microsoft SQL Server.

Vous ne pouvez pas utiliser SSMS pour supprimer des travaux de l'agent SQL Server Agent. Si vous le faites, vous obtenez un message d'erreur similaire au suivant :

```
The EXECUTE permission was denied on the object 'xp_regread', database 'mssqlsystemresource', schema 'sys'.
```

Cette erreur survient parce que, en tant que service géré, RDS est empêché d'exécuter les procédures qui accèdent au registre Windows. Lorsque vous utilisez SSMS, celui-ci tente d'exécuter un processus (`xp_regread`) pour lequel RDS n'est pas autorisé.

**Note**  
Sur RDS for SQL Server, seuls les membres du rôle d'administrateur système sont autorisés à mettre à jour ou à supprimer des tâches appartenant à un identifiant de connexion différent. Pour plus d’informations, consultez [Utilisation du rôle SQLAgentOperatorRole dans RDS SQL Server](https://aws.amazon.com/blogs/database/leveraging-sqlagentoperatorrole-in-rds-sql-server/).

**Pour supprimer un travail SQL Server Agent**
+ Exécutez l'instruction T-SQL suivante :

  ```
  EXEC msdb..sp_delete_job @job_name = 'job_name';
  ```