Sql-Server

計劃停止維護任務

  • December 21, 2016

我需要一些東西來在周六晚上自動停止我的索引維護工作。我怎麼做?如何自動檢查我的索引維護作業是否仍在執行,如果它正在執行,請在每個星期六晚上 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'

引用自:https://dba.stackexchange.com/questions/158714