본문 바로가기

업무/DB

[ORACLE] DBMS_JOB

ORACLE에서 DB JOB 으로 관리되던 프로시져의 실행시간이 이상해져서

JOB 조회/등록/변경/삭제 등의 방법을 알아봄

 

-- JOB 조회
SELECT * FROM USER_JOBS;

-- JOB 등록
EXECUTE DBMS_JOB.SUBMIT(JOB_NO, JOB_내용, JOB_실행시간, JOB_실행간격, FALSE);

DBMS_JOB.SUBMIT( 
   job       OUT    BINARY_INTEGER,
   what      IN     VARCHAR2, NEXT_DATE IN DATE DEFAULTSYSDATE, 
   interval  IN     VARCHAR2 DEFAULT 'NULL',
   no_parse  IN     BOOLEAN DEFAULT FALSE,
   instance  IN     BINARY_INTEGER DEFAULT ANY_INSTANCE,
   force     IN     BOOLEAN DEFAULT FALSE
);

-- JOB 정지
EXECUTE DBMS_JOB.BROKEN(JOB_NO, TRUE);
-- JOB 살리기
EXECUTE DBMS_JOB.BROKEN(JOB_NO, FALSE);

-- JOB 삭제
EXECUTE DBMS_JOB.REMOVE(JOB_NO);

-- JOB 변경
EXECUTE DBMS_JOB.NEXT_DATE(4, TRUNC(SYSDATE)+1+1/24/60); 

-- JOB 실행
EXECUTE DBMS_JOB.RUN(JOB_NO);



-- EX 
EXECUTE DBMS_JOB.SUBMIT( JOB_NO, 'USER_NAME.PROCEDURE_NAME;', TRUNC(SYSDATE)+23/24, 'TRUNC(SYSDATE)+1+23/24', FALSE);

-- 매시간 정각+3분
SELECT TO_CHAR( TRUNC(SYSDATE, 'HH24') +1/24 +3/24/60 , 'YYYYMMDDHH24MISS')    FROM DUAL;

-- 1분단위
SELECT TO_CHAR( TRUNC(SYSDATE, 'MI')+1/24/60 , 'YYYYMMDDHH24MISS')    FROM DUAL;

 

 

최종적으로 INTERVAL 시간을 변경하여 매일 새벽 두시에 실행시키고자 함

INTERVAL 값을 적을 때 ' (Single quotation marks) 를 쓰지 않는 에러남

 

DECLARE

BEGIN
	DBMS_JOB.INTERVAL(45, 'TRUNC(SYSDATE)+1+2/24'); -- 매일 새벽 2시 실행
	COMMIT;
END;