반응형

DBMS_JOB

DBMS_JOB 패키지

- SNP 백그라운드 프로세스에 의해 등록된 JOB이 설정한 INTERVAL 간격으로 수행됨

- 초 단위 수행가능이 장점 but, 초단위 작업이 별로 없어서 crontab 이용

- job_queue_processesjob_queue_interval 이 설정되어 있어야 동작 가능

job_queue_processes : SNP 프로세스 개수

_job_queue_interval : SNP 프로세스가 sleep 상태에서 깨어나는 간격을 초로 지정

 

DBMS_JOB 패키지 구성

- submit : 새로운 작업을 job queue 목록에 등록

- remove : job queue에 등록된 job 제거

- change : job queue에 등록된 job 변경

- next_date : job queue에 등록된 job의 작동 시간 변경

- interval : job queue에 등록된 job의 수행 주기 변경

- what : 수행할 procedure or package 변경

- run : 등록되어 있는 특정 job을 수동으로 수행

 

job 관리하기

- 기본 문법

DBMS_JOB.submit(

job out binary_interger,

what in varchar2,

next_date in date default sysdate,

interval in varchar2 default 'null',

no_parse in boolean default false

)

- job : job 번호로 다른 프로시저에서 호출될 수도 있다

- what : 수행할 pl/sql or procedure or package 이름을 지정

이곳에 직접 수행하기를 원하는 sql문장을 써도됨

- next_date : 다음에 수행될 시간을 지정

- interval : 수행되는 주기를 지정하며 초 단위까지 지정 가능

- no_parse : Parse 여부를 지정. (기본 값 falseparse 수행)

 

- -job 프로그램 등록

create sequence seq_job_seq1; 

create table job_test01 (no number, name varchar2(5));

 

create or replace procedure insert_job_test01

is begin

insert

into job_test01

values(seq_job_seq1.nextval,

dbms_random.string('a', 3));

end;

/

 

-- job 프로그램 등록

!vi job1.sql

 

begin dbms_job.submit(:jno,

'insert_job_test01;',

sysdate,

'sysdate + 1/24/60', -- 1분에 한 번 수행

false);

end;

/

 

SQL > variable jno number;

SQL > @job1.sql

SQL > print jno; -- random으로 할당되는 job번호 확인

SQL > commit;

-- 이 시간부터 job이 수행되며 commit 되지 않으면 수행되지 않음

 

 

-- rac 환경이라면 아래와 같이 수행

exec dbms_job.instance(job=>25, instance=>1);

 

-- 현재 수행되고 있는 job 확인

select *

from dba_jobs

where 1=1

and what='insert_job_test01;' -- 이름에 ; 들어간 거 주의!

-- and job=3

;

 

-- 테이블 확인

select * from job_test01;

 

-- job 수정

exec dbms_job.change(

3,

'insert_job_test01;',

sysdate,

'sysdate + 5/24/60'

);

commit;

 

-- job 삭제

exec dbms_job.remove(3);

commit;

 

 DBMS_SCHEDULER

- 오라클에서 생성된 프로시저나 함수 외에 OS에서 생성된 각종 프로그램 실행 가능

- 데이터베이스 내부 이벤트까지 추적가능하기 때문에 OSdbms_job 보다 훨씬 다양한 작업을 체크하고 수행할 수 있음

 

DBMS_SCHEDULER 등록

양식

begin

dbms_scheduler.create_job(

job_name=>'',

job_type=>'',

job_action=>'',

start_date => ,

repeat_interval =>'');

end;

/

 

 

* 사용편이성 때문에 UNIX Crontab 많이 이용함!

'Study Note > Database' 카테고리의 다른 글

DataPump  (0) 2016.02.02
Flashback  (0) 2016.02.02
User 관리하기  (0) 2016.02.02
Oracle Block  (0) 2016.02.02
Tablespace & Datafiles  (0) 2016.02.02

+ Recent posts