* 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
'프로그래밍 > SQL' 카테고리의 다른 글
주말을 제외한 전 영업일자 SQL (0) | 2013.11.13 |
---|---|
오라클(Oracle) Merge into 설명 및 예제 (0) | 2013.11.13 |
오라클(Oracle) 날짜계산 (0) | 2013.11.11 |
오라클(Oracle) REPLACE 함수와 TRANSLATE 함수의 문자 치환 (0) | 2013.11.11 |
오라클(Oracle) 최근 3개월 데이터 조회 조건문 (0) | 2013.11.11 |
댓글