본문 바로가기
카테고리 없음

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

by nono22 2023. 12. 4.

오라클 스케줄러 사용법 및 예제

오라클 스케줄러란?

오라클 데이터베이스에 내장된 기능으로, 주기적으로 작업을 자동으로 실행시키는데 사용되는 기능입니다. 스케줄러를 사용하면 데이터베이스 관리자는 일일히 작업을 실행시키지 않고도 정기적인 관리 작업을 스케줄링하고, 세부 조건과 실행 타이밍을 설정할 수 있습니다.

스케줄러 사용법

오라클 스케줄러를 사용하기 위해서는 다음 절차를 따르면 됩니다.

  1. 스케줄러 작업(Job) 생성
  2. 스케줄 객체(Schedule) 정의
  3. 작업과 스케줄 객체 매핑
  4. 작업 실행

스케줄러를 사용하기 위해서는 권한이 필요합니다. DBA 권한이 있는 사용자이거나, CREATE JOB 시스템 권한이 부여된 사용자만이 스케줄 작업을 생성할 수 있습니다.

1. 스케줄러 작업(Job) 생성

BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
        job_name        => 'JOB_NAME',
        job_type        => 'PLSQL_BLOCK',
        job_action      => 'BEGIN YOUR_PROCEDURE_NAME; END;',
        start_date      => SYSTIMESTAMP,
        repeat_interval => 'FREQ=DAILY; INTERVAL=1',
        enabled         => TRUE);
END;
/

위 예제는 매일 한 번씩 특정 PL/SQL 블록을 실행하는 스케줄러 작업을 생성하는 예제입니다. JOB_NAME은 작업 이름, job_action은 실행될 PL/SQL 블록입니다. start_date는 작업이 실행되는 시작 일시를 지정하고, repeat_interval은 작업이 반복되는 주기를 정의합니다. enabled는 작업이 활성화되어 있는지 여부를 결정합니다.

2. 스케줄 객체(Schedule) 정의

BEGIN
    DBMS_SCHEDULER.CREATE_SCHEDULE (
        schedule_name   => 'SCHEDULE_NAME',
        repeat_interval => 'FREQ=DAILY; INTERVAL=1',
        start_date      => SYSTIMESTAMP,
        end_date        => SYSTIMESTAMP + INTERVAL '1' YEAR);
END;
/

위 예제는 매일 한 번씩 반복되는 스케줄 객체를 생성하는 예제입니다. SCHEDULE_NAME은 스케줄 객체의 이름을 나타내며, repeat_interval은 반복 주기를 정의합니다. start_date는 스케줄이 시작되는 일시를 지정하고, end_date는 스케줄이 종료되는 일시를 지정합니다.

3. 작업과 스케줄 객체 매핑

BEGIN
    DBMS_SCHEDULER.ASSIGN_SCHEDULE (
        job_name       => 'JOB_NAME',
        schedule_name  => 'SCHEDULE_NAME');
END;
/

위 예제는 작업과 스케줄 객체를 매핑하는 예제입니다. JOB_NAME은 매핑할 작업의 이름이며, SCHEDULE_NAME은 매핑할 스케줄 객체의 이름입니다.

4. 작업 실행

BEGIN
    DBMS_SCHEDULER.RUN_JOB('JOB_NAME');
END;
/

위 예제는 작업을 직접 실행하는 예제입니다. JOB_NAME은 실행할 작업의 이름입니다.

스케줄러 예제

실제로 오라클 스케줄러를 사용해보는 예제를 살펴보겠습니다.

매일 오전 9시에 특정 작업 실행

BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
        job_name        => 'DAILY_JOB',
        job_type        => 'PLSQL_BLOCK',
        job_action      => 'BEGIN YOUR_PROCEDURE_NAME; END;',
        start_date      => TRUNC(SYSDATE) + INTERVAL '9' HOUR,
        repeat_interval => 'FREQ=DAILY; INTERVAL=1',
        enabled         => TRUE);
END;
/

위 예제는 매일 오전 9시에 특정 PL/SQL 블록을 실행하는 스케줄러 작업을 생성하는 예제입니다. start_date는 현재 날짜의 9시를 지정하고, repeat_interval은 매일 반복되도록 설정되어 있습니다.

매주 월요일 오전 10시에 특정 작업 실행

BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
        job_name        => 'WEEKLY_JOB',
        job_type        => 'PLSQL_BLOCK',
        job_action      => 'BEGIN YOUR_PROCEDURE_NAME; END;',
        start_date      => TRUNC(NEXT_DAY(SYSDATE, 'MONDAY')) + INTERVAL '10' HOUR,
        repeat_interval => 'FREQ=WEEKLY; INTERVAL=1; BYDAY=MON',
        enabled         => TRUE);
END;
/

위 예제는 매주 월요일 오전 10시에 특정 PL/SQL 블록을 실행하는 스케줄러 작업을 생성하는 예제입니다. start_date는 현재 날짜의 다음 월요일 날짜의 10시를 지정하고, repeat_interval은 매주 월요일마다 반복되도록 설정되어 있으며, BYDAY를 사용하여 월요일에 실행되도록 지정하였습니다.

위 예제를 참고하여 자신의 환경에 맞게 스케줄러를 설정해보세요. 스케줄러를 활용하면 반복적인 작업을 자동화하여 일일히 실행하지 않아도 되어 시간과 노력을 절약할 수 있습니다.

댓글