오라클에서는 유닉스의 cron tab과 비슷한 기능을 제공합니다.
오라클 자체적으로 프로시저, 패키지, 등의 object 를 oracle job queue에 등록후 스케쥴링 하여 사용할수 있습니다.
1. Job 관련 파라메터 확인
SELECT * FROM V$PARAMETER WHERE NAME LIKE ‘%job%’;
‘JOB_QUEUE_PROCESSES’의 값이 ‘0’ 이면 스케줄러가 작동하지 않는다.
ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 1000;
2. Job 등록
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => ‘plan_plm.T_IF_BATCH’
,next_date => to_date(‘2020-02-27 00:00:00’, ‘yyyy-mm-dd hh24:mi:ss’)
,interval => ‘TRUNC(SYSDATE+1)+6/24+30/1440’
,no_parse => TRUE
);
SYS.DBMS_OUTPUT.PUT_LINE(‘Job Number is : ‘ || to_char(x));
END;
– next_date : Job이 처음 실행될 시간 설정
– Interval : Job 실행 후 다음 실행 간격 설정
SYSDATE+7 : 7일에 한번 씩 job 수행
SYSDATE+1/24 : 1시간에 한번 씩 job 수행
SYSDATE+30/ : 30초에 한번 씩 job 수행(24: 시간 당, 1440(24×60):분 당, 86400(24x60x60):초 당 )
TRUNC(SYSDATE, ‘MI’)+8/24 : 최초 job 수행시간이 12:29분 일 경우 매시 12:29분에 job 수행
TRUNC(SYSDATE+1) : 매일 밤 12시에 job 수행
TRUNC(SYSDATE+1)+3/24 : 매일 오전 3시 job 수행
NEXT_DAY(TRUNC(SYSDATE),’MONDAY’)+15/25 : 매주 월요일 오후 3시 정각에 job 수행
TRUNC(LAST_DAY(SYSDATE))+1 : 매월 1일 밤 12시에 job 수행
TRUNC(LAST_DAY(SYSDATE))+1+8/24+30/1440 : 매월 1일 오전 8시 30분
3. Job 확인
SELECT * FROM DBA_JOBS
SELECT * FROM USER_JOBS
SELECT * FROM ALL_JOBS
4. Job 삭제
EXECUTE DBMS_JOB.REMOVE(job_no);
5. Job 변경
1) CHANGE
: Job 의 Field를 변경
EXECUTE DBMS_JOB.CHANGE(job, what, next_date, interval);
EXECUTE DBMS_JOB.CHANGE(14144, NULL, NULL, ‘SYSDATE + 3’);
2) WHAT
: 수행작업을 변경
EXECUTE DBMS_JOB.WHAT(job, WHAT);
EXECUTE DBMS_JOB.WHAT(14144, ‘유저명.프로시저명’);
3) NEXT_DATE
: 다음 수행시간 변경
EXECUTE DBMS_JOB.NEXT_DATE(job, next_date);
EXECUTE DBMS_JOB.NEXT_DATE(14144, TRUNC(SYSDATE,’MI’) + 4);
4) INTERVAL
: 수행 간격 변경
EXECUTE DBMS_JOB.INTERVAL(job, interval);
EXECUTE DBMS_JOB.INTERVAL(14144, TRUNC(SYSDATE,’MI’)+30/1440);
5) BROKEN
: 수행 중지
EXECUTE DBMS_JOB.BROKEN(14144, TRUE);
6) RUN
: Job을 즉시 실행. BROKEN중이어도 실행. 실행 후 정상상태로 변경
EXECUTE DBMS_JOB.RUN(job);
이 오라클의 job 스케쥴링을 이용하면,
서버의 이용이 낮은 새벽시간대 등에 자원이 많이 들어가는 연산을 실행시키면, 오라클 서버의 부담을 줄일수 있습니다.