정해진 시간에 반복적으로 작업을 수행할 수 있게 해주는 기능
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 |