마스터 저장 프로 시저에 의해 트리거되는 여러 데이터베이스에서 유지 관리 작업 집합이 있습니다. 마스터 저장 프로시 저는 sp_procoption을 사용하여 시작되어 mssql 시작시 시작됩니다. 그런 다음 지정된 날짜와 시간에 모든 데이터베이스에서 하위 프로 시저를 실행합니다.스크립트에서 장기 실행 저장 프로 시저 중지
이 마스터 스크립트를 업데이트해야합니다.
업데이트 절차를 정리하고 sql을 중지하고 다시 시작하지 않아도되도록 (마스터 프로 시저의 인스턴스가 하나만 실행되도록하려면) 저장 프로 시저를 중지 한 다음 끝에 다시 시작하고 싶습니다. 업데이트 스크립트. 다시 시작하는 것은 문제가 아니지만 누구나 업데이트 스크립트에서 프로 시저를 중지하는 방법을 알고 있습니까?
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