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
반응형
'ORACLE > Admin' 카테고리의 다른 글
Oracle deadlock (0) | 2024.12.27 |
---|---|
ORACLE DBMS_JOB 동시 수행 테스트 (0) | 2024.12.12 |
[Oracle] INTERSECT 명령어 (0) | 2024.04.25 |
[ORACLE] OR-expansion과 USE_CONCAT, NO_EXPAND 힌트 (0) | 2023.11.30 |
[ORALCE] 특정 사용자만 파라미터 적용하기(LOGON TRIGGER) (0) | 2023.11.20 |