기타/기타

오라클 스케쥴러 잡 (DBMS_SCHEDULER) 확인 등록(생성) 조회 삭제

뚠윤 2023. 6. 29. 09:41
300x250

스케쥴러 생성 샘플 이미지

오라클 저장된 프로시저로 DBMS_SCHEDULER 생성 하여 실행하는 방법

-- 프로그램 등록
----------------
BEGIN
    DBMS_SCHEDULER.CREATE_PROGRAM(
        program_name => 'SET_PROC_PRG', -- 사용할 프로그램명을 입력한다.
        program_action => '저장되어있는 프로시저명', -- 생성되어있는 프로시저명을 입력한다.
        program_type => 'STORED_PROCEDURE', -- 타입은 저장된 프로시저로 입력
        comments => 'Update Status', -- 설명 입력
        enabled => TRUE);
END;
/

 

 

-- 스케쥴러 등록
------------------
BEGIN
    DBMS_SCHEDULER.CREATE_SCHEDULE(
        schedule_name => 'SCHEDULE_15_MIN',
        start_date       => to_date('20230630000000','yyyymmddhh24miss'),
        end_date        => null,
        repeat_interval => 'FREQ=MINUTELY;INTERVAL=15', -- 15분간격
        comments => 'Every 15 min'); -- 설명
END; 
/

/*
-- 반복 주기
repeat_interval => 'FREQ=HOURLY; INTERVAL=1' -- 1시간 간격으로 수행
repeat_interval => 'FREQ=MINUTELY; INTERVAL=30' -- 30분 간격으로 수행
repeat_interval => 'FREQ=SECONDLY; INTERVAL=5' -- 5초 간격으로 수행
repeat_interval => 'FREQ=WEEKLY; INTERVAL=2' -- 2주 간격으로 수행
repeat_interval => 'FREQ=MONTHLY;' -- 매달 수행
repeat_interval => 'FREQ=YEARLY;' -- 매년 수행
*/

 

 

-- JOB 등록
-------------------
BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
        job_name =>'SET_STATUS_JOB', -- 사용할 JOB 이름 입력
        program_name =>'SET_PROC_PRG', -- 위에서 등록한 프로그램명 입력
        schedule_name =>'SCHEDULE_15_MIN', -- 위에서 등록한 스케쥴러 이름 입력
        enabled =>TRUE);
END; 
/

-- 아래와 같이 1개의 스케쥴러에 여러개의 JOB을 등록 할 수 있다.
BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
        job_name =>'SET_STATUS_JOB2',
        program_name =>'SET_PROC_PRG2',
        schedule_name =>'SCHEDULE_15_MIN', -- 동일한 스케쥴에 잡 생성 가능.
        enabled =>TRUE);
END; 
/

 

320x100

 

 

오라클 스케쥴러 상태 확인 및 로그조회

--스케줄러 조회
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='SET_STATUS_JOB';

 

-- 옵션
--스케줄러 사용
EXEC SYS.DBMS_SCHEDULER.ENABLE
(NAME => 'SET_STATUS_JOB');

--오류 발생 시 재시작 여부 기본값: FALSE
EXEC SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( NAME      => 'SET_STATUS_JOB'
 ,ATTRIBUTE => 'RESTARTABLE'
 ,VALUE     => FALSE);
 
--우선순위 1~5 1이 가장 먼저, 기본: 3
EXEC SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( NAME      => 'SET_STATUS_JOB'
 ,ATTRIBUTE => 'JOB_PRIORITY'
 ,VALUE     => 3);
 
 --완료 및 미사용 시 자동 삭제여부
EXEC SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( NAME      => 'SET_STATUS_JOB'
 ,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      => 'SET_STATUS_JOB'
 ,ATTRIBUTE => 'LOGGING_LEVEL'
 ,VALUE     => SYS.DBMS_SCHEDULER.LOGGING_RUNS);

 

반응형

스케쥴러 실행/삭제

-- 실행/삭제
--실행
EXEC DBMS_SCHEDULER.RUN_JOB
('SET_STATUS_JOB');
	 
--삭제
BEGIN
	DBMS_SCHEDULER.DROP_JOB
	(
		JOB_NAME =>'SET_STATUS_JOB',
		FORCE => FALSE
	);
END;
728x90
반응형