본문 바로가기
프로그래밍/SQL

오라클(Oracle) 잡(Job) 스케줄러 구성

by 착살의 숲 2013. 11. 13.
반응형

* DBMS_JOB 패키지 내 프로시저 구성

* SUBMIT, REMOVE, CHANGE, WHAT, NEXT_DATE, INTERVAL, BROKEN, RUN

* job 스케줄러 확인

 - SELECT * FROM USER_JOBS;

 

 

1. SUBMIT

DB에 새로운 JOB을 추가하는 프로시저

 

 

오라클 기본 셋팅 확인 

 SELECT * FROM V$PAPAMETER WHERE NAME LIKE '%job%';

 

여기에 'JOB_QUEUE_PROCESSES'의 값이 '0' 이면 스케줄러가 작동하지 않는다. (기본셋팅)

 

아래와 같이 변경

 ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 10;

 

변경이 되었으면 JOB SCHEDULER를 생성한다.

 

DBMS_JOB 패키지 내 프로시저 이용

 

 DECLARE

     X NUMBER;

 BEGIN

    SYS.DBMS_JOB.SUBMIT

    ( job            => X

     ,what          => '유저 명.저장프로시저 명;'

     ,next_date   => to_date('10-03-2012 03:00:00','dd/mm/yyyy hh24:mi:ss')

     ,interval      => 'TRUNC(SYSDATE+1)+3/24'

     ,no_parse   => TRUE

    );

    SYS.DBMS_OUTPUT.PUT_LINE('Job Number is : ' || to_char(x));

 END;

 /

 

commit;

* job : 실행할 job number

* what - 실행할 PL/SQL 프로시저(procedure) 명 혹은 psm 문장의 sequence

* next_date - job을 언제 처음 시작할 것인지 지정한다. date type으로 evaluate되는 문자열 입력(SYSDATE)

* interval - job을 수행한 후, 다음 실행시간까지의 시간을 지정한다. 위 셋팅은 매일 오전 3시 마다 실행한다.

* no_parse - true 이면 submit시에 job을 parsing하지 않는다.

 

마지막으로 로그(Job Number)를 찍어줌으로써 스케줄러가 정상적으로 돌아가는지 확인할 수 있다.

 

* job Interval 설정

ex)

SYSDATE+7 : 7일에 한번 씩 job 수행

SYSDATE+1/24 : 1시간에 한번 씩 job 수행

SYSDATE+30/ : 30초에 한번 씩 job 수행(24: 시간 당, 1440(24x60):분 당, 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분

 

* job queue 정보 VIEWING

 SELECT * FROM DBA_JOBS

 SELECT * FROM USER_JOBS

 SELECT * FROM ALL_JOBS

 

 

2. REMOVE

DB에 추가된 job을 삭제하는 프로시저

 DBMS_JOB.REMOVE(job);

 

* job : 삭제할 job number

 

 

3. CHANGE

DB에 저장되어 있는 job의 field들을 변경하는 프로시저

 DBMS_JOB.CHANGE(job, what, next_date, interval);

 

* job : 실행할 job number

* what : 실행할 PL/SQL procedure 혹은 psm 문장의 sequence

* next_date : job을 다음 수행할 시간

* interval : job을 수행 후 nex_date를 update하기 위한 expression. date type으로 evaluate되는 문자열

 

 

4. WHAT

job이 수행하는 작업을 변경하는 프로시저

 DBMS_JOB.WHAT(job, WHAT);

 

* job : 실행할 job number

* what : 실행할 PL/SQL procedure 혹은 psm 문장의 sequence

 

 

5. NEXT_DATE

job이 schedule되어 Tibero에 의해 자동으로 실행될 때를 변경하는 프로시저

 DBMS_JOB.NEXT_DATE(job, next_date);

 

* job : 실행할 job number

* next_date : job이 schedule되어 실행될 시간

 

 

6. INTERVAL

job 실행주기 파라미터를 변경하는 프로시저

 DBMS_JOB.INTERVAL(job, interval);

 

* job : 실행할 job number

* interval : job을 수행 후 next_date를 update하기 위한 expression. date type으로 evaluate되는 문자열

 

 

7. BROKEN

DB에 저장되어 있는 job의 상태를 정상 or Broken 상태로 설정하는 프로시저

 DBMS_JOB.BROKEN(job, broken, next_date);

 

* job : 실행할 job number

* broken : job이 broken 된 경우 true, 정상 상태인 경우 false

 

 

8. RUN

job을 현재 session에서 즉시 수행시키는 프로시저.

job이 broken되어 있어도 실행하고, 실행에 성공한 경우 job을 정상 상태로 변경한다.

 DBMS_JOB.RUN(job);

 

* job : 실행할 job number

 

 

[출처] - http://blog.naver.com/wizardol80?Redirect=Log&logNo=80155107071

 

 

반응형

댓글