DB와 관련하여 Job Scheduling하는 방법에는 DBMS자체에서 하는 방법과 외부에서 하는 방법이 있습니다.
외부에서 하는
방법의 경우(Cron이나 다른 Third party 제품)는 FTP나 SQLLDR를 사용하는 경우
또는 database가 작동되고 있는
지를 체크하는 경우와 같이 DB 내부적으로 처리할 수 없는 경우
사용하시는 것이 적당합니다.
물론 Procedure등도 실행시킬 수 있지만요..
DB 자체적으로 하는 방법은 DB에 의존적은 모든 일을 처리하는 경우 적당하다고
할 수 있겠습니다.
예를 들어 테이블 Anaylize라 던지 Procedure 실행, Table cleansing등의 작업등이겠죠.
참고로 DBMS_JOB PACKAGE 사용법을 첨부하겠습니다.
Technical Bulletins에 나와있는 내용입니다.
No. 10707 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하면 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 Document ------------------ Oracle Developer's Guide and Oracle PL/SQL
Guide
'Databases' 카테고리의 다른 글
configure 옵션탐구 (버젼 : 5.1.32) (0) | 2009.09.03 |
---|---|
mysql configure (0) | 2009.09.03 |
Unix와 Oracle (0) | 2009.09.03 |
MYSQL 서버 설치 (0) | 2009.08.17 |
Oracle® Database SQL Developer Installation Guide Release 1.2 (0) | 2009.08.17 |