이 패키지를 설정하게 되면 SNP 백그라운드 프로세스가 이 패키지에 설정되어 있는 작업을 수행하게 된다.
SNP 백그라운드 프로세스는 선택적인 프로세스로 초기화 파라미터 파일에 아래의 항목을 설정 한 후 재 시작을 하면 실행 된다.
- job_queue_processes = 1 <-- SNP 프로세스의 개수를 지정한다.
- job_queue_interval = 60 <-- SNP 프로세스가 Sleep 상태에서 깨어나는 간격을 초로 지정한다.
이 패키지는 아래와 같은 다양한 프로시저들을 가지고 있다.
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을 수동으로 수행한다. |
1. 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 혹은 procedure or package 이름을 지정한다. 이곳에 직접 수행하기를 원하는 sql 문장을 써도 된다. |
next_date |
다음에 수행될 시간을 지정한다. |
interval |
수행되는 주기를 지정하며 초 단위까지 지정 가능하다. |
no_parse |
Parse 여부를 지정한다. 기본값은 false로 parse를 수행한다. |
(1) 새로운 job 등록 테스트
위에서 살펴본 프로시저들을 사용해서 새로운 job을 등록하는 테스트를 하겠다. 테스트 내용은 job_test01이라느 테이블을 만든 후 1분에 1번씩 해당 테이블에 데이터를 insert 하는 것이다.
step 1. 테스트용 테이블과 sequencem procedure를 생성한다.
SQL> conn ORACLE_TEST/oracle; Sequence created. SQL> create table job_test01 Table created. SQL> create or replace procedure insert_job_test01 Procedure created. SQL> |
step2. job을 등록할 프로시저를 생성한다.
SQL> !vi job1.sql :wq! |
* 참고 : 위 5행의 시간 설정 방법 *
- 10분에 한번씩 실행하도록 지정하는 경우 sysdate + 1/24/6 or sysdate + 1/144 -> 1/24 (1시간-60분) / 6 : 10분 단위, 1/144 : 24*6으로 나누어도 같은 의미 입니다. (1일은 1440분이므로)
- 1분에 한번으로 지정하는 경우 sysdate + 1/24/60 or sysdate +1/1440
- 5분에 한번으로 지정하는 경우 sysdate + 5/24/60
- 매일 새벽 2시로 지정하는 경우 trunc(sysdate) + 1 + 2/24 -> 다음날 새벽 2시를 지정함
위 예에서 trunc(sysdate)를 사용한 이유는 trunc를 사용하지 않으면 분 단위까지 나오기 때문입니다.
- 매일 반 11시로 지정하는 경우 trunc(sysdate) +23/24 -> 오늘 밤 11시를 지정했음 |
step3. job을 등록한다.
SQL> variable jno number; PL/SQL procedure successfully completed. SQL> print jno; JNO SQL> commit; <-- 이 시간부터 job이 수행된다. 즉 commit이 안되면 수행되지 않는다 Commit complete. SQL> |
step4. 수행되고 있는 job 내용을 확인한다.
SQL> set line 200 WHAT JOB NEXT_DATE NEXT_SEC FAILURES B SQL> |
step5. 실제 테이블에 데이터가 입력되는지 확인한다.
SQL> select * from job_test01; NO NAME SQL> |
(2) 등록되어 있는 job 삭제하기
SQL> select what, job, next_date, next_sec, failures, broken WHAT JOB NEXT_DATE NEXT_SEC FAILURES B SQL> exec dbms_job.remove(21); PL/SQL procedure successfully completed. SQL> select what, job, next_date, next_sec, failures, broken no rows selected SQL> |
(3) 등록되어 있는 job 수정하기
SQL> select what, job, next_date,next_sec,interval
|
수행시간을 1분마다에서 5분마다 1회 수행으로 변경함.
SQL> exec dbms_job.change(:jno,'ORACLE_TEST.insert_job_test01;',sysdate,'sysdate+5/24/60'); PL/SQL procedure successfully completed.
SQL> select what, job, next_date,next_sec,interval WHAT JOB NEXT_DATE NEXT_SEC INTERVAL SQL> |
'Oracle > Admin' 카테고리의 다른 글
Listener 로그 형식을 11g 이전 버전 형식으로 변경 (0) | 2013.09.04 |
---|---|
자동 ANALYZE 스케쥴러 작업 해지 (0) | 2013.09.04 |
Oracle11g (11.1.0.7.0) 부터 deprecate된 parameters (0) | 2013.08.23 |
자동 sql 실행 메모리에 대해 (0) | 2013.08.02 |
PGA(Program Global Area)의 개념 (0) | 2013.08.02 |