다연이네

[days17] 오라클 잡과 스케줄러 (Job, Scheduler) 본문

Oracle

[days17] 오라클 잡과 스케줄러 (Job, Scheduler)

 다연  2020. 11. 23. 19:43
반응형
create table tbl_job_test
(
    seq number
    ,insert_date date
);




create or replace procedure up_jobtest
is
 vseq number;
begin
 select nvl( max(seq), 0) +1 into vseq
 from tbl_job_test;
 
 insert into tbl_job_test values (vseq, sysdate);
 commit;
exception
    when others then 
     rollback;
     dbms_output.put_line('에러 발생, 롤백 처리됨');
end;




select * from tbl_job_test;

계속 만들어진다.

 

1) 잡 등록 - dbms_job.summit

declare
 v_job_no number;
begin
 dbms_job.submit( 
        job => v_job_no
        ,what => 'UP_JOBTEST;'
        ,next_date => sysdate
        ,interval => 'sysdate +1/60/24'); --1분간격으로 UP_JOBTEST를 자동으로 
    commit;
    dbms_output.put_line('> v_job_no :'||v_job_no);
end;

2) job 확인

select *
from user_jobs;

3) 잡 중지 또는 재실행 - dbms_job.broken

begin
 dbms_job.broken(1, true); -- true:중지 / false:재시작
end;

4) 잡의 속성 변경 예) 1분간격 -> 3분간격 - dbms_job.change()

begin
    dbms_job.change(
        job=>1
        ,what => 'UP_JOBTEST;'
        ,next_date => sysdate
        ,interval => 'sysdate +3/60/24' --3분 간격으로
end;

5) 잡 실행 / 삭제

begin
    --dbms_job.run(1); --실행
    dbms_job.remove(4); --삭제
end;

 

 

 dbms_job 패키지를 사용할 때의 단점과 한계

 

1. 세밀한 실행 주기 설정 어려움
sysdate +1 하루 한번
sysdate +1/24 한시간마다
sysdate +1/60/24 일분마다
예)매주 수요일 오전 6시~오후 6시 (어려움)


2. sql과 pl/sql 형태만 실행 가능
-- 위의 문제 해결 -> dbms_scheduler 패키지 사용

 

 

반응형
Comments