안녕하세요. IT Window 킷도우입니다.
어느새 이번 주가 크리스마스라는 사실이 정말 놀랍네요. 시간 참 빠른 것 같습니다.
하루 하루 소중하게 보내는게 참 중요한 것 같습니다.
오늘 여러분들에게 공유드릴 주제는 바로 오라클 Job 등록하는 방법입니다. IT 시스템을 유지보수 해보신 분이라면 한 번쯤은 써 보셧을 텐데요. 그럼 바로 오라클 Job 등록 방법 공유 드리겠습니다.
오라클 job을 등록하기 위해 간단하게 실습 환경을 구성해 볼건데요.
아래와 같이 간단하게 테이블 하나를 만들어 줍니다.

그리고 오라클 Job을 통해 주기적으로 특정 프로시저를 수행하도록 만들어 줄 것이기 때문에 프로시저 하나를 만들어 주겠습니다. 이 프로시저는 위에서 만든 IMSI 테이블에 SYSDATE를 INSERT하는 쿼리를 수행합니다.
--오라클 JOB 등록을 위한 프로시저 생성
CREATE OR REPLACE PROCEDURE PR_UPDATE_DATE
IS
BEGIN
INSERT INTO IMSI
VALUES(SYSDATE);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('예상치 못한 에러가 발생했습니다.');
ROLLBACK;
RETURN;
END PR_UPDATE_DATE;
네 그러면 이제 본론으로 들어가서 오라클 잡을 한 번 만들어 보겠습니다.
1. 오라클 Job 생성
위에서 만든 PR_UPDATE_DATE 프로시저를 JOB 생성 후 1분 후 최초 수행하고 그 뒤로는 10초 간격으로 계속 프로시저가 실행되는 JOB을 만들어 보겠습니다.
DECLARE
jobno NUMBER;
BEGIN
DBMS_JOB.SUBMIT
( JOB => jobno -- jon sequence, 임의의 숫자가 생성할 때마다 순차적으로 배정됨
, WHAT => 'MAN.PR_UPDATE_DATE;' -- 실행할 프로시저 지정 ';' 특수문자 주의!!
, NEXT_DATE => SYSDATE + 1/24/60 -- 1분후
, INTERVAL => 'SYSDATE + 1/24/60/6' -- 10초 간격
, NO_PARSE => TRUE -- 프로시저를 job이 처음 실행될 때 파싱
);
END;
※ 시간 설정 방법
SYSDATE+7 : 7일에 한번 씩 job 수행
SYSDATE+1/24 : 1시간에 한번 씩 job 수행
TRUNC(SYSDATE, 'MI')+8/24 : 최초 job 수행시간이 12:29분 일 경우 매시 12:29분에 job 수행
TRUNC(SYSDATE+1) : 매일 밤 12시에 job 수행
TRUNC(SYSDATE+1)+3/24 : 매일 오전 3시 job 수행
NEXT_DAY(TRUNC(SYSDATE),'SUNDAY')+22/24 : 매주 일요일 오후 10시 정각에 job 수행
TRUNC(LAST_DAY(SYSDATE))+1 : 매월 1일 밤 12시에 job 수행
TRUNC(LAST_DAY(SYSDATE))+1+ 9/24 +30/1440 : 매월 1일 오전 9시 30분
2. 등록한 오라클 Job 확인
SELECT *
FROM USER_JOBS;

LAST_DATE : 마지막 Job이 실행된 일자, 시간(최초 Job 생성시엔 NULL)
LAST_DATE : 마지막 Job 실행 예정 시간(최초 Job 생성시엔 NULL)
NEXT_DATE : 다음 Job 실행 예정 일자, 시간
NEXT_SEC : 다음 Job 실행 예정 시간
TOTAL_TIME : Job 수행 시 소요 시간
BROKEN : 활성화(N), 비활성화(Y) 여부(컬럼명이 BROKEN이라 그런지 Y/N이 반대로 설정된 듯 합니다)
INTERVAL : Job 실행 간격
FAILURES : JOB 수행 실패 횟수
WHAT : 수행할 OBJECT(PR_UPDATE_DATE)

오라클 Job 생성 후 약 1분 뒤 컬럼 변화
→ LAST_DATE : 2022-12-20 22:19:35
→ NEXT_DATE : 2022-12-20 22:19:45

그리고 또 약 40초 뒤 컬럼 변화
→ LAST_DATE : 2022-12-20 22:20:05
→ NEXT_DATE : 2022-12-20 22:20:15
3. 결과 확인(테이블이 잘 변경 됐는지)

최초 1분 뒤 Job이 수행된 이후 10초 간격으로 꾸준히 job이 수행되어 REG_DT에 SYSDATE가 INSERT된 것을 확인할 수 있습니다.
4. 번외 추가 문법
Job 내용 변경하는 법
BEGIN
DBMS_JOB.CHANGE(10, --JOB번호
what => 'HRCS.PR_UPDATE_DATE',
next_date => TO_DATE('2023/03/03 01:30:00','YYYY/MM/DD HH24:MI:SS'),
interval => 'TRUNC(SYSDATE+1)+7/24');
END;
Job 활성화, 비활성화
BEGIN
DBMS_JOB.BROKEN(10, false); -- 비활성화
DBMS_JOB.BROKEN(10, true); -- 활성화
COMMIT;
END;
오라클 Job 강제 수행
BEGIN
DBMS_JOB.RUN(10); --job번호
COMMIT;
END;
오라클 Job 제거
(delete from USER_JOBS 안됩니다!!)
BEGIN
DBMS_JOB.REMOVE(10); --job 번호
COMMIT;
END;
이상으로 오라클 Job 등록하는 방법과 기타 사용법들을 같이 알아봤습니다.
작은 도움 됐기를 바라면서 이만 글 마치겠습니다.
감사합니다!
'킷도우의 IT > 데이터베이스(Database)' 카테고리의 다른 글
[Oracle 설치/삭제] 오라클 DB 설치, 삭제 방법 정리 (0) | 2022.12.13 |
---|---|
[실무 경험담] 실무에서 필요한 JOIN문 딱 이것만 기억하자(INNER JOIN, LEFT JOIN, FULL OUTER JOIN) (4) | 2022.12.10 |
댓글