ProgramingTip

SQL 서버에서 저장 프로 시저의 예약 된 실행

bestdevel 2020. 12. 6. 21:51
반응형

SQL 서버에서 저장 프로 시저의 예약 된 실행


저장 프로 시저를 뛰어 넘으십시오.


예, MS SQL Server에서 예약 작업을 만들 수 있습니다. SQL Management Studio에서 서버로 이동 한 다음 SQL Server 에이전트 항목을 확장하고 마지막으로 작업 폴더를 확장하여 예약 된 작업을보고, 편집하고, 추가합니다.


MS SQL Server Express Edition은 SQL Server 에이전트를 사용할 수 없습니다. 다음은 모든 버전에서 작동하는 시스템입니다.

USE Master
GO

IF  EXISTS( SELECT *
            FROM sys.objects
            WHERE object_id = OBJECT_ID(N'[dbo].[MyBackgroundTask]')
            AND type in (N'P', N'PC'))
    DROP PROCEDURE [dbo].[MyBackgroundTask]
GO

CREATE PROCEDURE MyBackgroundTask
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- The interval between cleanup attempts
    declare @timeToRun nvarchar(50)
    set @timeToRun = '03:33:33'

    while 1 = 1
    begin
        waitfor time @timeToRun
        begin
            execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure];
        end
    end
END
GO

-- Run the procedure when the master database starts.
sp_procoption    @ProcName = 'MyBackgroundTask',
                @OptionName = 'startup',
                @OptionValue = 'on'
GO

몇 가지 참고 사항 :


예, SQL Server 에이전트를 사용하는 경우입니다.

관심있는 SQL Server 인스턴스 아래의 관리 폴더로 이동합니다. 여기에 SQL Server 에이전트가 표시되고 그 아래에 작업 섹션이 표시됩니다.

여기에서 새 작업을 생성 할 수 있습니다. 새 단계를 생성 할 때 저장 프로 시저를 사용하기 시작하기 유형을 이용할 수 있습니다. 데이터베이스를 선택한 다음 명령 섹션에 대해 다음과 같이 입력하십시오.

exec MyStoredProcedure

이것이 개요입니다. 추가 조언이 필요하면 여기에 다시 게시하세요.

[실제로 내가 이걸 먼저 할 거라고 생각했는데, 내가 틀렸어 :)]


찾고있는 답은 아닐 수 있지만 윈도우 서버 스케줄러 작업 를 사용하는 것이 더 유용합니다.

명령을 직접 사용할 수 있습니다. sqlcmd.exe -S "." -d YourDataBase -Q "exec SP_YourJob"

또는 .bat파일을 만들 수도 있습니다 . 따라서 요청시 작업을 2 번 클릭 할 수도 있습니다.

이것은 여기에 접근했습니다


한 가지만 추가하겠습니다. 예전에 우리는 매일 밤 많은 일괄 작업을 수행했습니다. 그러나 우리는 각 작업을 시작하는 Windows 예약 작업에 예약 된 클라이언트 응용 프로그램을 사용하는 이동하고 있습니다. 이에 대한 (적어도) 세 가지 이유가 있습니다.

  1. 매일 밤 실행해야하는 콘솔 프로그램도 있습니다. 이렇게하면 모든 예약이 가능한 작업이 있습니다. 물론 이것은 단일 실패 지점을 생성하지만 콘솔 작업이 실행되지 않는 것은 어쨌든 다음 날 하루의 작업을 잃게입니다.

  2. 작업을 시작하는 프로그램은 서버에서 인쇄 메시지와 오류를 캡처하여 모든 배치 프로세스에 대한 공통 애플리케이션 로그에 기록합니다. SQL 작업을 사용하여 로깅을 훨씬 간단하게 만듭니다.
  3. 서버를 업그레이드해야하는 경우 (곧이 작업을 수행 할 예정 임) 작업 이동에 대해 걱정할 필요가 없습니다. 응용 프로그램을 한 번만 다시 지정하십시오.

정말 짧은 VB.Net 앱입니다. 관심있는 사람이 있으면 코드를 게시 할 수 있습니다.


Management Studio 사용-작업 생성 (SQL Server 에이전트 제외) 하나의 작업에는 T-SQL 스크립트에서 SSIS 패키지까지 여러 단계가 포함될 수 있습니다.

Jeb은 더 빨랐습니다.)


SQL Server Service Broker 를 사용하여 사용자 지정 메커니즘을 만들 수 있습니다 .

아이디어 (간체) :

  1. 대화를 시작하는 저장 프로 시저 / 트리거 ( BEGIN DIALOG )를 루프백 (FROM my_service TO my_service)으로 작성-대화 핸들러 가져 오기

    DECLARE @dialog UNIQUEIDENTIFIER;
    
    BEGIN DIALOG CONVERSATION @dialog
            FROM SERVICE   [name] 
            TO SERVICE      'name' 
            ...;
    
  2. 대화 타이머 시작

    DECLARE @time INT;
    BEGIN CONVERSATION TIMER (@dialog)  TIMEOUT = @time;
    
  3. 지정된 시간 (초) 후에 메시지가 서비스로 전송됩니다. 연결된 대기열과 함께 대기열에 추가됩니다.

    CREATE QUEUE queue_name WITH STATUS = ON, RETENTION = OFF
                 , ACTIVATION (STATUS = ON, PROCEDURE_NAME = <procedure_name>
                 , MAX_QUEUE_READERS = 20, EXECUTE AS N'dbo')
                  , POISON_MESSAGE_HANDLING (STATUS = ON) 
    
  4. 프로시 저는 특정 코드와 reanable 타이머를 실행하여 다시 실행합니다.


Michał Gołoś가 작성한 작업 스케줄러 라는 완전히 구워진 솔루션 (T-SQL)을 찾을 수 있습니다.

블로그의 요점 :

장점 :

  • 각 버전에서 지원됩니다 (Express에서 Enterprise로). SQL Server Express에는 SQL Server 에이전트 작업을 사용할 수 없습니다.
  • 데이터베이스 수준으로 범위가 지정됩니다. 관련 작업이있는 데이터베이스를 쉽게 이동할 수 있습니다 (특히 한 환경에서 다른 환경으로 약 100 개의 작업을 이동해야하는 경우).
  • 작업 조회 / 조작에 필요한 낮은 권한 (데이터베이스 수준)

제안 된 구분 :

SQL Server 에이전트 (유지 관리) :

  • 백업
  • 인덱스 / 통계 재 구축
  • 복제

작업 스케줄러 (비즈니스 프로세스) :

  • 오래된 데이터 제거
  • 사전 집계 / 순환 재 계산
  • 비정규 화

설정 방법 :

  • 섹션에서 소스 코드 가져 오기 : "Do pobrania"-다운로드하려면 (브로커 활성화 / 스키마 tsks / configuration 테이블 + 트리거 + 저장 프로 시저 설정) / 브로커 항목 설정)
  • [tsks].[tsksx_task_scheduler]새 작업을 추가 하기위한 구성 테이블 설정 (열 이름은 자체 설명 적이며 샘플 작업 포함)

경고 : 블로그는 폴란드어로 작성되었지만 관련 소스 코드는 영어로되어 있으며 따라하기 쉽습니다.

경고 2 : 사용하기 전에 비 프로덕션 환경에서 테스트했는지 확인하십시오.


SQL 서버를 사용하여 에이전트 예약작업을 확인 해야 우리합니다 .

참고 URL : https://stackoverflow.com/questions/287060/scheduled-run-of-stored-procedure-on-sql-server

반응형