DBMS 1
DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!
DBMS_JOB
Tibero System Package Guide
7.1. 개요
7.2. 프로시저
7.2.1. BROKEN
7.2.2. CHANGE
7.2.3. INTERVAL
7.2.4. NEXT_DATE
7.2.5. REMOVE
7.2.6. RUN
7.2.7. SUBMIT
7.2.8. WHAT
Tibero에서는 주기적으로 데이터베이스에 추가된 JOB을 검사하여, 사용자가 설정한 시각이 되면 해당하는 JOB을 실행한다.
DBMS_JOB은 PSM에서 사용 가능한 문장을 JOB으로 등록하고, 이 JOB을 실행할 수 있는 연산을 제공하는 패키지이다. DBMS_JOB 패키지 내의 프로시저를 이용하여, JOB을 데이터베이스에 추가하고 바로 실행하거나 정해진 시각에 실행되도록 설정할 수 있다.
다음은 DBMS_JOB 패키지의 특징이다.
- DBMS_JOB 패키지의 사용할 때 DBA 권한은만 실행하거나 변경할 수 있다.
- 특정 인스턴스(instance)에서 JOB을 실행하도록 지정하는 기능은 지원하지 않는다. 따라서 파라미터에 입력 값으로 instance와 force parameter가 입력될 경우 무시하게 된다.
- JOB을 추가 또는 변경하는 경우 커밋을 실행하지 않아도 자동으로 커밋되며, JOB 내에서 실행한 작업도 자동으로 커밋된다.
- 현재 데이터베이스에 추가된 JOB은 DBA_JOBS, ALL_JOBS, USER_JOBS 뷰를 통해 확인할 수 있다.
- JOB 실행이 실패한 경우에는 재실행되며, 16번 실패하게 되면 해당 JOB은 broken상태가 된다.
- 실행 중인 JOB을 정지할 수 있는 기능은 제공하지 않는다.
본 절에서는 DBMS_JOB 패키지에서 제공하는 프로시저를 알파벳 순으로 설명한다.
저장된 JOB의 상태를 정상 또는 broken 상태로 설정하는 프로시저이다. broken되어 있던 JOB을 정상 상태로 만들 경우, JOB의 다음 실행 시각을 설정할 수 있다.
BROKEN 프로시저의 세부 내용은 다음과 같다.
- 프로토타입
DBMS_JOB.BROKEN
(
job IN BINARY_INTEGER,
broken IN BOOLEAN,
next_date IN DATE DEFAULT SYSDATE
);
- 파라미터
- 예제
BEGIN
/* broken된 JOB을 정상 상태로 변경하고, 한 시간 뒤 실행하도록 수정한다. */
DBMS_JOB.BROKEN(100, false, sysdate + 1/24);
END;
/
저장된 JOB의 필드를 변경하는 프로시저이다.
CHANGE 프로시저의 세부 내용은 다음과 같다.
- 프로토타입
DBMS_JOB.CHANGE
(
job IN BINARY_INTEGER,
what IN VARCHAR2,
next_date IN DATE,
interval IN VARCHAR2,
instance IN BINARY_INTEGER DEFAULT NULL,
force IN BOOLEAN DEFAULT FALSE
);
- 파라미터
- 예제
BEGIN
DBMS_JOB.CHANGE(100, null, null, 'sysdate + 1');
END;
/
JOB을 얼마나 자주 실행할지 정하는 파라미터를 변경하는 프로시저이다.
INTERVAL 프로시저의 세부 내용은 다음과 같다.
- 프로토타입
DBMS_JOB.INTERVAL
(
job IN BINARY_INTEGER,
interval IN VARCHAR2
);
- 파라미터
다음은 interval 파라미터의 사용 예이다.
- 예제
BEGIN
/* 하루에 한 번씩 실행한다. */
DBMS_JOB.INTERVAL(100, 'sysdate + 1');
END;
/
JOB이 스케줄되어 자동으로 실행될 시각을 변경하는 프로시저이다. 실행된 후에는 interval 값에 의해 업데이트된다.
NEXT_DATE 프로시저의 세부 내용은 다음과 같다.
- 프로토타입
DBMS_JOB.NEXT_DATE
(
job IN BINARY_INTEGER,
next_date IN DATE
);
- 파라미터
- 예제
BEGIN
/* 10분 후에 실행하도록 변경한다. */
DBMS_JOB.NEXT_DATE(100, sysdate + 10/24/60);
END;
/
데이터베이스에 추가된 JOB을 삭제하는 프로시저이다.
REMOVE 프로시저의 세부 내용은 다음과 같다.
JOB을 현재 세션에서 즉시 실행하는 프로시저이다. JOB이 broken되어 있어도 실행하고, 실행에 성공한 경우 JOB을 정상 상태로 변경한다.
RUN 프로시저의 세부 내용은 다음과 같다.
- 프로토타입
DBMS_JOB.RUN
(
job IN BINARY_INTEGER,
force IN BOOLEAN DEFAULT FALSE
);
- 파라미터
- 예제
BEGIN
DBMS_JOB.RUN(100);
END;
/
데이터베이스에 새로운 JOB을 추가하는 프로시저이다.
SUBMIT 프로시저의 세부 내용은 다음과 같다.
- 프로토타입
DBMS_JOB.SUBMIT
(
job OUT BINARY_INTEGER,
what IN VARCHAR2,
next_date IN DATE DEFAULT sysdate,
interval IN VARCHAR2 DEFAULT 'null',
no_parse IN BOOLEAN DEFAULT FALSE,
instance IN BINARY_INTEGER DEFAULT NULL,
force IN BOOLEAN DEFAULT FALSE
);
- 파라미터
- 예제
DECLARE
job_no number;
BEGIN
DBMS_JOB.SUBMIT(job_no,'dbms_output.put_line(''ok'');', SYSDATE,
'SYSDATE + 1');
END;
/
JOB이 실행하는 작업을 변경하는 프로시저이다.
WHAT 프로시저의 세부 내용은 다음과 같다.
- 프로토타입
DBMS_JOB.WHAT
(
job IN BINARY_INTEGER,
WHAT IN VARCHAR2
);
- 파라미터
- 예제
BEGIN
/* job번호가 100인 job을 psm_proc 프로시저 호출로 대체한다. */
DBMS_JOB.WHAT(100, 'psm_proc(''abc'', 10);');
END;
/
$!??