[ ORACLE JOB 설정 ]
1. JOB 등록
DBMS_JOB.SUBMIT(JOB_NO, WHAT, NEXT_DATE, INTERVAL);
declare
job_no number;
begin
dbms_job.submit(job_no, 'dbms_output.put_line(''ok'');', sysdate, 'sysdate + 1');
end;
[실행주기 예제 ]
항목 | 설명 |
'sysdate + 7' | 주 1회 실행 |
'sysdate + 1' | 다음날 1회 실행 |
'next_day(sysdate, ''MONDAY'')' | 매주 월요일 실행 |
'null' | 1회 실행 |
'sysdate + 1/24' | 1시간에 1회 실행 |
'sysdate + 1/24/60' | 1분에 1회 실행 |
'trunc(sysdate+1) + 2/24' | 다음날 2시 1회 실행 |
'trunc(sysdate+1) + 2/24+30/1440' | 다음날 2시 30분 1회 실행 |
2. JOB 변경
BEGIN
DBMS_JOB.CHANGE(JOB_NO, WHAT, NEXT_DATE, INTERVAL);
COMMIT;
END;
begin
dbms_job.change(10, null, null, 'sysdate+2');
commit; -- commit하면 변경 내용이 바로 적용
end;
3. JOB 조회
SELECT * FROM USER_JOBS;
SELECT * FROM DBA_JOBS;
4. JOB 삭제
begin
dbms_job.remove(job_no); -- SELECT * FROM USER_JOBS를 조회하여 JOB_NO 확인!
commit;
end;
5. JOB 정지 or 재시작
EXECUTE DBMS_JOB.BROKEN(JOB_NO, TRUE); -- 정지
EXECUTE DBMS_JOB.BROKEN(JOB_NO, FALSE); -- 재시작
execute dbms_job.broken(2, TRUE); -- 2번 JOB 정지
execute dbms_job.broken(2, FALSE); -- 2번 JOB 재시작
6. JOB next 실행 시간 변경
EXECUTE DBMS_JOB.NEXT_DATE(JOB_NO, NEXT_DATE);
execute dbms_job.next_date(2, SYSDATE+1);
7. JOB 실행주기 변경
EXECUTE DBMS_JOB.INTERVAL(JOB_NO, INTERVAL);
execute dbms_job.interval(2, 'sysdate + 7');
8. JOB 수동 실행
EXECUTE DBMS_JOB.RUN(JOB_NO);
execute dbms_job.run(2); -- 2번 JOB 실행