Job Management
1. JOB 등록
DBMS_JOB.SUBMIT(JOB_NO, WHAT, NEXT_DATE, INTERVAL);
예:
DECLARE
job_no number;
BEGIN
DBMS_JOB.SUBMIT(JOB_NO,
'DBMS_PUTPUT.PUT_LINE(''OK'');',
SYSDATE,
'SYSDATE + 1');
END;
실행주기 계산
- 'SYSDATE + 7': 일주일에 1회 실행
- 'SYSDATE + 1': 하루에 1회 실행
- 'NEXT_DAY(SYSDATE, ''TUESDAY'')' : 매주 화요일에 실행
- 'NULL': 1회 실행
- 'SYSDATE + 1 / 24': 1시간에 1회 실행
- 'SYSDATE + 1 / 24 / 60': 1분에 1회 실행
- 'TRUNC(SYSDATE + 1) + 2 / 24': 다음날 2시에 1회 실행
2. JOB 변경
BEGIN
DBMS_JOB.CHANGE(JOB_NO, WHAT, NEXT_DATE, INTERVAL);
COMMIT;
END;
예:
BEGIN
DBMS_JOB.CHANGE(10, NULL, NULL, 'SYSDATE + 3');
COMMIT;
END;
COMMIT을 사용하게 되면 변경 내용이 적용된다.
3. JOB 조회
SELECT * FROM USER_JOBS;
SELECT * FROM DBA_JOBS;
4. JOB 삭제
BEGIN
DBMS_JOB.REMOVE(JOB_NO);
COMMIT;
END;
5. JOB 정지/재시작
EXECUTE DBMS_JOB.BROKEN(JOB_NO, TRUE);
EXECUTE DBMS_JOB.BROKEN(JOB_NO, FALSE);
예:
EXECUTE DBMS_JOB.BROKEN(10, TRUE);
EXECUTE DBMS_JOB.BROKEN(10, FALSE);
6. JOB 다음 실행 시간 변경
EXECUTE DBMS_JOB.NEXT_DATE(JOB_NO, NEXT_DATE);
예:
EXECUTE DBMS_JOB.NEXT_DATE(10, SYSDATE+1);
7. JOB 실행 주기 변경
EXECUTE DBMS_JOB.INTERVAL(JOB_NO, INTERVAL);
예:
EXECUTE DBMS_JOB.INTERVAL(10, 'sysdate + 7');
8. JOB 실행
EXECUTE DBMS_JOB.RUN(JOB_NO);
출처: 지기닷넷