database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 11320 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 11320
DBMS_JOB PACKAGE의 사용 방법과 예제
작성자
정재익(advance)
작성일
2002-07-12 09:51
조회수
8,757

DBMS_JOB PACKAGE의 사용 방법과 예제

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

 

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시를 지정했음. 
[Top]
No.
제목
작성자
작성일
조회
11327Linux 용 오라클 제품관련 FAQ
정재익
2002-07-12
6509
11322EXPORT받은 DUMP 파일의 CHARACTER SET 확인 방법
정재익
2002-07-12
8828
11321ORACLE 9I 에서의 NATIONAL CHARACTERSET("AL16UTF16" )
정재익
2002-07-12
12818
11320DBMS_JOB PACKAGE의 사용 방법과 예제
정재익
2002-07-12
8757
11307Oracle 기초강좌 (11) [2]
정재익
2002-07-11
17994
11306Oracle 기초강좌 (10)
정재익
2002-07-11
18555
11305Oracle 기초강좌 (9)
정재익
2002-07-11
11665
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다