DBMS 1

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

DBMS_JOB

DBMS 1
Tibero 가이드
Tibero System Package Guide
DBMS_JOB
작성자
dataonair
작성일
2021-02-18 10:31
조회
1694




제7장DBMS_JOB




내용 목차






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





7.1. 개요




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을 정지할 수 있는 기능은 제공하지 않는다.





7.2. 프로시저




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




7.2.1. BROKEN




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

BROKEN 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    DBMS_JOB.BROKEN
    (
    job IN BINARY_INTEGER,
    broken IN BOOLEAN,
    next_date IN DATE DEFAULT SYSDATE
    );
  • 파라미터

    파라미터 설명
    job 실행할 JOB의 번호이다.
    broken JOB이 broken된 경우 TRUE, 정상 상태인 경우 FALSE이다.
    next_date

    • broken이 TRUE인 경우 무시한다.
    • broken이 FALSE인 경우 다음 실행 시각을 설정한다.
  • 예제
    BEGIN
    /* broken된 JOB을 정상 상태로 변경하고, 한 시간 뒤 실행하도록 수정한다. */
    DBMS_JOB.BROKEN(100, false, sysdate + 1/24);
    END;
    /





7.2.2. CHANGE




저장된 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
    );
  • 파라미터

    파라미터 설명
    job 실행할 JOB의 번호이다.
    what 실행할 PL/SQL 프로시저 혹은 PSM 문장의 시퀀스이다.
    next_date JOB을 실행할 다음 시각이다.
    interval 다음 JOB이 실행될 시각을 계산하기 위한 연산식이다.자세한 내용은“7.2.3. INTERVAL”을 참조한다.
    instance 지원되지 않는 기능이므로 값을 무시한다.
    force 지원되지 않는 기능이므로 값을 무시한다.
  • 예제
    BEGIN
    DBMS_JOB.CHANGE(100, null, null, 'sysdate + 1');
    END;
    /





7.2.3. INTERVAL




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

INTERVAL 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    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 파라미터의 사용 예이다.

    interval 설명
    'sysdate + 1' 하루에 한 번씩 실행한다.
    'next_day(sysdate,''MONDAY'')' 매주 월요일에 실행한다.
    'null' 한 번만 실행한다.
  • 예제
    BEGIN
    /* 하루에 한 번씩 실행한다. */
    DBMS_JOB.INTERVAL(100, 'sysdate + 1');
    END;
    /





7.2.4. NEXT_DATE




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;
    /





7.2.5. REMOVE




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

REMOVE 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    DBMS_JOB.REMOVE
    (
    job IN BINARY_INTEGER
    );
  • 파라미터

    파라미터 설명
    job 삭제할 JOB의 번호이다.
  • 예제
    BEGIN
    DBMS_JOB.REMOVE(100);
    END;
    /





7.2.6. RUN




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

RUN 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    DBMS_JOB.RUN
    (
    job IN BINARY_INTEGER,
    force IN BOOLEAN DEFAULT FALSE
    );
  • 파라미터

    파라미터 설명
    job 실행할 JOB의 번호이다.
    force 지원되지 않는 기능이므로 값을 무시한다.
  • 예제
    BEGIN
    DBMS_JOB.RUN(100);
    END;
    /





7.2.7. SUBMIT




데이터베이스에 새로운 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
    );
  • 파라미터

    파라미터 설명
    job 실행할 JOB의 번호이다.
    what 실행할 PL/SQL 프로시저 혹은 PSM 문장의 시퀀스이다.
    next_date JOB을 다음에 실행할 시각이다.
    interval 다음 JOB이 실행될 시각을 계산하기 위한 연산식이다.자세한 내용은“7.2.3. INTERVAL”을 참조한다.
    no_parse

    • TRUE: submit을 할 때 JOB을 파싱하지 않고, JOB이 실행될 때 파싱을 하게 된다. 따라서 파싱의 실패 여부가 최초 실행 시점에 보고된다.
    • FALSE: JOB에 관련된 프로시저를 미리 파싱한다.
    instance 지원되지 않는 기능이므로 값을 무시한다.
    force 지원되지 않는 기능이므로 값을 무시한다.
  • 예제
    DECLARE
    job_no number;
    BEGIN
    DBMS_JOB.SUBMIT(job_no,'dbms_output.put_line(''ok'');', SYSDATE,
    'SYSDATE + 1');
    END;
    /





7.2.8. WHAT




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

WHAT 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    DBMS_JOB.WHAT
    (
    job IN BINARY_INTEGER,
    WHAT IN VARCHAR2
    );
  • 파라미터

    파라미터 설명
    job 실행할 JOB의 번호이다.
    what 실행할 PL/SQL 프로시저 혹은 PSM 문장의 시퀀스이다.항상 세미콜론(;)으로 끝나는 문자열이 와야 한다.예를 들어 다음과 같은 문자열이 올 수 있다.

    • psm_proc(''abc'', 10);
    • dbms_output.put_line(''ok'');
    • declare x number; begin x := x + 1;dbms_outout.put_line(x); end;
  • 예제
    BEGIN
    /* job번호가 100인 job을 psm_proc 프로시저 호출로 대체한다. */
    DBMS_JOB.WHAT(100, 'psm_proc(''abc'', 10);');
    END;
    /





$!??