ORACLE 에서 DBMS_JOB 패키지를 이용해서 주기적으로 작업을 실행하는
방법 입니다.
-- JOB 등록
-- 1일 - 10분단위 : 144, 30분 단위 : 48, 한시간 단위 : 24
-- 1/144 -> 0시 10분
DECLARE
JOB_NUMBER NUMBER;
BEGIN
-- 매일 오전 1시 10분
DBMS_JOB.SUBMIT (
JOB_NUMBER -- OUTPUT
, 'do_job();' -- WHAT
, SYSDATE -- NEXT_DATE
, 'TRUNC(SYSDATE + 1) + 7/144' -- INTERVAL (매일 오전 1시 10분)
, FALSE -- NO_PARSE
);
COMMIT;
END;
/
OUTPUT
이것은 식별자로써 job이 생성될때 할당된다. 이 job 번호는 job을 수정하거나
제거할때 job을 식별하기 위해 사용된다.
WHAT
이것은 실행시키고자 하는 PL/SQL 코드이다. WHAT 파라미터는 세미콜론(;)으로
끝나야 한다.
NEXT_DATE
이것은 job이 실행될 시간이다. 기본값은 SYSDATE 이다.
INTERVAL
job 이 다음번에 실행될 시간을 계산하는 식이다. 기본값은 NULL이다. INTERVAL은
다음 시간값이나 NULL이어야 한다. 이 값은 VARCHAR2 타입이고 작은 따옴표로
둘러싸여져야 한다.
NO_PARSE
만약 NO_PARSE가 FALSE로 설정(이것이 기본값이다)되면, 오라클은 job과 연관된
프로시저를 파싱한다. 만약 NO_PARSE가 TRUE로 설정되면, 오라클은 job과 연관된
프로시저를 job이 처음 실행될 때 파싱한다. 예를 들어, 만약 job과 관련된
테이블이 생성되기 전에 job 을 submit 하기를 원한다면 NO_PARSE를 TRUE 로
설정하면 된다.
-- JOB 조회
SELECT JOB, WHAT, NEXT_DATE, NEXT_SEC, FAILURES, BROKEN FROM USER_JOBS;
-- JOB 강제 실행
-- JOB_NO
BEGIN
DBMS_JOB.RUN(2);
COMMIT;
END;
/
-- JOB 중지 및 실행
-- JOB_NO, BROKEN(TRUE, FALSE)
BEGIN
DBMS_JOB.BROKEN(1, FALSE);
COMMIT;
END;
/
-- JOB 삭제
BEGIN
DBMS_JOB.REMOVE(2);
COMMIT;
END;
/