본문 바로가기
Database

오라클 DBMS_SCHEDULER로 작업 스케줄링하기

by 굿센스굿 2024. 12. 4.
반응형

 

DBMS_SCHEDULER는 오라클 데이터베이스에서 작업 스케줄링을 수행하는 강력한 도구입니다. 이 패키지는 데이터베이스 내에서 주기적인 작업을 자동화하거나, 특정 조건에 따라 프로세스를 실행하도록 설정할 수 있어 DB 관리자의 업무를 크게 단순화합니다. 이번 글에서는 DBMS_SCHEDULER의 기본 개념, 주요 기능, 사용 방법과 함께 실무에서 유용한 예제 3가지를 소개합니다.


1. DBMS_SCHEDULER란 무엇인가?

DBMS_SCHEDULER는 오라클 데이터베이스에 내장된 스케줄링 패키지로, 다음과 같은 작업을 자동화할 수 있습니다.

  • PL/SQL 블록 실행
  • 외부 운영 체제 명령 실행
  • 특정 시간 및 주기별 데이터 정리
  • 이벤트 기반 작업 처리

이전 버전의 DBMS_JOB를 대체하며, 보다 세분화된 제어와 향상된 기능을 제공합니다.

주요 특징

  1. 고급 일정 설정: 단순 주기성뿐만 아니라 복잡한 캘린더 조건도 지원.
  2. 리소스 관리 통합: 리소스 소비를 최소화하도록 작업 우선순위 관리 가능.
  3. 확장성: 다중 데이터베이스 환경에서의 작업 관리.

2. DBMS_SCHEDULER의 기본 구조

DBMS_SCHEDULER는 작업(Job), 프로그램(Program), **스케줄(Schedule)**로 구성됩니다.
이 세 가지를 조합하여 유연한 스케줄링이 가능합니다.

2.1 작업(Job)

  • 스케줄러에서 실행될 특정 작업 단위입니다.
  • SQL, PL/SQL, 운영 체제 명령 등을 실행할 수 있습니다.

구문 예제:

BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
    job_name        => 'MY_JOB',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN DBMS_OUTPUT.PUT_LINE(''Hello, Scheduler!''); END;',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'FREQ=MINUTELY; INTERVAL=10',
    enabled         => TRUE
  );
END;
/

2.2 프로그램(Program)

  • 재사용 가능한 작업 정의를 생성하는 데 사용됩니다.
  • 여러 작업에서 동일한 프로그램을 참조할 수 있습니다.

구문 예제:

BEGIN
  DBMS_SCHEDULER.CREATE_PROGRAM(
    program_name => 'MY_PROGRAM',
    program_type => 'PLSQL_BLOCK',
    program_action => 'BEGIN DBMS_STATS.GATHER_SCHEMA_STATS(ownname => ''HR''); END;',
    enabled => TRUE
  );
END;
/

2.3 스케줄(Schedule)

  • 작업의 실행 시간을 정의하는 객체입니다.

구문 예제:

BEGIN
  DBMS_SCHEDULER.CREATE_SCHEDULE(
    schedule_name => 'DAILY_SCHEDULE',
    start_date => SYSTIMESTAMP,
    repeat_interval => 'FREQ=DAILY; BYHOUR=9; BYMINUTE=0',
    end_date => NULL
  );
END;
/

3. 실무 예제 3가지

예제 1: 매일 아침 9시에 데이터 백업 작업 실행

BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
    job_name        => 'DAILY_BACKUP',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN BACKUP_PROCEDURE(); END;',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'FREQ=DAILY; BYHOUR=9; BYMINUTE=0',
    enabled         => TRUE
  );
END;
/

설명:

  • BACKUP_PROCEDURE는 사용자 정의 백업 절차를 호출합니다.
  • 매일 오전 9시에 실행되도록 설정되어 있습니다.

예제 2: 5분 간격으로 시스템 상태 로깅

BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
    job_name        => 'LOG_SYSTEM_STATUS',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN LOG_SYSTEM_STATS(); END;',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'FREQ=MINUTELY; INTERVAL=5',
    enabled         => TRUE
  );
END;
/

설명:

  • LOG_SYSTEM_STATS는 시스템 상태를 기록하는 PL/SQL 블록입니다.
  • 5분마다 실행되도록 설정되어 시스템 모니터링 자동화에 적합합니다.

예제 3: 주말마다 사용되지 않는 테이블 정리

BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
    job_name        => 'CLEAN_UNUSED_TABLES',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN PURGE_UNUSED_TABLES(); END;',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'FREQ=WEEKLY; BYDAY=SAT; BYHOUR=23',
    enabled         => TRUE
  );
END;
/

설명:

  • PURGE_UNUSED_TABLES는 사용하지 않는 테이블을 삭제하는 프로시저입니다.
  • 매주 토요일 오후 11시에 실행됩니다.

4. 주요 관리 작업

4.1 작업 일시 중지 및 재개

  • 일시 중지:
  • BEGIN DBMS_SCHEDULER.DISABLE('MY_JOB'); END; /
  • 재개:
  • BEGIN DBMS_SCHEDULER.ENABLE('MY_JOB'); END; /

4.2 작업 삭제

BEGIN
  DBMS_SCHEDULER.DROP_JOB('MY_JOB');
END;
/

5. DBMS_SCHEDULER 사용 시 주의 사항

  1. 적절한 권한 부여
    • 작업 생성 시 CREATE JOB 권한 필요.
  2. 오버로드 방지
    • 지나치게 짧은 간격으로 작업을 실행하면 리소스가 부족해질 수 있습니다.
  3. 로깅 및 모니터링
    • 작업 상태를 확인하기 위해 DBA_SCHEDULER_JOB_LOG 뷰를 활용하세요.
SELECT job_name, status, log_date 
FROM dba_scheduler_job_log
WHERE job_name = 'MY_JOB';

결론

DBMS_SCHEDULER는 오라클 데이터베이스 관리의 생산성을 크게 향상시키는 도구입니다. 이 글에서 소개한 기본 개념과 실무 예제를 바탕으로, 보다 효율적이고 자동화된 데이터베이스 관리를 실현할 수 있을 것입니다.

여러분의 환경에 맞게 응용하고, 궁금한 점이 있다면 언제든지 댓글로 남겨주세요! 🎯

반응형