오라클 데이터베이스에서 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을 이용하여 주기적인 자동실행 기능 만들기로 활용해 주세요~
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을 변경합니다. 매개변수는 순서대로 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 을 즉시 실행합니다.
BEGIN
SYS.DBMS_JOB.RUN(x);
COMMIT;
END;
/
JOB 중단
JOB 을 작동 중단 상태로 설정합니다.
BEGIN
SYS.DBMS_JOB.BROKEN(x, TRUE);
COMMIT;
END;
/
JOB 재개
JOB 을 작동 재개 상태로 설정합니다.
BEGIN
SYS.DBMS_JOB.BROKEN(x, FALSE);
COMMIT;
END;
/
잡 제거 방법 (삭제)
JOB 을 제거합니다.
BEGIN
SYS.DBMS_JOB.REMOVE(x);
COMMIT;
END;
/
이상으로 JOB 에 대해 알아보았습니다.