DBMS_JOB

DBMS_JOB 패키지의 기본 개념과 패키지 내의 프러시저를 사용하는 방법을 설명합니다.

개요

Tibero에서는 주기적으로 데이터베이스에 추가된 JOB을 검사하여, 사용자가 설정한 시각이 되면 해당하는 JOB을 실행합니다.

DBMS_JOB은 PSM에서 사용 가능한 문장을 JOB으로 등록하고, 이 JOB을 실행할 수 있는 연산을 제공 하는 패키지입니다. DBMS_JOB 패키지 내의 프러시저를 이용하여, JOB을 데이터베이스에 추가하고 바로 실행하거나 정해진 시각에 실행되도록 설정할 수 있습니다.

다음은 DBMS_JOB 패키지의 특징입니다.

  • JOB의 생성, 실행 및 관리에는 권한이 필요합니다.

  • JOB을 추가 또는 변경하는 경우 커밋을 실행하지 않아도 자동으로 커밋되며, JOB 내에서 실행한 작업 도 자동으로 커밋됩니다.

  • 현재 데이터베이스에 추가된 JOB은 DBA_JOBS, ALL_JOBS, USER_JOBS 뷰를 통해 확인할 수 있습니다.

  • JOB 실행이 실패한 경우에는 재실행되며, 16번 실패하게 되면 해당 JOB은 broken 상태가 됩니다.

  • 실행 중인 JOB을 정지할 수 있는 기능은 제공하지 않습니다.

JOB/SCHEDULER system 권한

권한
설명

CREATE JOB

  • 자신의 스키마에 JOB, SCHEDULE, PROGRAM 등을 생성할 수 있음

  • 또한, CREATE JOB 권한이 없더라도 자신의 스키마 내에 있는 object는 변경 및 삭제가 가능

  • 이는 CREATE ANY JOB 권한이 있는 다른 사용자가 해당 object를 생성한 경우에 해당

CREATE ANY JOB

  • SYS를 제외한 모든 스키마에 JOB, SCHEDULE, PROGRAM 등을 생성, 수정 및 삭제할 수 있음

  • 이 권한은 매우 강력하며, 이 권한을 가진 경우 DB 내 다른 사용자로서 어떤 PL/SQL 코드도 실행할 수 있도록 허용하기 때문에 신중하게 사용해야 함

프러시저

본 절에서는 DBMS_JOB 패키지에서 제공하는 프러시저를 알파벳 순으로 설명합니다.

BROKEN

저장된 JOB의 상태를 정상 또는 broken 상태로 설정하는 프러시저입니다. broken되어 있던 JOB을 정상 상 태로 만들 경우 JOB의 다음 실행 시각을 설정할 수 있습니다.

BROKEN 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

job

실행할 JOB의 번호

broken

  • TRUE: JOB을 broken 상태로 설정하려는 경우

  • FALSE: JOB을 정상(Not broken) 상태로 설정하려는 경우

next_date

  • broken이 TRUE인 경우 무시

  • broken이 FALSE인 경우 다음 실행 시각을 설정

  • 예제

CHANGE

저장된 JOB의 필드를 변경하는 프러시저입니다.

CHANGE 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

job

실행할 JOB의 번호

what

실행할 PL/SQL 프러시저 또는 PSM 문장의 시퀀스

next_date

JOB을 실행할 다음 시각

interval

  • 다음 JOB이 실행될 시각을 계산하기 위한 연산식

  • 자세한 내용은 “17.2.4. INTERVAL”을 참고

instance

JOB을 수행할 INSTANCE

(기본값: 0, ANY_INSTANCE의 의미)

force

지원되지 않는 기능이므로 값을 무시

  • 예제

INSTANCE

JOB을 수행할 INSTANCE를 변경하는 프러시저입니다.

INSTANCE 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

job

실행할 JOB의 번호

instance

JOB을 수행할 INSTANCE

(0은 ANY_INSTANCE의 의미)

force

지원되지 않는 기능이므로 값을 무시

  • 예제

INTERVAL

JOB을 얼마나 자주 실행할지 정하는 파라미터를 변경하는 프러시저입니다.

INTERVAL 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

job

실행할 JOB의 번호

interval

  • 다음에 JOB을 실행할 시각인 next_date를 업데이트하기 위한 연산식

  • NULL 또는 날짜형으로 evaluate될 수 있는 연산식의 문자열이어야 함

  • 문자열 입력 시 반드시 작은따옴표(' ')로 감싸야 함 (최소 초 단위까지 가능)

  • JOB을 실행하기 전에 evaluate됨

  • JOB이 성공적으로 실행되고, interval의 계산 값이 NULL이면 해당 JOB은 삭제됨

  • interval 파라미터의 사용 예

– 예1)

'sysdate + 1'

하루에 한 번씩 실행

– 예2) 'next_day(sysdate,''MONDAY'')'

매주 월요일에 실행

– 예3)

'null' 한 번만 실행

  • 예제

NEXT_DATE

JOB이 스케줄되어 자동으로 실행될 시각을 변경하는 프러시저입니다. 실행된 후에는 interval 값에 의해 업데이트됩니다.

NEXT_DATE 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

job

실행할 JOB의 번호

next_date

JOB이 스케줄되어 실행될 시각

  • 예제

PURGE_LOG

Job 로그를 정리하기 위한 기능을 제공합니다. 지정한 일 수 이전의 로그만 유지되고, 나머지 로그는 삭제됩니다.

PURGE_LOG 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

log_history

현재 시점을 기준으로 보관할 로그의 기간(일 수, Day) 인자를 지정하지 않을 경우 기본값은 0으로 처리되며, 모든 Job 로그가 삭제됩니다.

  • 예제

REMOVE

데이터베이스에 추가된 JOB을 삭제하는 프러시저입니다.

REMOVE 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

job

삭제할 JOB의 번호

  • 예제

RUN

JOB을 현재 세션에서 즉시 실행하는 프러시저입니다. JOB이 broken되어 있어도 실행하고, 실행에 성공한 경우 JOB을 정상 상태로 변경합니다.

RUN 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

job

삭제할 JOB의 번호

force

지원되지 않는 기능이므로 값을 무시

  • 예제

SET_AUTO_PURGE

Job 로그 자동 정리 기능을 설정하기 위해 사용됩니다. 내부적으로 PURGE_LOG 프로시저를 주기적으로 실행하는 Job이 등록되며, 기존에 등록되어 있던 자동 정리 Job이 존재할 경우 해당 Job은 삭제되고 재등록됩니다.

SET_AUTO_PURGE 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

log_history

보존할 Job 로그의 기간(일 수, Day)

purge_interval

자동 정리 Job이 실행될 주기를 지정

  • 예제

STOP_JOB

현재 실행 중인 JOB 을 중지하는 프로시저입니다. JOB 을 수행 중인 세션을 SESSION KILL 방식으로 종료하므로 실행 세션은 ALTER SYSTEM KILL SESSION 권한을 반드시 보유해야 합니다.

STOP_JOB 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

jid

중지할 JOB의 번호

force

지원되지 않는 기능이므로 값을 무시

  • 예제

SUBMIT

데이터베이스에 새로운 JOB을 추가하는 프러시저입니다.

SUBMIT 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

job

실행할 JOB의 번호

what

실행할 PL/SQL 프러시저 또는 PSM 문장의 시퀀스

next_date

JOB을 다음에 실행할 시각

interval

  • 다음 JOB이 실행될 시각을 계산하기 위한 연산식

  • 자세한 내용은 “17.2.4. INTERVAL”을 참고

no_parse

  • TRUE : submit을 할 때 JOB을 파싱하지 않고, JOB이 실행될 때 파싱을 하게 됨. 따라서 파싱의 실패 여부가 최초 실행 시점에 보고됨

  • FALSE : JOB에 관련된 프러시저를 미리 파싱

instance

JOB을 수행할 INSTANCE (기본값: 0, ANY_INSTANCE의 의미)

force

지원되지 않는 기능이므로 값을 무시

  • 예제

WHAT

JOB이 실행하는 작업을 변경하는 프러시저입니다.

WHAT 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

job

실행할 JOB의 번호

what

  • 실행할 PL/SQL 프러시저 또는 PSM 문장의 시퀀스

  • 항상 세미콜론(;)으 로 끝나는 문자열이 와야 함

  • 예를 들어 다음과 같은 문자열이 올 수 있음

– 예1)

psm_proc(''abc'', 10);

– 예2)

dbms_output.put_line(''ok'');

– 예3)

declare x number;

begin x := x + 1;

dbms_outout.put_line(x);

end;

  • 예제

Last updated