더북(TheBook)

또한 다음과 같이 좀더 복잡한 주기로도 설정할 수 있다.

매주 일요일 오후 3시마다 수행: NEXT_DAY(TRUNC(SYSDATE),‘일요일’) + 15/24

매주 수요일 오후 11시마다 수행: NEXT_DAY(TRUNC(SYSDATE),‘수요일’) + 23/24

매월 마지막 날 오후 6시 30분에 수행: LAST_DAY(TRUNC(SYSDATE)) + 18/24 + 30/60/24

job 매개변수는 SUBMIT 프로시저를 호출해 잡이 등록되는 순간 오라클이 자동으로 잡 번호를 생성해 job 매개변수에 할당한다. instance와 force 매개변수는 인스턴스와 관련된 설정 값으로 일반적으로 생략, 즉 디폴트 값을 사용된다. 그럼 실제로 SUBMIT 프로시저를 호출해 잡을 등록해 보자.

입력

    DECLARE
      v_job_no NUMBER;
    BEGIN
      -- 현재 시간 기준 1분에 1번씩 ch15_job_test_proc 프로시저를 실행하는 잡 등록
      DBMS_JOB.SUBMIT  ( job => v_job_no, 
                         what => 'ch15_job_test_proc;',
                         next_date => SYSDATE,
                         interval => 'SYSDATE + 1/60/24' );         -- 현재 시간 기준 1분에 1번

      COMMIT;

      -- 시스템에서 자동 생성된 잡 번호 출력
      DBMS_OUTPUT.PUT_LINE('v_job_no : ' || v_job_no);
    END;

결과

    v_job_no :30

결과를 보면 성공적으로 잡이 등록되었고 오라클에서 자동 생성된 잡 번호는 30번이다(잡 번호는 시스템에서 자동 생성하므로 SUBMIT 프로시저를 실행할 때마다 채번되는 번호는 다르다는 점을 알아 두자)임을 알 수 있다. 그럼 제대로 잡이 실행되는지 확인해야 하는데, 확인하는 방법은 2가지가 있다. 첫 번째는 ch15_job_test_proc 프로시저가 데이터를 생성하는 ch15_job_test 테이블을 조회해 보는 것이고, USER_JOBS (ALL_JOBS, DBA_JOBS) 시스템 뷰를 조회하는 것이 두 번째 방법이다.

입력

    SELECT SEQ, TO_CHAR(INSERT_DATE, 'YYYY-MM-DD HH24:MI:SS')
    FROM ch15_job_test;

결과

    SEQ   TO_CHAR(INSERT_DATE,'YYYY-MM-DDHH24:MI:SS')
    ----- ------------------------------------------------
    1     2014-07-14 22:35:40
    2     2014-07-14 22:36:40
    3     2014-07-14 22:37:40
    4     2014-07-14 22:38:40
    5     2014-07-14 22:39:40

위 결과를 보면 22시 35분 40초에 시작되어 1분 간격으로 데이터가 입력된 것을 확인할 수 있다. 즉 30번 잡이 ch15_job_test_proc 프로시저를 1분마다 실행해 데이터가 입력된 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.