본문 바로가기

ORACLE/Admin

Oracle Job interval에 case문을 사용하여 여러 시간대 설정

728x90
반응형

DBMS_JOB의 NEXT_DATE와 INTERVAL 값을 적절히 설정하면 하루에 특정 여러 시간에 작업을 수행하도록 설정할 수 있다.

 

 

예시
DBMS_JOB을 이용한 하루 두 번 실행 예제 (예: 오전 2시, 오전 4시)

DECLARE
    job_no NUMBER;
BEGIN
    -- DBMS_JOB 작업 생성
    DBMS_JOB.SUBMIT(
        job        => job_no,
        what       => 'BEGIN your_procedure; END;', -- 실행할 작업
        next_date  => TRUNC(SYSDATE + 1) + 2/24,       -- 내일 오전 2시부터 시작
        interval   => 'CASE WHEN TO_CHAR(SYSDATE, ''HH24'') = ''01'' THEN SYSDATE + 2/24 ELSE SYSDATE + 22/24 END'
    );
    COMMIT;
END;
/

 


작동 원리

NEXT_DATE: 첫 실행 시간 지정
• 위 예제에서는 TRUNC(SYSDATE + 1) + 2/24로 내일 오전 2시를 의미합니다.


INTERVAL:
• 작업이 언제 다시 실행될지 결정
• 위 예제에서는 현재 시간이 오전 2시(HH24 = 02)이면 2시간 뒤인 오전 4시에 실행하고, 그렇지 않으면 22시간 후인 다음 날 오전 2시에 실행되도록 설정한다.

 

INTERVAL 식 설명

'CASE WHEN TO_CHAR(SYSDATE, ''HH24'') = ''02'' THEN SYSDATE + 2/24 ELSE SYSDATE + 22/24 END'

• 오전 2시에 실행되었을 경우: SYSDATE + 2/24 → 2시간 후인 오전 4시.
• 오전 4시에 실행되었을 경우: SYSDATE + 22/24 → 22시간 후인 다음 날 오전 2시.

(쌍따옴표가 아니라 따옴표 두 개임)

 

 

결과

dba_jobs를 조회해보면 아래와 같이 정상적으로 수행되는 것을 확인할 수 있다.
아래 조회 화면은 job이 1회 이상 수행된 이후 조회한 화면으로, job이 아직 수행되기 전이라면 LAST_DATE와 LAST_SEC이 공백 상태로 조회된다.

job summit은 완료되었는데 interval 등의 설정에 이슈가 있는 경우 job이 수행되지 않고 FAILURES 가 증가한다.

728x90
반응형