[답변]스케줄인 작업 거는방법 좀 0 1 6,413

by 정재홍 [2004.08.26 17:03:17]


DBMS_JOB 패키지를 이용하시면 됩니다.

===========================================

Unix의 cron과 같이 오라클에서도 일정한 시점, 또는 간격으로 반복해서

job을 수행시킬 수 있다.  DBMS_JOB package를 이용하여 수행시킬 수 있는

, 이것을 위해서는 SNP background process가 start되어 있어야 한다.

 

 다음의 parameter를 init<SID>.ora file에 설정한 후 oracle을 startup하면

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시를 지정했음.

 

 

by ^^ [2004.09.22 00:00:00]
감사합니다.. 많은 도움이 되었습니다..
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입