TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-07 |
제목 | DBMS_JOB PACKAGE의 사용 방법과 예제 | ||
---|---|---|---|
DBMS_JOB PACKAGE의 사용 방법과 예제
=================================== Purpose ------- DBMS_JOB package의 사용방법에 대해 알아보자. Explanation ----------- Unix의 cron과 같이 오라클에서도 일정한 시점, 또는 간격으로 반복해서 job을 수행시킬 수 있다. DBMS_JOB package를 이용하여 수행시킬 수 있는 데, 이것을 위해서는 SNP background process가 start되어 있어야 한다. 다음의 parameter를 init SNP0 혹은 J000 process가 뜨게된다. job_queue_processes = 1 -> 이 파라미터는 snp process를 몇 개 띄울지를 결정한다. default=0 job_queue_interval = 60 -> 이 파라미터는 snp process가 깨어나는 간격을 초로 설정한다. (Oracle9i부터는 job_queue_interval parameter가 없어졌으므로 job_queue_processes 만 설정하면 된다.) DBMS_JOB Package는 다음과 같은 procedure를 이용하여 사용한다. DBMS_JOB.submit(job out binary_integer, what in varchar2, next_date in date defalut sysdate, interval in varchar2 default 'null', no_parse in boolean default false) -> dbms_job.submit procedure는 job의 내용을 정의하고 oracle이 job을 수행할 수 있도록 한다. Example ------- [ 예제 ] file jobcre.sql begin dbms_job.submit(:jobno, -- job 의 번호 'insert into scott.testdate values(1, sysdate);', -- job의 내용 : ' '으로 감싸준다. -- procedure를 실행하는 경우 ' username.procedure_name;' 만 쓰면 된다. sysdate, -- job이 실행될 시간 'sysdate + 5/24/60' , -- job이 실행되는 간격 , 위의 경우는 5분마다 실행하도록 했다. -- ' '으로 감싸준다. FALSE ); end; / $ sqlplus scott/tiger SQL> variable jobno number; SQL> @jobcre SQL> print jobno -- job 번호 확인 : 여기서는 166번 SQL> exec dbms_job.run(166); SQL> commit; 지금부터 interval에 따라 job이 실행된다. job 실행 여부를 알아보기 위해서 다음의 sql 문장을 수행한다. SQL> col what format a20 SQL> select what, job, next_date, next_sec, failures, broken from user_jobs; 그 외에 SQL> exec dbms_job.run(jobno); - job의 강제 실행, job이 16번 fail되어 broken된 경우는 위의 명령어로 강제로 run을 시켜서 실행되면 다시 interval마다 실행된다. SQL> exec dbms_job.broken(jobno, TRUE); - job을 disable시킴 SQL> exec dbms_job.remove(jobno); - job의 삭제 참고1. snapshot과 job과의 관계 snapshot 도 job 으로 등록되어 실행된다. 즉, select job, what from dba_jobs; 를 조회하면, what 부분에 snapshot 이 정의되어 있다. 따라서, snapshot 에 대한 disable 방법 등은 job 과 같은 방법으로 실행하면 된다. 참고2. interval 시간 지정 예제 1. 10분에 한번씩 실행하는 경우 sysdate + 1/24/6 또는 sysdate + 1/144 -> 1/24 (1시간-60분) / 6 : 10분 단위 1/144 : 24*6 으로 나누어도 같은 의미가 된다. 2. 1분에 한번으로 지정하는 경우 sysdate + 1/24/60 또는 sysdate + 1/1440 3. 매일 새벽 2시로 지정하는 경우 trunc(sysdate) + 1 + 2/24 -> 다음날 새벽 2시를 지정함. 4. 매일 밤 11시로 지정하는 경우 trunc(sysdate) + 23/24 -> 오늘 밤 11시를 지정했음. Reference Documents ------------------- Oracle Developer's Guide and Oracle PL/SQL Guide |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |