Je dispose d’une base de données relationnelle Amazon (Amazon RDS) pour une instance Multi-AZ de Microsoft SQL Server. Je souhaite synchroniser les tâches de SQL Server Agent entre l’hôte principal et l’hôte secondaire de mon instance.
Brève description
Amazon RDS pour SQL Server utilise la fonction Always On/Mirroring pour la configuration multi-AZ en arrière-plan. SQL Server Agent stocke les tâches dans la base de données système msdb. Cette base de données système n’est pas répliquée dans le cadre de votre déploiement Multi-AZ. Par conséquent, les tâches de SQL Server Agent ne sont pas synchronisées automatiquement. Vous devez donc recréer les tâches sur le nouveau serveur principal après le basculement. Cependant, ces tâches sont présentes sur l’ancien serveur principal où vous les avez créées à l’origine. Si vous ramenez l’instance à l’instance principale précédente (où vous avez créé les tâches), les tâches s’affichent toujours. Pour créer les tâches dans Multi-AZ, créez-les d’abord dans l’instance principale (active). Passez ensuite sur l’instance RDS et créez les mêmes tâches sur la nouvelle instance principale.
Pour éviter la création manuelle de tâches sur le nouveau serveur principal, activez la réplication des tâches de SQL Server Agent. Lorsque vous activez la réplication des tâches dans votre environnement multi-AZ, de SQL Server Agent copie automatiquement les tâches de l’hôte principal vers l’hôte secondaire. Il n’est pas nécessaire de créer les tâches manuellement sur le nouveau réplica principal, car elles ont été synchronisées via la fonctionnalité de réplication de SQL Server Agent. Les tâches sont disponibles dans les deux réplicas.
Pour plus d’informations, consultez la section Déploiements multi-AZ pour Amazon RDS for Microsoft SQL Server.
Remarque : la résolution suivante ne s’applique pas à Amazon RDS Custom pour SQL Server.
Résolution
Activer la fonctionnalité de réplication de SQL Server Agent
Pour activer la réplication des tâches de SQL Server Agent, exécutez la procédure suivante avec le compte administrateur de l’instance principale :
Important : assurez-vous d’exécuter cette procédure sur l’instance sur laquelle toutes les tâches d’agent sont disponibles. Si l’instance sans les tâches d’agent disponibles devient l’instance principale et que vous activez cette fonctionnalité, les tâches de l’instance secondaire sont supprimées. De plus, toutes les tâches existantes et nouvellement créées sont répliquées dans le cadre de cette fonctionnalité.
EXECUTE msdb.dbo.rds_set_system_database_sync_objects
@object_types = 'SQLAgentJob';
Vérifier que la fonctionnalité de réplication de SQL Server Agent est activée
Vérifiez que la fonction de réplication est activée :
SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();
Cette requête renvoie SQLagentjob pour object_class si la fonction de réplication est activée. Si la requête ne renvoie rien, c’est que la fonctionnalité n’est pas activée.
Vérifier quand les tâches modifiées et les nouvelles tâches ont été synchronisées pour la dernière fois avec la tâche secondaire
Vérifiez la last_sync_time de la réplication :
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
Dans les résultats de la requête, si l’heure de synchronisation est supérieure à l’heure de mise à jour ou de création de la tâche, c’est que la tâche est synchronisée avec la tâche secondaire.
Remarque : si vous ne connaissez pas l’heure de création ou de mise à jour de la tâche, exécutez d’abord la requête suivante pour récupérer l’horodatage :
select name as 'JobName'
,JobStatus = CASE
When enabled =1 Then 'Active'
Else 'Inactive'
END
,date_created As 'JobCreatedOn' ,date_modified as 'LastModified'
from msdb..sysjobs
Remarque : la synchronisation des tâches entre les réplicas ne prend que quelques minutes.
Pour effectuer un basculement de base de données afin de confirmer que les tâches sont bien répliquées, attendez d’abord que la last_sync_time soit mise à jour. Procédez ensuite au basculement multi-AZ.
Catégories de tâches prises en charge et non prises en charge pour la réplication des tâches des agents
Les tâches dans les catégories suivantes sont répliquées :
- [Uncategorized (Local)]
- [Uncategorized (Multi-Server)]
- [Uncategorized]
- Collecteur de données
- Conseiller en optimisation des moteurs de base de données
- Maintenance des bases de données
- Texte intégral
Remarque : seules les tâches qui utilisent le type d’étape comme réplication T-SQL.
Les catégories suivantes ne prennent pas en charge la réplication :
- Tâches comportant des types d’étapes comme SQL Server Integration Services (SSIS), SQL Server Reporting Services (SSRS), la réplication ou PowerShell.
- Tâches utilisant Database Mail et des objets au niveau du serveur.
Désactiver la réplication des tâches de l’agent SQL Server
Pour désactiver la réplication des tâches de l’agent SQL Server, exécutez la commande suivante :
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = '';
Une fois la réplication désactivée, les modifications apportées aux tâches existantes et nouvellement créées ne sont plus synchronisées avec l’autre réplica.