본문 바로가기

ORACLE/Admin

ORACLE JOB 등록 및 관리(DBMS_JOB)

728x90
반응형

ORACLE JOB 등록 및 관리(DBMS_JOB)

Oracle 에서 제공하는 DBMS_JOB 패키지를 이용하여 스케줄링 관리를 할 수 있다. 


Job 등록(submit) 예시

procedure_name 이라는 프로시저를 매일 새벽 6시에 수행

DECLARE 
	X NUMBER; 
BEGIN 
SYS.DBMS_JOB.SUBMIT ( 
	JOB => X , 
 	WHAT => 'PROCEDURE_NAME;', 
  	NEXT_DATE => SYSDATE,
 	INTERVAL => 'TRUNC(SYSDATE + 1) + 1/24*6', 
  	NO_PARSE => FALSE
); 
END;

Job 등록(submit) 파라미터

  • JOB : JOB Number. 자동으로 할당되므로 건드릴 필요 없음.
  • WHAT : 수행할 프로시저 명 기입. ';' 빠지지 않도록 주의.
  • NEXT_DATE : 프로시저가 다음에 수행 될 시간. 최초 한 번 수행 이후에는 INTERVAL 로 계산되어 들어간다.
  • INTERVAL : 수행 간격. 프로시저 수행 시 계산되어 NEXT_DATE 에 저장된다.
  • NO_PARSE : (default = FALSE) Job Submit 시 관련 프로시저를 파싱할지 여부. FALSE로 설정 시 Job Submit 시 관련 프로시저를 파싱한다. TRUE로 설정 시 Job Submit 시 관련 프로시저가 파싱되지 않고, 최초 수행 시에 파싱된다. Job 과 관련된 프로시저나 테이블이 준비되지 않은 상태에서 job을 먼저 등록하려는 경우 TRUE로 설정.

INTERVAL 예시

  • 1시간 간격 수행 : SYSDATE + 1 / 24
  • 5분 간격 수행 : SYSDATE + 1 / 24 / 60 * 5
  • 매일 새벽 2시에 수행 : TRUNC(SYSDATE + 1) + 2 / 24
    (TRUNC 함수는 시간 단위를 절삭한다. TRUNC(2023-10-13 10:53) = 2023-10-13 00:00)

Job 등록 확인

select * from dba_jobs; -- 모든 유저의 Job 확인. DBA 권한 필요.
select * from user_jobs; -- 현재 접속 USER의 Job 확인

JOB 관리

  • BROKEN : JOB 활성화 / 비활성화
BEGIN
    DBMS_JOB.BROKEN(job번호, [FALSE/TRUE]); -- FALSE : 비활성화, TRUE : 활성화
    COMMIT;
END;
/
  • RUN : JOB 수동 수행
BEGIN
    DBMS_JOB.RUN(job번호);
    COMMIT;
END;
/
  • REMOVE : JOB 삭제
BEGIN
    DBMS_JOB.REMOVE(job번호);
    COMMIT;
END;
/

Job 관리 포인트

Job Failure

Job이 정상적으로 수행이 되지 않을 경우 재시도를 하게 되며 실패 횟수(Failure)가 카운트 된다. Failure가 16회가 되면 Job이 Broken 되어 더이상 수행되지 않는다.

Job이 다시 수행되도록 하기 위해서는 Failure 횟수를 초기화하고 Broken된 job을 활성화하여야한다. RUN 으로 Job을 수동 수행하여 정상 수행 시 Failure가 0으로 초기화되고, job이 활성된다.

728x90
반응형