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 11935 게시물 읽기
No. 11935
DBMS_JOB PACKAGE의 사용 방법과 예제
작성자
정재익(advance)
작성일
2002-09-07 21:12
조회수
9,487

DBMS_JOB PACKAGE의 사용 방법과 예제

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

 

 

Purpose

-------

DBMS_JOB package의 사용방법에 대해 알아보자.

 

 

Explanation

-----------

 

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

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

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

 

다음의 parameter를 init<SID>.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을

수행할 수 있도록 한다.

 

 

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 Document

------------------

Oracle Developer's Guide and Oracle PL/SQL Guide

[Top]
No.
제목
작성자
작성일
조회
11938DB_BLOCK_BUFFERS
정재익
2002-09-07
7079
11937INDEX 생성 시 고려 사항.
정재익
2002-09-07
8781
11936DATE TYPE 데이타를 효과적으로 조회하는 방법
정재익
2002-09-07
10819
11935DBMS_JOB PACKAGE의 사용 방법과 예제
정재익
2002-09-07
9487
11934NLS_DATE_FORMAT에 대한 고려
정재익
2002-09-07
7707
11933UTL_SMTP PACKAGE을 사용하여 E-MAIL을 GENERATE하는 과정
정재익
2002-09-07
9217
11932VARRAY 사용시 ORA-6533 ERROR
정재익
2002-09-07
9097
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.072초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다