블로그 이미지

카테고리

분류 전체보기 (629)
Bicycle (14)
일상의 조각 (120)
일상의 이미지 (11)
영화 (30)
W3 Fragment (68)
Mac (11)
HR (5)
프로그램 (299)
OpenCV (1)
데이타베이스 (32)
시스템 (20)
기타 (13)
08-04 08:44
Unix의 cron과 같이 오라클에서도 일정한 시점, 또는 간격으로 반복해서 job을 수행시킬 수 있다. DBMS_JOB package를 이용하여 수행시킬 수 있는데, 이것을 위해서는 SNP background process가 start되어 있어야 한다.


  다음의 parameter를 init.ora file에 설정한 후 oracle을 startup하면 SNP process가 올라온다.
        job_queue_processes = 1 
            -> 이 파라미터는 snp process를 몇 개 띄울지를 결정한다. 
                  default=0
        job_queue_interval = 60 
            -> 이 파라미터는 snp process가 깨어나는 간격을 초로 설정한다.

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을 
  수행할 수 있도록 한다. 다음의 예제를 통하여 실제 사용법을 알아보자.

[ 예제 ] 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> select 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의 삭제
 
snapshot과 job과의 관계 
====================== 
    snapshot 도 job 으로 등록되어 돌아갑니다. 즉, select job, what from dba_jobs; 를 조회하면, what 부분에 snapshot 이 정의되어 있습니다. 따라서, snapshot 에 대한 disable 방법 등은 job 과 같습니다.

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



Posted by 로드러너
TAG ,

댓글을 달아 주세요