행위

"오라클 스케줄러"의 두 판 사이의 차이

DB CAFE

(새 문서: Oracle 10g↑ 스케쥴러 관련 DBMS 명령어 자주 사용하면서도 꼭 쓸려고 할 때는 생각이 안나기에 여기 다시 정리 합니다. --등록된 job <sourc...)
 
9번째 줄: 9번째 줄:
 
<source lang=sql>
 
<source lang=sql>
 
SELECT * FROM USER_SCHEDULER_JOBS;
 
SELECT * FROM USER_SCHEDULER_JOBS;
 +
</source>
  
 
--job의 arguments
 
--job의 arguments
 
<source lang=sql>
 
<source lang=sql>
 
SELECT * FROM USER_SCHEDULER_JOB_ARGS;  
 
SELECT * FROM USER_SCHEDULER_JOB_ARGS;  
 +
</source>
  
 
--현재 running중인 job들의정보
 
--현재 running중인 job들의정보
 
<source lang=sql>
 
<source lang=sql>
 
SELECT * FROM USER_SCHEDULER_RUNNING_JOBS;
 
SELECT * FROM USER_SCHEDULER_RUNNING_JOBS;
 +
</source>
  
 
--job의 log
 
--job의 log
 
<source lang=sql>
 
<source lang=sql>
 
SELECT * FROM USER_SCHEDULER_JOB_LOG;
 
SELECT * FROM USER_SCHEDULER_JOB_LOG;
 +
</source>
  
 
--job의수행된정보및Error 정보  
 
--job의수행된정보및Error 정보  
 
<source lang=sql>
 
<source lang=sql>
 
SELECT * FROM USER_SCHEDULER_JOB_RUN_DETAILS;
 
SELECT * FROM USER_SCHEDULER_JOB_RUN_DETAILS;
 +
</source>
  
 
-- 등록된 Program
 
-- 등록된 Program
 
<source lang=sql>
 
<source lang=sql>
 
SELECT * FROM USER_SCHEDULER_PROGRAMS;  
 
SELECT * FROM USER_SCHEDULER_PROGRAMS;  
 +
</source>
  
 
-- 프로그램의 매개변수
 
-- 프로그램의 매개변수
 
+
<source lang=sql>
 
SELECT * FROM USER_SCHEDULER_PROGRAM_ARGS;  
 
SELECT * FROM USER_SCHEDULER_PROGRAM_ARGS;  
 +
</source>
  
 
--등록된 스케쥴러  
 
--등록된 스케쥴러  
 
+
<source lang=sql>
 
SELECT * FROM USER_SCHEDULER_SCHEDULES;
 
SELECT * FROM USER_SCHEDULER_SCHEDULES;
 +
</source>
  
 
-- 스케쥴 삭제  
 
-- 스케쥴 삭제  
 +
<source lang=sql>
 
BEGIN
 
BEGIN
 
         DBMS_SCHEDULER.DROP_JOB(
 
         DBMS_SCHEDULER.DROP_JOB(
44번째 줄: 53번째 줄:
 
           FORCE      => false);
 
           FORCE      => false);
 
END ;  
 
END ;  
 +
</source>
  
 
-- 스케쥴 시작
 
-- 스케쥴 시작
 +
<source lang=sql>
 
EXECUTE DBMS_SCHEDULER.ENABLE('SCH_PROC_MSG_STATE');
 
EXECUTE DBMS_SCHEDULER.ENABLE('SCH_PROC_MSG_STATE');
 +
</source>
  
 
-- 스케쥴 정지
 
-- 스케쥴 정지
 +
<source lang=sql>
 
EXECUTE DBMS_SCHEDULER.DISABLE('SCH_PROC_MSG_STATE');
 
EXECUTE DBMS_SCHEDULER.DISABLE('SCH_PROC_MSG_STATE');
 
+
</source>
 
  
 
DBMS_JOB.submit : job 등록
 
DBMS_JOB.submit : job 등록
 
 
DBMS_JOB.remove : 제거
 
DBMS_JOB.remove : 제거
 
 
DBMS_JOB.change : 변경
 
DBMS_JOB.change : 변경
 
 
DBMS_JOB.next_date : job의 다음 수행시간 변경
 
DBMS_JOB.next_date : job의 다음 수행시간 변경
 
 
DBMS_JOB.interval : job의 실행 cycle 지정
 
DBMS_JOB.interval : job의 실행 cycle 지정
 
 
DBMS_JOB.what : job 수행 으로 등록된 object 를 변경
 
DBMS_JOB.what : job 수행 으로 등록된 object 를 변경
 
 
DBMS_JOB.run : job을 수동으로 실행
 
DBMS_JOB.run : job을 수동으로 실행
 
 
  
 
[등록 예제]
 
[등록 예제]
 
+
<source lang=sql>
 
DECLARE
 
DECLARE
 
   X NUMBER;
 
   X NUMBER;
83번째 줄: 87번째 줄:
 
   SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x)); -- 이부분은 job큐의 번호가 됩니다.
 
   SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x)); -- 이부분은 job큐의 번호가 됩니다.
 
END;
 
END;
+
</source>
  
 +
<source lang=sql>
 
BEGIN
 
BEGIN
 
DBMS_SCHEDULER.CREATE_JOB (
 
DBMS_SCHEDULER.CREATE_JOB (
96번째 줄: 101번째 줄:
 
   comments            => 'HJ SCH_PROC_MSG_STATE_TO_DAY');
 
   comments            => 'HJ SCH_PROC_MSG_STATE_TO_DAY');
 
END;
 
END;
   
+
</source>  
  
 
[인터벌 설정법]
 
[인터벌 설정법]

2018년 10월 21일 (일) 14:13 판

thumb_up 추천메뉴 바로가기


Oracle 10g↑ 스케쥴러 관련 DBMS 명령어

자주 사용하면서도 꼭 쓸려고 할 때는 생각이 안나기에 여기 다시 정리 합니다.



--등록된 job

SELECT * FROM USER_SCHEDULER_JOBS;

--job의 arguments

SELECT * FROM USER_SCHEDULER_JOB_ARGS;

--현재 running중인 job들의정보

SELECT * FROM USER_SCHEDULER_RUNNING_JOBS;

--job의 log

SELECT * FROM USER_SCHEDULER_JOB_LOG;

--job의수행된정보및Error 정보

SELECT * FROM USER_SCHEDULER_JOB_RUN_DETAILS;

-- 등록된 Program

SELECT * FROM USER_SCHEDULER_PROGRAMS;

-- 프로그램의 매개변수

SELECT * FROM USER_SCHEDULER_PROGRAM_ARGS;

--등록된 스케쥴러

SELECT * FROM USER_SCHEDULER_SCHEDULES;

-- 스케쥴 삭제

BEGIN
        DBMS_SCHEDULER.DROP_JOB(
           JOB_NAME   => 'SCH_PROC_MSG_STATE',
           FORCE      => false);
END ;

-- 스케쥴 시작

EXECUTE DBMS_SCHEDULER.ENABLE('SCH_PROC_MSG_STATE');

-- 스케쥴 정지

EXECUTE DBMS_SCHEDULER.DISABLE('SCH_PROC_MSG_STATE');

DBMS_JOB.submit : job 등록 DBMS_JOB.remove : 제거 DBMS_JOB.change : 변경 DBMS_JOB.next_date : job의 다음 수행시간 변경 DBMS_JOB.interval : job의 실행 cycle 지정 DBMS_JOB.what : job 수행 으로 등록된 object 를 변경 DBMS_JOB.run : job을 수동으로 실행

[등록 예제]

DECLARE
  X NUMBER;
BEGIN
  SYS.DBMS_JOB.SUBMIT
    ( job       => X 
     ,what      => '실행할 object'
     ,next_date => to_date('17-11-2007 09:00:00','dd/mm/yyyy hh24:mi:ss')
     ,interval  => 'TRUNC(SYSDATE) + 1 + 9/24'
     ,no_parse  => TRUE
    );
  SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x)); -- 이부분은 job큐의 번호가 됩니다.
END;
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'SCH_PROC_MSG_STATE_TO_DAY',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN MEM_NPRO.TEST_PROC (TO_CHAR(SYSDATE , ''YYYYMMDD'')); END;',
   start_date           => TO_DATE('2011-12-14 17:30:00' , 'YYYY-MM-DD HH24:MI:SS'),
   repeat_interval      => 'FREQ=MINUTELY;INTERVAL=30',
   end_date             =>  NULL,
   enabled              =>  TRUE,
   comments             => 'HJ SCH_PROC_MSG_STATE_TO_DAY');
END;

[인터벌 설정법]

Execute daily          'SYSDATE + 1'
Execute once per week  'SYSDATE + 7'
Execute hourly         'SYSDATE + 1/24'
Execute every 10 min.  'SYSDATE + 10/1440'
Execute every 30 sec.  'SYSDATE + 30/86400'
Do not re-execute      NULL

1. 10분간격으로 실행

SYSDATE + 1/24/6

2. 현재 시간으로 부터 다음 날 현재 시간에 실행 (매일)

SYSDATE + 1 -- 지금이 오후3시면 다음날 오후 3시 에 매일매일 실행됩니다.

3. 매일 새벽 5시

TRUNC(SYSDATE) + 1 + 5 / 24

4. 매일 밤 10시

TRUNC(SYSDATE) + 20 / 24