메모장

[ DB ] 이벤트 스케쥴러 본문

DB/개념정리

[ DB ] 이벤트 스케쥴러

Itchild 2024. 4. 10. 22:45
728x90
반응형

이벤트 스케줄러 (Event Scheduler): 이벤트 스케줄러는 정기적으로 반복되거나 한 번 실행되어야 하는 작업을 스케줄링하는 기능을 제공하는 데이터베이스 내의 서비스입니다. 주로 주기적인 작업, 배치 처리, 보고서 생성 등에 활용됩니다. 정해진 시간대 또는 주기에 따라 작업을 실행합니다. 사용자가 직접 작업을 예약하고 실행하는 것이 아니라 데이터베이스 스케줄링 시스템이 작업을 수행합니다. 즉, 트리거는 데이터 변경과 연관된 이벤트에 대응하여 특정 작업을 실행하며, 이벤트 스케줄러는 정기적으로 반복되거나 한 번 실행되어야 하는 작업을 미리 예약하고 실행합니다. 선택할 때는 데이터의 흐름과 처리 요구 사항에 따라 적절한 방법을 선택하는 것이 중요합니다.

 

 

오라클 잡(JOB) 과 스케줄러(Scheduler)

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

 

 

sqlplus sys/oracle as sysdba - 관리자 모드 접속

GRANT MANAGE SCHEDULER TO STARLIGHT_FINAL;  // 권한 주기

GRANT CREATE ANY JOB TO STARLIGHT_FINAL; // 권한 주기

sqlplus STARLIGHT_FINAL	- 내 DB로 접속
 

 

  1. 잡 객체를 먼저 만들어 줘야 한다.
BEGIN
  DBMS_SCHEDULER.create_job (
    job_name        => 'UPDATE_SUBSCRIPTION_EVENT',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN
                          UPDATE member
                          SET subscription = 0
                          WHERE mID IN (
                            SELECT mID
                            FROM subsinfo
                            WHERE sInfoPeriod < SYSTIMESTAMP
                          );
                        END;',
    start_date      => TO_TIMESTAMP('2023-07-18 00:00:00.000', 'YYYY-MM-DD HH24:MI:SS.FF3'),
    repeat_interval => 'FREQ=DAILY; INTERVAL=1',
    enabled         => TRUE
  );
END;


// 1일 주기 

---------------------------------------------------------------------------------

YEARLY 또는 ANNUALLY: 매년 한 번
MONTHLY: 매달 한 번
WEEKLY: 매주 한 번
DAILY: 매일 한 번
HOURLY: 매시간 한 번
MINUTELY: 매분 한 번
SECONDLY: 매초 한 번

---------------------------------------------------------------------------------
 

 

 

 

 

 

2. 잡 실행

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

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

 

 

3. 잡 객체 실행 로그 확인

SELECT * FROM USER_SCHEDULER_JOB_LOG; 
 

 

4. 잡 정지 및 삭제

 

- JOB 정지

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

commit;

 

- JOB 삭제

EXECUTE dbms_job.REMOVE(JOB번호);

 

 

 

4-1. 이벤트 스케줄러 삭제

BEGIN
  DBMS_SCHEDULER.drop_job('UPDATE_SUBSCRIPTION_EVENT');
END;
/
이벤트 스케줄러 삭제 
 

 

 

728x90
반응형

'DB > 개념정리' 카테고리의 다른 글

COALESCE 함수  (0) 2024.04.10
[ DB ] 오라클 프로시저 (PROCEDURE)  (0) 2024.04.10
[DB] 트리거  (0) 2024.04.10
유니크 키 (Unique Key)  (0) 2024.04.10
Oracle DBMS ' NVL '  (0) 2024.04.10