이곳에 ORACLE JOB 등록 방법에 대한 글이 부족한거 같아서
제가 퍼온 글을 올립니다.
원문 링크는 맨 아래에 있습니다.
-------------------------------------------------------------------------------------------------------------------
오라클에서는 유닉스의 cron tab과 비슷한 기능을 제공합니다.
오라클 자체적으로 프로시저, 패키지, 등의 object 를 oracle job queue에 등록후 스케쥴링 하여 사용할수 있습니다.
단, oracle parameter 의 JOB_QUEUE_PROCESSES가 0보다 커야 JOB 스케쥴링이 동작한다는것에 유의하세요.
방법은,
ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 10 ; --변경
그럼 간단하게, DBMS_JOB 패키지의 프로시저를 살펴보면,
DBMS_JOB.submit : job 등록
DBMS_JOB.remove : 제거
DBMS_JOB.change : 변경
DBMS_JOB.next_date : job의 다음 수행시간 변경
DBMS_JOB.interval : job의 실행 cycle 지정
DBMS_JOB.what : job 수행 으로 등록된 object 를 변경
DBMS_JOB.run : job을 수동으로 실행
입니다. ^^;
다음은 submit 프로시져를 이용한 job등록 예제입니다.
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => '실행할 object'
,next_date => to_date('17-11-2007 09:00:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'TRUNC(SYSDATE) + 1 + 9/24'
,no_parse => TRUE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x)); -- 이부분은 job큐의 번호가 됩니다.
END;
다음은 interval을 세팅하는 예제입니다.
1. 10분간격으로 실행
SYSDATE + 1/24/6
2. 현재 시간으로 부터 다음 날 현재 시간에 실행 (매일)
SYSDATE + 1 -- 지금이 오후3시면 다음날 오후 3시 에 매일매일 실행됩니다.
3. 매일 새벽 5시
TRUNC(SYSDATE) + 1 + 5 / 24
4. 매일 밤 10시
TRUNC(SYSDATE) + 20 / 24
입니다.
JOB의 확인은
SELECT * FROM user_jobs;로 확인할수 있으며,
next_date 을 통해 다음 실행 예정인 시각을 확인할수 있습니다.
이 오라클의 job 스케쥴링을 이용하면,
서버의 이용이 낮은 새벽시간대 등에 자원이 많이 들어가는 연산을 실행시키면, 오라클 서버의 부담을 줄일수 있습니다.
아참 오라클의 스냅샷(snapshot) 또한 oracle job 스케쥴링에 의해 동작합니다.
스냅샷을 생성한 경우에 user_jobs를 살펴보면 job으로 등록되어 있는것을 확인할수 있습니다.
자세한 사항은 아래를 참고하세요.
http://www.psoug.org/reference/dbms_job.html
그리고 oracle 10g 에서 부터는 scheduler라는 더 향상된 메커니즘을 제공합니다.
참고 : http://www.oracle.com/technology/global/kr/pub/articles/10gdba/week19_10gdba.html
부족한 강좌 끝까지 읽어 주셔서 감사합니다.
--원문 : http://blog.naver.com/jadin1?Redirect=Log&logNo=70024291567