DBMS_JOB
●DBMS_JOB 패키지
- SNP 백그라운드 프로세스에 의해 등록된 JOB이 설정한 INTERVAL 간격으로 수행됨
- 초 단위 수행가능이 장점 but, 초단위 작업이 별로 없어서 crontab 이용
- job_queue_processes와 job_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 여부를 지정. (기본 값 false로 parse 수행)
- -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에서 생성된 각종 프로그램 실행 가능
- 데이터베이스 내부 이벤트까지 추적가능하기 때문에 OS나 dbms_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 |