サーバー上で実行されているすべてのジョブを無効にする必要があります。私はSQLエージェントGUIのどちらかから、与えられたジョブとその関連のスケジュールをチェックするとスクリプトでスケジュールを無効にしてもSQL Serverエージェントジョブが実行されています
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
、またはSQLを介して、私はスケジュールが無効になって見ることができます:私は、次のコードを実行しました。しかし、ジョブはまだ実行されており、msdb.dbo.sysjobschedulesをチェックすると、将来、次回の実行日を見ることができます。
私がオンラインで見たことは、この変更を取り上げるためにリフレッシュする必要があるバックグラウンドスレッドがあることを示唆していますか?そして、それは、私はsp_sqlagent_refresh_job(助けていない)を実行するか、またはサーバーを再起動する必要があります。
私はサーバーを再起動できますが、他の誰かがこの動作を見て、原因を知っていて、別の方法で修正する方法を知っていれば不思議です。
これは良い解決策です。ありがとうございます。私は主に、私がスケジュールを実行し続ける原因となったものについて不思議です。私はmsdb.dbo.sysjobschedulesから次の実行日をクリアしたかどうか、それはそれを行うだろうか? – Quicksilver
正しい方法で、そのテーブルに関するメモが1つあります:20分ごとに更新されます。したがって、sysschedulesでスケジュールを無効にした場合、sysjobschedulesは約20分後に更新されるため、ジョブスケジュールがすぐに変更されることはありません。 – gofr1
スケジュールを無効にしても、以前に開始したジョブが実行されます。それらを停止するには、sp_stop_jobを使用します。 – gofr1