회사 내 업무를 줄이기 위해 자동화 작업을 다수 진행하고 있습니다. 이 중에서 동기화 및 일간 백업 등 스케줄러가 필요한 작업이 있습니다. 예를 들어 매일 반복되는 백업, 로그 정리, 동기화 작업등 이런 작업을 수동으로 한다면 많은 시간이 소요됩니다. 과거에는 가로등을 일일이 켜야 했지만, 전기 시스템의 발전으로 자동화되었습니다. 이를 DB 작업도 오라클 스케줄러를 통해 자동화할 수 있습니다.
스케줄러(scheluler)는 무엇인가?

스케줄러(Scheduler)는 사전적인 의미로 일정 관리 및 작업을 계획하는데 조정되고 사용되는 시스템이나 도구를 뜻합니다. 스케줄러는 주로 특정 시간이나 조건에 따라 작업을 자동으로 실행하도록 설정할 수 있으며, 이러한 작업 관리의 자동화를 통하여 작업의 효율성을 향상합니다.
오라클 스케줄러 (DBMS_SCHEDULER)
DBMS_SCHEDULER 패키지는 오라클 내 작업을 자동화하고 관리하는 기능을 제공하는 패키지입니다. 이를 통해 다양한 작업을 일정에 따라 실행할 수 있으며, 데이터베이스 관리 및 운영의 효율성을 높일 수 있습니다. 주요 객체는 다음과 같습니다.
- 작업(Job) : 수행할 작업의 단위로 PL/SQL, 외부 프로그램 등을 정의할 수 있습니다.
- 프로그램(Program) : 작업의 로직으로, 프로그램의 실행 동작 매개변수 등을 포함합니다.
- 스케줄(Schedule) : 작업이 언제 실행될지 정의합니다. 특정 시간, 날짜, 주기 등을 지정할 수 있습니다.
추가로 DBMS_JOB이라는 패키지도 있습니다. 상황에 맞춰 사용하시면 됩니다.
패키지 사용 절차
예시로 간단하게 사용 절차를 알아보겠습니다. 간단하게 TB_TEMP2에 있는 데이터들을 하루에 한 번씩 이관하는 스케줄러를 만들어보겠습니다.
0. 관련 프로시저 생성
CREATE OR REPLACE PROCEDURE TEMP_DATA_MOVE AS
BEGIN
-- TB_TEMP1 데이터를 TB_TEMP2로 이동
INSERT INTO TB_TEMP2
SELECT * FROM TB_TEMP1;
-- TB_TEMP1 데이터 삭제
DELETE FROM TB_TEMP1;
COMMIT;
END;
1. 작업(Job) 생성
BEGIN
DBMS_SCHEDULER.create_job (
job_name => 'TEMP_DATA_SCHE', -- 작업 이름
job_type => 'STORED_PROCEDURE', -- 프로시저 실행
job_action => 'TEMP_DATA_MOVE', -- 실행할 프로시저
start_date => SYSTIMESTAMP, -- 생성 후 즉시 시작
repeat_interval => 'FREQ=DAILY; BYHOUR=0; BYMINUTE=0; BYSECOND=0', -- 매일 00:00 실행
enabled => TRUE
);
END;
여기서 각옵션을 설명하자면 다음과 같습니다.
1. job_name
- 스케줄러 작업(Job)의 이름이며 고유해야 하며, DBA_SCHEDULER_JOBS 뷰에서 상태 확인 가능
2. job_type
- 실행할 작업 유형
- 대표적인 값은 다음과 같습니다.
- PLSQL_BLOCK → PL/SQL 블록 실행
- STORED_PROCEDURE → 저장 프로시저 실행
- EXECUTABLE → 외부 OS 명령 실행 가능
3. job_action
- 실행할 실제 로직
- job_type이 STORED_PROCEDURE일 때는 프로시저 이름 기재
- job_type이 PLSQL_BLOCK일 경우 블록(BEGIN END) 기재
4. start_date
- 작업을 처음 실행할 시간
- SYSTIMESTAMP → 현재 시 기준 즉시 실행
5. repeat_interval
- 반복 실행 주기 설정
-- 매일 00:00
FREQ=DAILY; BYHOUR=0; BYMINUTE=0; BYSECOND=0
-- 매주 월요일 오전 9시
FREQ=WEEKLY; BYDAY=MON; BYHOUR=9
6. enabled
- TRUE → Job 생성 후 바로 활성화
- FALSE → 생성만 하며 수동 활성화 필요
2. 스케줄 확인
SELECT job_name, state
FROM dba_scheduler_jobs
WHERE job_name = 'TEMP_DATA_MOVE';
3. 작업 실행 및 정지
-- 작업실행
EXEC DBMS_SCHEDULER.run_job('TEMP_DATA_SCHE');
-- 작업종료
EXEC DBMS_SCHEDULER.disable('TEMP_DATA_SCHE');
4. 모니터링 방법
SELECT log_id
, status
, actual_start_date
, run_duration
FROM dba_scheduler_job_run_details
WHERE job_name = 'TEMP_DATA_SCHE';
마지막으로
오라클 스케줄러는 DB 관리자가 반복적인 작업을 자동화하고, 시스템 자원을 효율적으로 사용하는 툴입니다. 이를 통해 관리의 복잡성을 줄이고 운영 효율성을 높일 수 있습니다.
'컴퓨터 > Oracle' 카테고리의 다른 글
| Oracle (10) - WITH 절 사용방법 (0) | 2025.09.13 |
|---|---|
| Oracle (8) - 커서(Cursor) (0) | 2025.01.09 |
| Oracle (7) - 인덱스를 타는지 확인하는 방법 (EXPLAIN PLAN) (1) | 2024.12.28 |
| Oracle (6) - ORA-01427 : 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다 (1) | 2024.03.07 |
| Oracle (5) - SELECT문에서 IF ELSE를 사용하기 DECODE (2) | 2023.12.23 |