我在由主存儲過程觸發的幾個數據庫中擁有一組維護任務。主存儲過程使用sp_procoption在mssql啓動時啓動。然後在指定的日期和時間,在我的所有數據庫中運行子程序。從腳本中停止長時間運行的存儲過程
我需要更新這個主腳本。
要清理更新過程,並且不需要停止並重新啓動sql(以確保只有一個主過程實例正在運行),我希望能夠停止存儲過程,然後在最後重新啓動它的更新腳本。重新啓動不是問題,但有誰知道一種方法來停止更新腳本中的過程?
這裏是我的主生產計劃PROC腳本:
USE master
GO
IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'weekly_maintenance_task')
DROP PROCEDURE weekly_maintenance_task
GO
CREATE PROCEDURE [dbo].[weekly_maintenance_task]
AS
BEGIN
SET NOCOUNT ON
DECLARE @timeToRun nvarchar(50)
SET @timeToRun = '02:30:00'
DECLARE @dayToRun nvarchar(10)
SET @dayToRun = 'SUNDAY'
WHILE 1 = 1
BEGIN
WAITFOR time @timeToRun
BEGIN
DECLARE @dayOfWeek NVARCHAR(10)
SELECT @dayOfWeek = CASE DATEPART(weekday, GETDATE())
WHEN 1 THEN 'SUNDAY'
WHEN 2 THEN 'MONDAY'
WHEN 3 THEN 'TUESDAY'
WHEN 4 THEN 'WEDNESDAY'
WHEN 5 THEN 'THURSDAY'
WHEN 6 THEN 'FRIDAY'
WHEN 7 THEN 'SATURDAY'
END
IF (@dayOfWeek = @dayToRun)
BEGIN
EXECUTE sp_msforeachdb 'USE ?
IF DB_NAME() NOT IN (''master'', ''msdb'',''tempdb'',''model'')
IF EXISTS (select * from sys.procedures where name=''database_maintenance_weekly'')
EXECUTE database_maintenance_weekly'
END
END
END
END
GO
sp_procoption @ProcName = 'weekly_maintenance_task',
@OptionName = 'startup',
@OptionValue = 'on'
GO