내용 목차
본 장에서는 DBMS_JOB 패키지의 기본 개념과 패키지 내의 프러시저를 사용하는 방법을 설명한다.
Tibero에서는 주기적으로 데이터베이스에 추가된 JOB을 검사하여, 사용자가 설정한 시각이 되면 해당하는 JOB을 실행한다.
DBMS_JOB은 PSM에서 사용 가능한 문장을 JOB으로 등록하고, 이 JOB을 실행할 수 있는 연산을 제공하는 패키지이다. DBMS_JOB 패키지 내의 프러시저를 이용하여, JOB을 데이터베이스에 추가하고 바로 실행하거나 정해진 시각에 실행되도록 설정할 수 있다.
다음은 DBMS_JOB 패키지의 특징이다.
DBMS_JOB 패키지의 사용할 때 DBA 권한은 필요하지 않으며, 추가된 JOB은 오직 JOB의 소유자만 실행하거나 변경할 수 있다.
특정 인스턴스(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의 다음 실행 시각을 설정할 수 있다.
프로토타입
DBMS_JOB.BROKEN ( job IN BINARY_INTEGER, broken IN BOOLEAN, next_date IN DATE DEFAULT SYSDATE );
파라미터
파라미터 | 설명 |
---|---|
job | 실행할 JOB의 번호이다. |
broken |
|
next_date |
|
예제
BEGIN /* broken된 JOB을 정상 상태로 변경하고, 한 시간 뒤 실행하도록 수정한다. */ DBMS_JOB.BROKEN(100, false, sysdate + 1/24); END; /
저장된 JOB의 필드를 변경하는 프러시저이다.
프로토타입
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 );
파라미터
파라미터 | 설명 |
---|---|
job | 실행할 JOB의 번호이다. |
what | 실행할 PL/SQL 프러시저 또는 PSM 문장의 시퀀스이다. |
next_date | JOB을 실행할 다음 시각이다. |
interval | 다음 JOB이 실행될 시각을 계산하기 위한 연산식이다. 자세한 내용은 “9.2.3. INTERVAL”을 참고한다. |
instance | 지원되지 않는 기능이므로 값을 무시한다. |
force | 지원되지 않는 기능이므로 값을 무시한다. |
예제
BEGIN DBMS_JOB.CHANGE(100, null, null, 'sysdate + 1'); END; /
JOB을 얼마나 자주 실행할지 정하는 파라미터를 변경하는 프러시저이다.
프로토타입
DBMS_JOB.INTERVAL ( job IN BINARY_INTEGER, interval IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
job | 실행할 JOB의 번호이다. |
interval | 다음에 JOB을 실행할 시각인 next_date를 업데이트하기 위한 연산식이다. NULL 또는 날짜형으로 evaluate될 수 있는 연산식의 문자열이어야 한다. (최소 초 단위까지 가능) JOB을 실행하기 전에 evaluate된다. JOB이 성공적으로 실행되고, interval의 계산 값이 NULL이면 해당 JOB은 삭제된다. 다음은 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 );
파라미터
파라미터 | 설명 |
---|---|
job | 실행할 JOB의 번호이다. |
next_date | JOB이 스케줄되어 실행될 시각이다. |
예제
BEGIN /* 10분 후에 실행하도록 변경한다. */ DBMS_JOB.NEXT_DATE(100, sysdate + 10/24/60); END; /
데이터베이스에 추가된 JOB을 삭제하는 프러시저이다.
프로토타입
DBMS_JOB.REMOVE ( job IN BINARY_INTEGER );
파라미터
파라미터 | 설명 |
---|---|
job | 삭제할 JOB의 번호이다. |
예제
BEGIN DBMS_JOB.REMOVE(100); END; /
JOB을 현재 세션에서 즉시 실행하는 프러시저이다. JOB이 broken되어 있어도 실행하고, 실행에 성공한 경우 JOB을 정상 상태로 변경한다.
프로토타입
DBMS_JOB.RUN ( job IN BINARY_INTEGER, force IN BOOLEAN DEFAULT FALSE );
파라미터
파라미터 | 설명 |
---|---|
job | 실행할 JOB의 번호이다. |
force | 지원되지 않는 기능이므로 값을 무시한다. |
예제
BEGIN DBMS_JOB.RUN(100); END; /
데이터베이스에 새로운 JOB을 추가하는 프러시저이다.
프로토타입
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 );
파라미터
파라미터 | 설명 |
---|---|
job | 실행할 JOB의 번호이다. |
what | 실행할 PL/SQL 프러시저 또는 PSM 문장의 시퀀스이다. |
next_date | JOB을 다음에 실행할 시각이다. |
interval | 다음 JOB이 실행될 시각을 계산하기 위한 연산식이다. 자세한 내용은 “9.2.3. INTERVAL”을 참고한다. |
no_parse |
|
instance | 지원되지 않는 기능이므로 값을 무시한다. |
force | 지원되지 않는 기능이므로 값을 무시한다. |
예제
DECLARE job_no number; BEGIN DBMS_JOB.SUBMIT(job_no,'dbms_output.put_line(''ok'');', SYSDATE, 'SYSDATE + 1'); END; /
JOB이 실행하는 작업을 변경하는 프러시저이다.
프로토타입
DBMS_JOB.WHAT ( job IN BINARY_INTEGER, WHAT IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
job | 실행할 JOB의 번호이다. |
what | 실행할 PL/SQL 프러시저 또는 PSM 문장의 시퀀스이다. 항상 세미콜론(;)으로 끝나는 문자열이 와야 한다. 예를 들어 다음과 같은 문자열이 올 수 있다.
|
예제
BEGIN /* job번호가 100인 job을 psm_proc 프러시저 호출로 대체한다. */ DBMS_JOB.WHAT(100, 'psm_proc(''abc'', 10);'); END; /