Sql-Server
計劃停止維護任務
我需要一些東西來在周六晚上自動停止我的索引維護工作。我怎麼做?如何自動檢查我的索引維護作業是否仍在執行,如果它正在執行,請在每個星期六晚上 12 點之前停止它?
現在我手動使用:
USE msdb GO EXEC dbo.sp_stop_job N'The name of the job'
如何在特定時間自動停止作業?
我認為一種快速的方法是創建一個計劃在每週六凌晨 12:00 執行的監控作業,並且在此監控作業中,您只需要一個步驟,如下所示:
use msdb declare @index_jobname varchar(255) = '<your index job name>'; if exists( select a.* from msdb.dbo.sysjobactivity a inner join msdb.dbo.sysjobs j on a.job_id = j.job_id and j.name = @index_jobname and a.stop_execution_date is null ) begin print 'index maint job is stopped'; exec sp_stop_job @job_name=@index_jobname; end
以程式方式,您可以使用
DATEName(DW, GETDATE())
時間來查看是否是星期六,然後讓您的sp_stop_job
跑步停止工作。您可以將該程式碼放入
IF
.. 檢查星期六和時間,然後執行停止作業程式碼,否則正常退出。如果您使用Ola 的索引維護解決方案(或 Minnionware - 我沒有使用它,因為我使用的是前者)會好得多。
EXECUTE dbo.IndexOptimize @Databases = 'ALL_DATABASES', @FragmentationLow = NULL, @FragmentationMedium = 'INDEX_REORGANIZE', @FragmentationHigh = 'INDEX_REORGANIZE', @FragmentationLevel1 = 5, @FragmentationLevel2 = 30, @UpdateStatistics = 'ALL', @OnlyModifiedStatistics = 'Y', @TimeLimit = 5400, -- 90 minutes, specified in seconds @LogToTable = 'Y', @Indexes = 'ALL_INDEXES', @SortInTempdb = 'Y'