source

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

ittop 2023. 7. 6. 22:34
반응형

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

저장 프로시저를 정기적으로 실행하도록 Microsoft SQL Server를 설정할 수 있습니까?

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

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 서버 에이전트를 사용하는 경우.

Enterprise Manager를 열고 원하는 SQL Server 인스턴스 아래의 Management 폴더로 이동합니다.여기에는 SQL 서버 에이전트가 표시되고 그 아래에는 작업 섹션이 표시됩니다.

여기서 새 작업을 생성할 수 있으며 생성해야 하는 단계 목록이 표시됩니다.새 단계를 생성할 때 저장 프로시저를 실제로 실행하는 단계를 지정할 수 있습니다(TSQL Script 유형).데이터베이스를 선택한 다음 명령 섹션에 대해 다음과 같은 내용을 입력합니다.

exec MyStoredProcedure

이상이 개요입니다. 추가 조언이 필요하면 여기에 다시 게시하십시오.

[나는 사실 내가 이것에 먼저 들어갈 수 있을 거라고 생각했어, 얘야, 내가 틀렸었어 :)]

원하는 답은 아닐 수도 있지만 Windows Server Task Scheduler를 사용하는 것이 더 유용합니다.

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

또는 생성하기도 합니다..bat요청 시 작업을 두 번 클릭할 수 있습니다.

이는 여기에서도 접근되었습니다.

한 가지 덧붙이자면, 제가 있는 곳에서는 매일 밤 실행되는 일괄 작업이 많이 있었습니다.그러나 이 작업에서 벗어나 각 작업을 시작하는 Windows 예약 작업에 예약된 클라이언트 응용 프로그램을 사용하는 작업으로 전환하고 있습니다.여기에는 적어도 세 가지 이유가 있습니다.

  1. 매일 밤 실행해야 하는 콘솔 프로그램도 있습니다.이렇게 하면 예약된 모든 작업을 한 곳에 배치할 수 있습니다.물론 이로 인해 단일 장애 지점이 생성되지만 콘솔 작업이 실행되지 않으면 다음날 작업이 손실됩니다.
  2. 작업을 시작하는 프로그램은 서버에서 인쇄 메시지와 오류를 캡처하여 모든 배치 프로세스에 대한 공통 응용 프로그램 로그에 기록합니다.따라서 sql 작업을 사용하여 로깅을 훨씬 쉽게 수행할 수 있습니다.
  3. 서버를 업그레이드해야 하는 경우(곧 업그레이드할 수 있기를 희망함)에는 작업을 이동할 걱정이 없습니다.응용 프로그램을 한 번만 다시 가리킵니다.

진짜 짧은 VB야.넷앱:관심 있는 사람이 있으면 코드를 게시할 수 있습니다.

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

아이디어(간체):

  1. 대화를 시작하는 저장 프로시저/트리거(BEGIN DIALOGER)를 루프백(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. 절차는 특정 코드를 실행하고 다시 실행할 수 있는 타이머를 실행합니다.


작업 스케줄러라고 불리는 Michaw Gowoś가 작성한 완전 굽기 솔루션(T-SQL)을 찾을 수 있습니다.

블로그의 요점:

찬성:

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

제안된 구별:

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

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

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

  • 이전 데이터 제거
  • 사전 집계/예측 재계산
  • 비정규화

설정 방법:

  • 섹션: "Dobbrania"에서 소스 코드 가져오기 - 다운로드하려면(브로커 활성화/스키마츠크/구성 테이블 설정 + 트리거 + 저장 프로시저)/브로커 항목 설정
  • configuration table 설정[tsks].[tsksx_task_scheduler]작업 예: 작업 포함

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

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

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

젭이 더 빨랐습니다 ;)

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

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

반응형