Oracle에서 job이 실패하더라도 매일 특정 시간(예: 오전 6시)에 실행되도록 설정하려면 DBMS_SCHEDULER 패키지를 사용하여 job을 작성할 수 있습니다. job의 실행 간격을 조정하려면 repeat_interval에 적절한 cron 표현식을 설정하면 됩니다.
아래는 job을 설정하는 예제입니다.
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'my_daily_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN my_procedure; END;',
start_date => TO_TIMESTAMP_TZ('2025-01-03 06:00:00', 'YYYY-MM-DD HH24:MI:SS TZR'),
repeat_interval => 'FREQ=DAILY; BYHOUR=6; BYMINUTE=0; BYSECOND=0',
enabled => TRUE,
auto_drop => FALSE,
comments => 'Daily job that runs every day at 6:00 AM');
END;
/
2. 주요 설정 설명
- job_name: 작업의 이름을 지정합니다.
- job_action: 실행할 PLSQL 블록 또는 저장 프로시저를 정의합니다.
- start_date: 첫 실행 시작 시간. 위 예제는 2025년 1월 3일 오전 6시로 설정됩니다.
- repeat_interval: 크론 표현식 스타일의 반복 주기입니다.
- FREQ=DAILY는 매일 실행을 의미합니다.
- BYHOUR=6는 오전 6시에 실행을 지정합니다.
- enabled: 작업을 즉시 활성화합니다.
3. Job 수정
기존 job의 repeat_interval을 수정하려면 아래와 같이 설정할 수 있습니다.
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE (
name => 'my_daily_job',
attribute => 'repeat_interval',
value => 'FREQ=DAILY; BYHOUR=6; BYMINUTE=0; BYSECOND=0');
END;
/
4. 실패 후 재실행 정책 설정
Job이 실패했을 때 자동으로 다음 실행 시도까지 대기하도록 설정하려면
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE 또는 에러 핸들링 절차를 추가할 수 있습니다. 하지만 위 repeat_interval로 설정하면 실패 여부와 관계없이 매일 오전 6시에 실행됩니다.