Oracle Job

개발관련/디비 2017. 4. 12. 17:58

--job 수행 시간 및 간격, 실행 건수 확인

select schema_user db_user
    , what as job_proc
    , last_date
    , last_sec
    , next_date
    , next_sec
    , total_time pros_time
    , broken
    , interval
    , failures
from dba_jobs
order by schema_user, what
;

 

 

 

--현재 진행중인 dbms job      
select j.sid,
s.spid,
s.serial#,
       j.log_user,
       j.job,
       j.broken,
       j.failures,
       j.last_date||':'||j.last_sec last_date,
       j.this_date||':'||j.this_sec this_date,
       j.next_date||':'||j.next_sec next_date,
       j.next_date - j.last_date interval,
       j.what
from (select djr.SID,
             dj.LOG_USER, dj.JOB, dj.BROKEN, dj.FAILURES,
             dj.LAST_DATE, dj.LAST_SEC, dj.THIS_DATE, dj.THIS_SEC,
             dj.NEXT_DATE, dj.NEXT_SEC, dj.INTERVAL, dj.WHAT
        from dba_jobs dj, dba_jobs_running djr
       where dj.job = djr.job ) j,
     (select p.spid, s.sid, s.serial#
          from v$process p, v$session s
         where p.addr  = s.paddr ) s
 where j.sid = s.sid      

 

 

 

1. JOB 등록

1
2
3
4
5
6
7
8
DBMS_JOB.SUBMIT(JOB_NO, WHAT, NEXT_DATE, INTERVAL);
 
예)
declare
   job_no number;
begin
   dbms_job.submit(job_no, 'dbms_output.put_line(''ok'');', sysdate, 'sysdate + 1');
end;


 

참고 : 실행주기 계산
       'sysdate + 7'                          : 일주일에 1회 실행
       'sysdate + 1'                          : 하루에 1회 실행
       'next_day(sysdate, ''TUESDAY'')' : 매주 화요일에 실행
       'null'                                     : 1회 실행
       'sysdate + 1/24'                      : 1시간에 1회 실행
       'sysdate + 1/24/60'                 : 1분에 1회 실행
       'trunc(sysdate+1) + 2/24'     : 다음날 2시에 1회 실행



2. JOB 변경

1
2
3
4
5
6
7
8
9
10
BEGIN
   DBMS_JOB.CHANGE(JOB_NO, WHAT, NEXT_DATE, INTERVAL);
   COMMIT;
END;
 
예)
BEGIN
   DBMS_JOB.CHANGE(10, null, null, 'sysdate+3');
   COMMIT;
END;


 

참고 : COMMIT를 사용하게 되면 변경내용이 바로 적용된다.



3. JOB 조회

1
2
SELECT * FROM USER_JOBS;
SELECT * FROM DBA_JOBS;



4. JOB 삭제

1
2
3
4
5
BEGIN
   DBMS_JOB.REMOVE(JOB_NO);
   COMMIT;
END;
/



5. JOB 정지/재시작

1
2
3
4
5
EXECUTE DBMS_JOB.BROKEN(JOB_NO, TRUE);
EXECUTE DBMS_JOB.BROKEN(JOB_NO, FALSE);
 
예) EXECUTE DBMS_JOB.BROKEN(10, TRUE);
    EXECUTE DBMS_JOB.BROKEN(10, FALSE);



6. JOB 다음실행 시간 변경

1
2
3
EXECUTE DBMS_JOB.NEXT_DATE(JOB_NO, NEXT_DATE);
 
예) EXECUTE DBMS_JOB.NEXT_DATE(10, SYSDATE+1);



7. JOB 실행주기 변경

1
2
3
EXECUTE DBMS_JOB.INTERVAL(JOB_NO, INTERVAL);
 
예) EXECUTE DBMS_JOB.INTERVAL(10, 'sysdate + 7');



8. JOB 실행

1
EXECUTE DBMS_JOB.RUN(JOB_NO);

'개발관련 > 디비' 카테고리의 다른 글

SQL Commands  (0) 2017.09.26
exp, imp  (0) 2017.09.19
PK생성,삭제  (0) 2017.04.19