1. 스케쥴러 생성
BEGIN
/*
JOB_NAME : 스케쥴이름
JOB_TYPE : SP로 만들어서 JOB 등록하면 용이
JOB_ACTION : SP 이름
START_DATE : 스케쥴이 작동할 시작 시간(SYSTIMESTAMP 지정 시 지금 즉시 실행)
REPEAT_INTERVAL : 스케쥴이 작동하는 주기
*/
DBMS_SCHEDULER.CREATE_JOB
(
JOB_NAME => 'JB_SMS_PSNL_INFO_DELETE',
JOB_TYPE => 'STORED_PROCEDURE',
JOB_ACTION => 'HHE_HCN.SP_SMS_PSNL_INFO_DELETE',
START_DATE => SYSTIMESTAMP,
REPEAT_INTERVAL => 'FREQ=MONTHLY; BYMONTHDAY=1; BYHOUR=4; BYMINUTE=40; BYSECOND=0;'
);
END;
2. REPEAT_INTERVAL_SAMPLE
* 더 상세하게 시간을 지정하려면 BY 절을 사용한다.
- 8주차 금요일마다 수행하고 싶은 경우
> REPEAT_INTERVAL => 'FREQ=YEARLY; BYWEEKNO=8,16,24,32,40,48; BYDAY=FRI;'
- 매주 금요일밤 23시 50분에 수행하고 싶은 경우
> REPEAT_INTERVAL => 'FREQ=WEEKLY; BYDAY=FRI; BYHOUR=23; BYMINUTE=50;'
* BY절에 사용할 수 있는 세부사항
- BYMONTH : JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
- BYWEEKNO : 1-53
- BYYEARDAY : 1-366
- BYMONTHDAY : 1-31
- BYDATE : MMDD 형태로 월일을 직접 지정가능(1월 1일인 경우 : 0101로 지정)
- BYDAY : MON, TUE, WED, THU, FRI, SAT, SUN
- BYHOUR : 0-23
- BYMINUTE : 0-59
- BYSECOND : 0-59
3. JOB 관련 명령어
--JOB 생성 후 JOB을 실행시키는 명령어
BEGIN DBMS_SCHEDULER.ENABLE('JB_SYS_CONTROLLER_LOG_BAKUP'); END;
--JOB 실행 중지 시키는 명령어
BEGIN DBMS_SCHEDULER.DISABLE('JB_SYS_CONTROLLER_LOG_BAKUP'); END;
--JOB이 잘 만들어 졌는지 수기로 수행시켜보는 명령어
BEGIN DBMS_SCHEDULER.RUN_JOB('JB_SYS_CONTROLLER_LOG_BAKUP'); END;
--JOB을 드랍시키는 명령어
BEGIN DBMS_SCHEDULER.DROP_JOB('JB_SYS_CONTROLLER_LOG_BAKUP'); END;
--JOB 등록 내역 조회
SELECT * FROM USER_SCHEDULER_JOBS; --계정에 등록된 JOB만 조회하기
SELECT * FROM DBA_SCHEDULER_JOBS; --전체 JOB 조회하기
--JOB 수행이력 조회
SELECT * FROM USER_SCHEDULER_JOB_LOG ORDER BY LOG_ID;
SELECT * FROM DBA_SCHEDULER_JOB_LOG ORDER BY LOG_ID;
--JOB 상세 수행이력 조회
SELECT * FROM USER_SCHEDULER_JOB_RUN_DETAILS ORDER BY LOG_ID;
SELECT * FROM DBA_SCHEDULER_JOB_RUN_DETAILS ORDER BY LOGD_ID;
4. JOB에 등록하는 SP 기본 틀
CREATE OR REPLACE PROCEDURE HHE.SP_SYS_CONTROLLER_LOG_BAKUP
IS
BEGIN
--수행할 내역 작성
DELETE
HHE.SYS_CONTROLLER_LOG
WHERE
EXECUT_BEG_DT < TO_CHAR(SYSDATE-60,'YYYYMMDD');
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE || '-' || SQLERRM);
END SP_SYS_CONTROLLER_LOG_BAKUP;
GRANT EXECUTE ON HHE.SP_SYS_CONTROLLER_LOG_BAKUP TO HHE;
5. 참고사항
* job_queue_processes의 값이 0으로 설정되어 있는 경우, scheduler가 실행되지 않음
- 만약 scheduler job이 실행되지 않으면 해당 parameter 확인이 필요함
> 확인쿼리 : select * from v$parameter where name = 'job_queue_processes';
'회사 개발 정리' 카테고리의 다른 글
[오라클 Oracle] 테이블 스페이스 용량 확인 (0) | 2023.03.15 |
---|---|
[오라클 Oracle] 특정시간 대 CPU 과점유 확인을 위한 SQL 수행횟수 확인 (0) | 2023.03.10 |
[오라클 Oracle] 플래시백(FlashBack) (0) | 2023.03.10 |
[오라클 Oracle] Lock 발생 테이블 찾기 (0) | 2023.03.10 |