2017. 2. 5. 22:41ㆍMeteor
DBMS_SCHEDULER ( 10g이상에서만 사용가능 )
dbms_job 패키지보다 확장된 기능으로 dbms_job 에서 안되는 외부 스크립트를 실행 할 수 있음
(1) 주요특징
- 오라클에서 생성된 프로시저나 함수 외에 os에서 생성된 각종 유틸이나 프로그램까지도 실행가능
- 설정할 때 일반적으로 사용하는 자연어를 사용하여 편하게 설정 가능
- db 내부이벤트까지 추적가능하기 때문에 os나 dbms_job 보다 훨씬 다양하게 작업을 체크하고 수행가능
(2) 구성
- program : 이 부분에 dbms_scheduler가 수행할 프로그램이나 프로시저, 스크립트 등에 대한 정보를 저장해서 별도로 생성할 수 있음
- schedule : 이 부분에 dbms_scheduler 가 수행할 job 이 실제 수행할 시간이나 실행 주기등을 별도로 생성 할 수 있음
- job : 새로 생성할 job 부분을 정의
(3) dbms_scheduler 사용하기
실습 1. 신규 job 생성하기
job_tetst1 이라는 테이블에 3초에 1회씩 데이터를 insert 하는 작업을 설정
이 작업을 하기 위해선 해당 계정이 create any job 권한을 가지고 있어야 함
scott 계정에 권한 부여
SYS> grant create any job to scott ;
SYS> conn scott/tiger ;
SCOTT> create table job_test1
2 ( no number ,
3 name varchar2(5) ,
4 rdate date default sysdate ) ;
SCOTT> create sequence seq_job_test1_no ;
SCOTT> create or replace procedure insert_job_test
2 is
3 begin
4 insert into scott.job_test1 (no , name)
5 values(seq_job_test1_no.nextval, dbms_random.string('a',2)) ;
6 commit ;
7 end;
8 /
SCOTT> begin
2 dbms_scheduler.create_job( <-- 신규 JOB을 생성
3 job_name => 'insert_job_test1' , <-- dbms_scheduler 내에서 사용될 job 이름지정
4 job_type => 'plsql_block' , <-- 5번줄에 적은 프로그램의 타입을 적음
5 job_action => 'begin insert_job_test; end;' , <-- 실제 실행될 프로그램을 적는 부분
6 start_date => systimestamp , <-- 해당 job 이 처음 시작될 시간을 지정
7 repeat_interval => 'freq=secondly; interval=3' ); <-- 반복할 주기를 지정
8 end;
9 /
※ 5번줄에는 1) 실제 PL/SQL 블록
2) 프로시저 이름
3) OS에 있는 실행파일
4) program_name 으로 미리생성해둔 프로그램 이름
5) chained 값으로 생성된 체인
위 5가지가 들어갈 수 있음
SYS> select p.job_name, p.job_type, o.object_id, p.enabled, o.last_ddl_time, o.created,
2 cast(p.next_run_date as date) next_run_date, p.state, p.job_class, o.owner,
3 schedule_type
4 from dba_objects o , dba_scheduler_jobs p
5 where o.owner=p.owner
6 and o.object_name=p.job_name
7 and o.object_type='JOB'
8 and o.owner='SCOTT'
실습 3. 특정 job을 일시중지 또는 재시작 하기
SCOTT> exec dbms_scheduler.disable ('insert_job_test1') ; <-- 일시중지
SCOTT> exec dbms_scheduler.enable ('insert_job_test1') ; <-- 다시시작
실습 4. 특정 job 을 삭제
SCOTT> begin
2 dbms_scheduler.drrop_job('insert_job_test1') ;
3 end ;
4 /
실습 5. 외부 스크립트를 생성해서 실행
외부에서 생성된 스크립트를 오라클에서 실행하기 위해서는 해당 스크립트를 실행할 권한과 그룹이 지정되어 있는 externaljob.ora 라는 파일을 수정해야 함
step1. externaljob.ora 파일의 내용을 수정
SYS> !vi /app/oracle/product/11g/rdbms/admin/externaljob.ora
마지막줄의 내용을 아래와 같이 변경
#run_user = nobody -- 기존내용 주석처리
#run_group = nobody -- 기존 내용 주석처리
run_user = oracle
run_group = oinstall
oracle 계정의 소속 그룹을 모를 경우
->$ id oracle 조회
step2. 수정 완료 후 위 파일의 권한을 640 상태로 설정 ( 이 값이 기본적으로 설정되어 있음 )
[oracle@localhost ~] $ls- l $ORACLE_HOME /rdbms/admin/externaljob.ora
step3. 외부 스크립트를 실제로 수행하는 명령인 extjob 파일의 소유자를 변경
extjob 파일의 소유자 root -> oracle 로 변경
[oracle$localhost ~]$ ls -l $ORACLE_HOME/bin/extjob
[root$localhost ~]# chown oracle extjob
[root$localhost ~]# ls -l extjob
이 작업을 하지않을 경우 permission denied 라는 에러가 발생
'Meteor' 카테고리의 다른 글
딥러닝 소개하는 일주일짜리 MIT IAP강의! (0) | 2017.02.07 |
---|---|
오라클 Oracle EXECUTE IMMEDIATE tips (0) | 2017.02.06 |
오라클 - 원하는 시간에만 DB 작업 실행하기 (0) | 2017.02.05 |
오라클 JOB을 스케줄링 (0) | 2017.02.05 |
Oracle SQL performance with database links - db link (0) | 2017.01.29 |