ORACLE JOB Schedule 등록방법

오라클에서는 유닉스의 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 스케쥴링을 이용하면,

서버의 이용이 낮은 새벽시간대 등에 자원이 많이 들어가는 연산을 실행시키면, 오라클 서버의 부담을 줄일수 있습니다.