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