오라클 DBMS_SCHEDULER 사용
💡 DBMS_SCHEDULER
윈도우의 작업스케줄러, 리눅스의 CROND 와 같이 오라클에도 스케줄러가 있다
📝 스케줄러 조회
--스케줄러 조회
SELECT
JOB_NAME, REPEAT_INTERVAL
, TO_CHAR(LAST_START_DATE, 'YYYY-MM-DD HH24:MI:SS')
, TO_CHAR(NEXT_RUN_DATE, 'YYYY-MM-DD HH24:MI:SS')
FROM USER_SCHEDULER_JOBS
--WHERE LOGGING_LEVEL = 'RUNS'
ORDER BY REPEAT_INTERVAL
--스케줄러 로그 조회
SELECT *
FROM USER_SCHEDULER_JOB_LOG
WHERE JOB_NAME='JOB_SP_CUST_INAC_SMS'
📝 스케줄러 생성
BEGIN
DBMS_SCHEDULER.CREATE_JOB
(
JOB_NAME => 'JOB_SP_CUST_INAC_SMS',
JOB_TYPE => 'PLSQL_BLOCK',
JOB_CLASS => 'DEFAULT_JOB_CLASS',
START_DATE => TO_TIMESTAMP_TZ('2022/03/22 12:00:00.000000 +09:00'
,'YYYY/MM/DD HH24:MI:SS.FF TZR'),
JOB_ACTION =>
'
/* ---------------------------------------------
* [고객휴면문자] SP_CUST_INAC_SMS
* 실행 SP : SP_CUST_INAC_SMS
* 주기 : 매일 03시 00분 생성
*
*/
DECLARE
OUT_CODE VARCHAR2(256) ; -- 처리결과코드 (0:Success, -1:Fail)
OUT_MSG VARCHAR2(4096); -- 처리메세지
BEGIN
-- 회사코드를 가져온다...
DECLARE CURSOR COMP_DATA IS
SELECT COMP_CD, COMP_KOR_NM
FROM CFCOMP
WHERE COMP_CLOSE_DT IS NULL
AND COMP_CD = ''NG001''
ORDER BY BUSI_DT;
BEGIN
FOR CUR_COMP_DATA IN COMP_DATA LOOP
BEGIN
SP_CUST_INAC_SMS
(CUR_COMP_DATA.COMP_CD, ''SYSTEM'', ''SYSTEM'', OUT_CODE, OUT_MSG);
END;
END LOOP;
END;
END;
',
REPEAT_INTERVAL => 'FREQ=DAILY;BYHOUR=03;BYMINUTE=00;BYSECOND=00',
COMMENTS => '휴면예정 고객안내 문자'
);
END;
📝 옵션
--스케줄러 사용
EXEC SYS.DBMS_SCHEDULER.ENABLE
(NAME => 'JOB_SP_CUST_INAC_SMS');
--오류 발생 시 재시작 여부 기본값: FALSE
EXEC SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( NAME => 'JOB_SP_CUST_INAC_SMS'
,ATTRIBUTE => 'RESTARTABLE'
,VALUE => FALSE);
--우선순위 1~5 1이 가장 먼저, 기본: 3
EXEC SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( NAME => 'JOB_SP_CUST_INAC_SMS'
,ATTRIBUTE => 'JOB_PRIORITY'
,VALUE => 3);
--완료 및 미사용 시 자동 삭제여부
EXEC SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( NAME => 'JOB_SP_CUST_INAC_SMS'
,ATTRIBUTE => 'AUTO_DROP'
,VALUE => FALSE);
💡 로그사용
DBMS_SCHEDULER.LOGGING_OFF : 로그 x
DBMS_SCHEDULER.LOGGING_FAILED_RUNS : 실패 건만 로그 기록
DBMS_SCHEDULER.LOGGING_RUNS : 모든 실행에 대한 로그 기록(기본)
DBMS_SCHEDULER.LOGGING_FULL : 모든 실행 및 작업에서 실행되는 모든 작업도 기록
(생성, 활성화, 변경, 중지 등)
EXEC SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( NAME => 'JOB_SP_CUST_INAC_SMS'
,ATTRIBUTE => 'LOGGING_LEVEL'
,VALUE => SYS.DBMS_SCHEDULER.LOGGING_RUNS);
📝 실행 및 삭제
--실행
EXEC DBMS_SCHEDULER.RUN_JOB
('JOB_SP_CUST_INAC_SMS');
--삭제
BEGIN
DBMS_SCHEDULER.DROP_JOB
(
JOB_NAME =>'JOB_SP_CUST_INAC_SMS123',
FORCE => FALSE
);
END;
✍ 소스 종합
--스케줄러 확인
SELECT
JOB_NAME, REPEAT_INTERVAL
, TO_CHAR(LAST_START_DATE, 'YYYY-MM-DD HH24:MI:SS')
, TO_CHAR(NEXT_RUN_DATE, 'YYYY-MM-DD HH24:MI:SS')
FROM USER_SCHEDULER_JOBS
--WHERE LOGGING_LEVEL = 'RUNS'
ORDER BY REPEAT_INTERVAL
--스케줄러 로그 확인
SELECT *
FROM USER_SCHEDULER_JOB_LOG
WHERE JOB_NAME='JOB_SP_CUST_INAC_SMS'
--스케줄러 생성
BEGIN
DBMS_SCHEDULER.CREATE_JOB
(
JOB_NAME => 'JOB_SP_CUST_INAC_SMS',
JOB_TYPE => 'PLSQL_BLOCK',
JOB_CLASS => 'DEFAULT_JOB_CLASS',
START_DATE => TO_TIMESTAMP_TZ('2021/03/24 12:00:00.000000 +09:00'
,'YYYY/MM/DD HH24:MI:SS.FF TZR'),
JOB_ACTION =>
'
/* ---------------------------------------------
* [고객휴면문자] SP_CUST_INAC_SMS
* 실행 SP : SP_CUST_INAC_SMS
* 주기 : 매일 03시 00분 생성
*
*/
DECLARE
OUT_CODE VARCHAR2(256) ; -- 처리결과코드 (0:Success, -1:Fail)
OUT_MSG VARCHAR2(4096); -- 처리메세지
BEGIN
-- 회사코드를 가져온다...
DECLARE CURSOR COMP_DATA IS
SELECT COMP_CD, COMP_KOR_NM
FROM CFCOMP
WHERE COMP_CLOSE_DT IS NULL
AND COMP_CD = ''NG001''
ORDER BY BUSI_DT;
BEGIN
FOR CUR_COMP_DATA IN COMP_DATA LOOP
BEGIN
SP_CUST_INAC_SMS
(CUR_COMP_DATA.COMP_CD, ''SYSTEM'', ''SYSTEM'', OUT_CODE, OUT_MSG);
END;
END LOOP;
END;
END;
',
REPEAT_INTERVAL => 'FREQ=DAILY;BYHOUR=03;BYMINUTE=00;BYSECOND=00',
COMMENTS => '휴면예정 고객안내 문자'
);
END;
--스케줄러 사용
EXEC SYS.DBMS_SCHEDULER.ENABLE
(NAME => 'JOB_SP_CUST_INAC_SMS');
--오류 발생 시 재시작 여부 기본값: false
EXEC SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( NAME => 'JOB_SP_CUST_INAC_SMS'
,ATTRIBUTE => 'RESTARTABLE'
,VALUE => FALSE);
--우선순위 1~5 1이 가장 먼저, 기본: 3
EXEC SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( NAME => 'JOB_SP_CUST_INAC_SMS'
,ATTRIBUTE => 'JOB_PRIORITY'
,VALUE => 3);
/*로그사용
DBMS_SCHEDULER.LOGGING_OFF : 로그 x
DBMS_SCHEDULER.LOGGING_FAILED_RUNS : 실패 건만 로그 기록
DBMS_SCHEDULER.LOGGING_RUNS : 모든 실행에 대한 로그 기록(기본)
DBMS_SCHEDULER.LOGGING_FULL : 모든 실행 및 작업에서 실행되는 모든 작업도 기록(생성, 활성화, 변경, 중지 등)
*/
EXEC SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( NAME => 'JOB_SP_CUST_INAC_SMS'
,ATTRIBUTE => 'LOGGING_LEVEL'
,VALUE => SYS.DBMS_SCHEDULER.LOGGING_RUNS);
--완료 및 미사용 시 자동 삭제여부
EXEC SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( NAME => 'JOB_SP_CUST_INAC_SMS'
,ATTRIBUTE => 'AUTO_DROP'
,VALUE => FALSE);
--실행
EXEC DBMS_SCHEDULER.RUN_JOB
('JOB_SP_CUST_INAC_SMS');
--삭제
BEGIN
DBMS_SCHEDULER.DROP_JOB
(
JOB_NAME =>'JOB_SP_CUST_INAC_SMS123',
FORCE => FALSE
);
END;
Author And Source
이 문제에 관하여(오라클 DBMS_SCHEDULER 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@conda/oracleDbmsScheduler저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)