본문 바로가기
DataBase

[Oracle DB] DBMS_JOB, 스케줄러

by IsBerry 2019. 2. 1.
반응형

정해진 시간에 반복적으로 작업을 수행할 수 있게 해주는 기능

UNIX의 CRONJOB처럼 특정시간/ 주기적으로 작업을 할 수 있다.



패키지에 있는 프로시저

- submit : 새로운 작업을 job queue 목록에 등록

- remove : job queue에 등록된 job을 제거

- change : job queue에 등록된 job을 변경

- next_date : job queue에 등록된 job의 작동시간을 변경

- interval : Job queue에 등록된 job의 작동시간 변경

- what : 수행할 프로시져 변경

- run : 등록되어 있는 특정 job을 수동으로 수행


- 기본문법

DBMS_JOB.submit

(

j

)



SYSDATE + 1 << 하루에 한번

SYSDATE + 1/24 << 1시간에 한번 

SYSDATE + 30?86400 << 30초에 한번


trunc(sysdate) + 1 + 1/24 // 매일 01시에 작업 시행

trunc(sysdate, ''D'') + 7 // 매주 일요일 0시에 작업 실행



DECLARE

  j_no NUMBER;

BEGIN

DBMS_JOB.SUBMIT(j_no, 'proc_NAME', sysdate, sysdate + 1);

COMMIT;

END;


삭제

DBMS_JOB.REMOVE

BEGIN

DBMS_JOB.remove(식별자);

END;


변경

DMBS_JOB.CHANGE

BEGIN

DBMS_JOB.CHANGE(식별자, WHAT, NEXT_DATE, INTERVAL);

END;


4. dbms_job.next_date( 다음 수행 시간 )
BEGIN
   DBMS_JOB.NEXT_DATE(50, TRUNC(SYSDATE,'MI') + 4);
END;
/


5. dbms_job.interval( 수행 간격 )
BEGIN
   DBMS_JOB.INTERVAL(50, TRUNC(SYSDATE,'MI')+30/1440);
END;
/


6. dbms_job.what( proc 명 )
BEGIN
   DBMS_JOB.WHAT(50, 'proc_50_proc;');
END;
/

7. dbms_job.run
BEGIN
   DBMS_JOB.BROKEN(50, TRUE);
   DBMS_JOB.RUN(50);
END;


스케줄러 확인

SELECT job, next_date, next_sec, failures, broken
  FROM user_jobs;


사용방법

1. JOB_QUEUE_PROCESSES 설정 확인

show parameter processes

2. job_queue_processes의 value 가 0일 경우

   ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 1


DECLARE

 변수 선언

BEGIN

DBMS_JOB.SUBMIT

(

JOB,

WHAT,

NEXT_DATE,

INTERVAL

);

COMMIT;

END;

DECLARE

X NUMBER;

BEGIN

DBMS_JOB.SUBMIT(X,'deleteNoAuth;',sysdate+9/24,'trunc(sysdate+1)');

COMMIT;

END;



BEGIN

DBMS_JOB.CHANGE(1, NULL,NULL,'trunc(sysdate+1)');

END;


SELECT * FROM DBA_JOBS;



반응형

'DataBase' 카테고리의 다른 글

[Oracle DB] DATE타입 UPDATE  (0) 2019.02.04
[Oracle DB] 프로시저  (0) 2019.02.02