[Oracle] DBMS_JOB Interval Set, 잡 간격 설정하는 방법 안내

DBMS_JOB Interval Set, 잡 간격 설정하는 방법 안내

오라클 데이터베이스에서 DBMS_JOB, 즉 잡에 대해 간격을 설정하는 방법에 대한 예시 자료입니다. 다음과 같은 job interval을 설정하고 싶을 때 해당 게시물을 이용해 주세요! 😘

  • 매일 밤 12시 잡 실행
  • 7일에 1번 밤 12시 잡 실행
  • 30일에 1번 밤 12시 잡 실행
  • 매일 오전 6시 잡 실행
  • 매 30분마다 잡 실행
  • 매월 1일 밤 12시 잡 실행
  • 이외에도 자신의 요구에 맞추어 적당히 수정하여 사용하세요.

잡에서 1, 1/24, 1/1440은 각각 다음과 같은 뜻을 가지고 있습니다.

  • 1이 하루를 의미합니다.
  • 1/24는 하루를 24로 나누었으므로 1시입니다.
  • 1/1440은 1을 24로 나눈 값에 60을 다시 나눈 값으로 1분을 뜻합니다.
-- 매일 밤 12시 : Every day at midnight

BEGIN
   SYS.DBMS_JOB.INTERVAL (:JOB, 'TRUNC(SYSDATE+1)');
   COMMIT;
END;
/

-- 7일에 1번 밤 12시 : Every 7 days at midnight

BEGIN
   SYS.DBMS_JOB.INTERVAL (:JOB, 'TRUNC(SYSDATE+7)');
   COMMIT;
END;
/

-- 30일에 1번 밤 12시 : Every 30 days at midnight

BEGIN
   SYS.DBMS_JOB.INTERVAL (:JOB, 'TRUNC(SYSDATE+30)');
   COMMIT;
END;
/

-- 매일 오전 6시 : Every day at 6 am

BEGIN
   SYS.DBMS_JOB.INTERVAL (:JOB, 'TRUNC(SYSDATE+1)+6/24');
   COMMIT;
END;
/

-- 현 시점을 기준으로 매 30분씩 : Every 30 minutes

BEGIN
   SYS.DBMS_JOB.INTERVAL (:JOB, 'SYSDATE+30/1440');
   COMMIT;
END;
/

-- 매월 1일 밤 12시 : Every 1st of the month at midnight

BEGIN
   SYS.DBMS_JOB.INTERVAL (:JOB, 'TRUNC(LAST_DAY(SYSDATE)) + 1');
   COMMIT;
END;
/

-- 매월 1일 오전 8시 30분 : Every 1st of the month at 8:30 am

BEGIN
   SYS.DBMS_JOB.INTERVAL (:JOB, 'TRUNC(LAST_DAY(SYSDATE)) + 1 + 8/24 + 30/1440');
   COMMIT;
END;
/

DBMS_JOB

인터벌 이외에 JOB에 대한 생성, 삭제 등 자료도 도움이 될 것 같아서 추가합니다~ JOB을 이용하여 주기적인 자동실행 기능 만들기로 활용해 주세요~

DBMS_JOB

JOB 을 통해 특정 명령을 주기적으로 자동으로 실행하도록 해보겠습니다. 실행 대상으로 {TABLE_NAME} 테이블에 현재시간을 인서트 하는 프로시저를 생성해 보겠습니다.

프로시저 생성

다음과 같이 테이블에 특정 시간마다 현재 시간을 입력하도록 해보겠습니다. 필요에 따라 패키지 내의 프로시저를 생성하기도 합니다.

CREATE OR REPLACE PROCEDURE procedure_name
IS
BEGIN
   INSERT INTO table_name
        VALUES (SYSDATE);
END;
/
--Procedure created.

잡 생성

JOB을 데이터베이스에 제출/등록 합니다. DECLARE(선언), BEGIN, END 로 크게 구성되어 있으며, 변수 X 는 JOB의 번호를 뜻합니다.

DECLARE
  X NUMBER;
BEGIN
  SYS.DBMS_JOB.SUBMIT
  ( job       => X 
   ,what      => 'user_name.procedure_name;'
   ,next_date => to_date('31-12-9999 00:00:00','dd/mm/yyyy hh24:mi:ss')
   ,interval  => 'SYSDATE + 1/24/6'
   ,no_parse  => FALSE
  );
COMMIT;
END;
/
  • JOB : 잡 번호
  • WHAT : 무엇을 실행할지 설정합니다.
  • NEXT_DATE : 다음 실행시간을 설정합니다.
  • INTERVAL : 실행 간격, 여기서 1은 1일 1회를 뜻합니다. 1/24는 하루를 24로 나누었으니 1시간을 의미합니다. 1/24/6은 1시간은 6으로 나눈 값, 10분을 의미합니다. 1보다 큰 경우, 예를 들면 7은 1주일에 1회 실행입니다. TRUNC(SYSDATE + 1)하여 0시를 기준으로 언제 실행할지 설정할 수 있습니다.
  • NO_PARSE : SUBMIT 시 파싱 여부입니다.

JOB 변경

JOB CHANGE

JOB을 변경합니다. 매개변수는 순서대로 JOB 번호, WHAT 무엇을 실행할지, NEXT_DATE 다음 실행시간, INTERVAL 실행간격 입니다. CHANGE를 실행하는 방법도 있고, REMOVE 이후 SUBMIT을 실행하기도 합니다.

BEGIN
   SYS.DBMS_JOB.CHANGE(x, 'user_name.procedure_name;', to_date('31-12-9999 00:00:00','dd/mm/yyyy hh24:mi:ss'), 'SYSDATE + 1/24/60');
   COMMIT;
END;
/

JOB 실행

JOB RUN

JOB 을 즉시 실행합니다.

BEGIN 
   SYS.DBMS_JOB.RUN(x);
   COMMIT;
END;
/

JOB 중단

JOB BROKEN TRUE

JOB 을 작동 중단 상태로 설정합니다.

BEGIN 
   SYS.DBMS_JOB.BROKEN(x, TRUE);
   COMMIT;
END;
/

JOB 재개

JOB BROKEN FALSE

JOB 을 작동 재개 상태로 설정합니다.

BEGIN 
   SYS.DBMS_JOB.BROKEN(x, FALSE);
   COMMIT;
END;
/

잡 제거 방법 (삭제)

JOB REMOVE

JOB 을 제거합니다.

BEGIN 
   SYS.DBMS_JOB.REMOVE(x);
   COMMIT;
END;
/

이상으로 JOB 에 대해 알아보았습니다.

댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗