2011-10-11 3 views
0

마스터 저장 프로 시저에 의해 트리거되는 여러 데이터베이스에서 유지 관리 작업 집합이 있습니다. 마스터 저장 프로시 저는 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 

답변

3

kill 명령을 사용하여 세션을 종료 할 수 있습니다. 올바른 세션은 dm_exec_requestssys.fn_get_sql()입니다.

declare @nuke_spid int 

select @nuke_spid = session_id 
from sys.dm_exec_requests r 
outer apply sys.fn_get_sql(r.sql_handle) s 
where s.text like '%dm_exec_requests r%' 

exec ('kill ' + @nuke_spid) 

이 반환해야 Cannot use KILL to kill your own process.

-1

왜 무한 루프에서 저장 프로 시저를 실행 : 여기

은 내 마스터 스케줄링 시저에 대한 스크립트입니다? 지정된 날짜/시간에 SP를 실행하도록 작업을 예약하십시오.

관련 문제