Je dois désactiver tous les travaux exécutés sur un serveur. J'ai couru le code suivant:Les tâches SQL Server Agent s'exécutent même si j'ai désactivé la planification dans le script
declare @t table (schedule_id int, [name] varchar(300))
update msdb.dbo.sysschedules
set enabled = 0
output inserted.schedule_id, inserted.name into @t
from msdb.dbo.sysjobs j
join msdb.dbo.sysjobschedules js
on j.job_id = js.job_id
join msdb.dbo.sysschedules s
on js.schedule_id = s.schedule_id
where j.[name] not like 'DB -%' and j.[name] not like 'sys%' and j.[name] not like 'Maintenance%'
select * from @t
Quand je vérifie un emploi donné et son programme associé, soit à partir de l'interface graphique Agent SQL ou via SQL, je peux voir l'horaire est désactivé. Toutefois, les travaux sont toujours en cours d'exécution et je peux voir les prochaines dates d'exécution dans le futur si je consulte msdb.dbo.sysjobschedules. Les seules choses que j'ai vues en ligne suggèrent qu'il y a un thread de fond qui doit être rafraîchi pour prendre ce changement? Et ce faisant, j'ai besoin de lancer sp_sqlagent_refresh_job (n'a pas aidé), ou redémarrer le serveur.
Je peux redémarrer le serveur, mais je suis curieux de savoir si quelqu'un d'autre a vu ce comportement, connaît la cause, sait comment le réparer d'une autre manière.
C'est une bonne solution, merci. Je suis surtout curieux de savoir ce que j'ai manqué qui fait que les horaires continuent à courir. Je me demande si j'ai effacé les prochaines dates d'exécution de msdb.dbo.sysjobschedules, cela le ferait? – Quicksilver
Vous étiez sur la bonne voie, il y a une note à propos de cette table: elle rafraîchit toutes les 20 minutes. Donc, si vous avez désactivé les plannings dans sysschedules, les sysjobschedules seront actualisés dans les 20 prochaines minutes, vous ne pourrez donc pas voir les plannings des jobs changer immédiatement. – gofr1
Et même si vous désactivez les planifications, les tâches démarrées plus tôt seront exécutées. Pour les arrêter, utilisez sp_stop_job. – gofr1