[Oracle] 오라클 스케줄러 사용법 & 예제

    오라클 잡과 스케줄러

    데이터베이스를 운영하다보면 하루에 한번씩 운영서버의 데이터를 개발서버에 데이터를 넣어주거나 하는 주기적인 작업을 처리할 때가 있습니다. 이렇게 일정한 주기의 작업을 잡(Job)이라고 합니다. 이러한 주기적인 잡을 수행하는 방법은 스케줄러를 활용하는 방법이 있습니다.


    오라클 스케줄러 (DBMS_SCHEDULER)

    기존에는 주기적인 작업을 잡 패키지(DBMS_JOB)라는 것을 활용하여 작업을 하였지만 다양한 문제점으로 인해 오라클 10g부터 새로운 스케줄러 패키지인 오라클 스케줄러 (DBMS_SCHEDULER)라는 패키지가 추가되었습니다. 최근에는 이 오라클 스케줄러라는 패키지를 통해서 주기적인 잡(Job)을 처리합니다.


     오라클 스케줄링 사용법 

    잡 객체를 이용한 스케줄링

    BEGIN
        DBMS_SCHEDULER.CREATE_JOB
        (
        JOB_NAME => 'EX_JOB',
        JOB_TYPE => 'STORED_PROCEDURE',
        JOB_ACTION => 'EX_PROC',
        REPEAT_INTERVAL => 'FREQ=MINUTELY; INTERVAL =1', --1분에 1번
        COMMENTS => '잡객체 1'
        );
    END;
    

    위의 쿼리를 풀어서 말해보자면 EX_JOB이라는 이름의 잡이 EX_PROC라는 프로시저를 1분에 1번씩 실행한다는 말입니다.


    잡 생성 내역 확인

    SELECT 
    JOB_NAME, 
    JOB_TYPE, 
    JOB_ACTION, 
    REPEAT_INTERVAL, 
    ENABLED, 
    AUTO_DROP, 
    STATE, 
    COMMENTS 
    FROM 
    USER_SCHEDULER_JOBS 
    

    잡의 전체 목록은 USER_SCHEDULER_JOBS라는 테이블안에서 확인할 수 있습니다.


    잡 실행

    BEGIN
        DBMS_SCHEDULER.ENABLE ('EX_JOB');
    END;
    

    잡을 처음 생성하면 비활성화 ENABLE = FALSE 상태로 존재합니다. 잡을 활성화 시키려면 위의 코드를 실행시켜주면 그 즉시 잡은 활성상태 ENABLE = TRUE 에 들어갑니다.


    잡 객체 실행로그 확인

    SELECT * FROM USER_SCHEDULER_JOB_LOG;
    

    SELECT * FROM USER_SCHEDULER_JOB_RUN_DETAILS;
    

    잡의 실행 로그는 위의 테이블에서 확인할 수 있습니다.

    댓글(4)

    • kdl523
      2021.01.14 10:51

      위 예제처럼 잡 생성 후에 실행까지 됐는데 중지하거나 삭제는 어떻게 하는건가요?

      • 2021.01.18 12:37 신고

        미처 그 부분의 포스팅을 안했네요.

        (JOB 정지)
        EXECUTE dbms_job.broken(JOB번호, FALSE);
        commit;

        (JOB 삭제)
        EXECUTE dbms_job.REMOVE(JOB번호);

        위와 같이 하시면 됩니다.

    • Q
      2021.07.28 16:05

      job 번호는 어떻게 아나요?

    Designed by JB FACTORY