반응형
DBMS_SCHEDULER는 오라클 데이터베이스에서 작업 스케줄링을 수행하는 강력한 도구입니다. 이 패키지는 데이터베이스 내에서 주기적인 작업을 자동화하거나, 특정 조건에 따라 프로세스를 실행하도록 설정할 수 있어 DB 관리자의 업무를 크게 단순화합니다. 이번 글에서는 DBMS_SCHEDULER의 기본 개념, 주요 기능, 사용 방법과 함께 실무에서 유용한 예제 3가지를 소개합니다.
1. DBMS_SCHEDULER란 무엇인가?
DBMS_SCHEDULER는 오라클 데이터베이스에 내장된 스케줄링 패키지로, 다음과 같은 작업을 자동화할 수 있습니다.
- PL/SQL 블록 실행
- 외부 운영 체제 명령 실행
- 특정 시간 및 주기별 데이터 정리
- 이벤트 기반 작업 처리
이전 버전의 DBMS_JOB를 대체하며, 보다 세분화된 제어와 향상된 기능을 제공합니다.
주요 특징
- 고급 일정 설정: 단순 주기성뿐만 아니라 복잡한 캘린더 조건도 지원.
- 리소스 관리 통합: 리소스 소비를 최소화하도록 작업 우선순위 관리 가능.
- 확장성: 다중 데이터베이스 환경에서의 작업 관리.
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 사용 시 주의 사항
- 적절한 권한 부여
- 작업 생성 시 CREATE JOB 권한 필요.
- 오버로드 방지
- 지나치게 짧은 간격으로 작업을 실행하면 리소스가 부족해질 수 있습니다.
- 로깅 및 모니터링
- 작업 상태를 확인하기 위해 DBA_SCHEDULER_JOB_LOG 뷰를 활용하세요.
SELECT job_name, status, log_date
FROM dba_scheduler_job_log
WHERE job_name = 'MY_JOB';
결론
DBMS_SCHEDULER는 오라클 데이터베이스 관리의 생산성을 크게 향상시키는 도구입니다. 이 글에서 소개한 기본 개념과 실무 예제를 바탕으로, 보다 효율적이고 자동화된 데이터베이스 관리를 실현할 수 있을 것입니다.
여러분의 환경에 맞게 응용하고, 궁금한 점이 있다면 언제든지 댓글로 남겨주세요! 🎯
반응형
'Database' 카테고리의 다른 글
오라클 DBMS_METADATA로 메타데이터 추출하기 (0) | 2024.12.04 |
---|---|
오라클 DBMS_STATS로 통계 정보 업데이트하기 (0) | 2024.12.04 |
오라클 SQL Loader의 컨트롤 파일 작성법 (0) | 2024.12.04 |
오라클 SQL Developer를 활용한 데이터베이스 관리 (0) | 2024.12.04 |
오라클 클러스터 환경에서의 테이블 잠금 관리 (0) | 2024.12.04 |