본문 바로가기
Database/oracle

[oracle] 오라클 스케줄 작업

by 평범한kiki 2023. 4. 17.

*** 오라클 스케줄 작업


 1.종류
- DBMS_JOB (특정시간및 가격으로 특정 작업수행)
-  DBMS_SCHEDULER - 오라클 10G 이상
   (새로추가된 패키지, 복잡하고 정교한 수준의 스케줄 작업 가능) ** 이거쓸것!


2. (DBMS_SCHEDULER)실행가능 프로그램:
-PL/SQL, 저장 프로시저, 외부프로그램 사용가능
-DBMS_SCHEDULER.CREATE_PROGRAME 프로시저를 통해 등록가능
- [ALL/DBA/USER]_SCHEDULER_PROGRAMS 뷰를 통해서 확인 가능


3. (DBMS_SCHEDULER) 스케줄
- 작업을 수행할 스케줄
- DBMS_SCHEDULER.CREATE_SCHEDULE 프로시저를 통해 등록가능
- [ALL/DBA/USER]_SCHEDULER_SCHEDULERS 뷰를 통해서 확인 가능


4. (DBMS_SCHEDULER) 작업(JOB)
- 주어진 프로그램과 스케줄에 따라 수행할 작업을 말함(언제 무엇을)
- DBMS_SCHEDULER.CREATE_JOB 프로시저를 통해 등록가능
- [ALL/DBA/USER]_SCHEDULER_JOBS 뷰를 통해서 확인 가능
- 작업수행시 로그는 [ALL/DBA/USER]_SCHEDULER_JOB_LOG뷰

5. 일반적 등록방법
  1) 실행시킬 PL/SQL 작성
  2) 프로그램 생성 (dbms_scheduler.create_program())
  3) 스케쥴 생성  (dbms_scheduler.create_schedule())
  4) JOB 등록
     (dbms_scheduler.create_job())
    * 신규 JOB은 활성화 필요

 

6. 스케줄에 대한 정의없이 바로 JOB으로 등록

  begin 
    dbms_scheduler.create_job(
        job_name => 'SP_TEST1_SCHD', --신규 job이름
        job_type => 'PLSQL_BLOCK',
       job_action => 'begin SP_TEST1; end;', --실제 실행될 프로그램명
       start_date => systimestamp, --지금즉시실행
       end_date => null,
       repeat_interval=> 'FREQ=SECONDLY; INTERVAL=5'  --반복주기
       enabled => true,
       comments=> '5초에 한번씩 SP_TEST1 실행'
    );
   end;


* job_action 종류
  - job_action에 파라미터 보낼때는 
    'begin SP_TEST1("param"); end;'
    'begin SP_TEST1(TO_CHAR(SYSDATE, 'YYYYMMDD'),0,0); end;'
    'begin SP_TEST1(); end;'
 - job_type이 STORED_PROCEDURE 면, job_action은 프로시저명을 적는다
    job_action => 'SP_TEST1'
 - job_type이 EXECUTABLE 면, job_action은 실행프로그램을 적는다
    job_action => '/home/user/test1.sh'

*  start_date
    start_date => trunc(SYSDATE) +1 + 8/24
    다음날 오전 8시 시작
* repeat_interval(반복적 수행 형식)
   repeat_interval=> 'FREQ=DAILY; INTERVAL=1'  --매일 한번 실행
   repeat_interval=> 'FREQ=HOURLY; INTERVAL=1' --1시간 간격으로 수행
   repeat_interval=> 'FREQ=MINUTEY; INTERVAL=30' --30분 간격으로 수행 
   repeat_interval=> 'FREQ=SECONDLY; INTERVAL=5'  --5초간격으로 수행  
   repeat_interval=> 'FREQ=WEEKLY; INTERVAL=1 --1주 간격으로 수행 
   repeat_interval=> 'FREQ=MONTHLY;' --매달 수행 
   repeat_interval=> 'FREQ=YEARLY;' --매년 수행 
  - BY절 사용시 더 구처적 시간 지정가능
   repeat_interval=> 'FREQ=MONTHLY;BYWEEKNO=2,4; BYDAY=FRI' --매달 2,4주차 금요일 수행 
   repeat_interval=> 'FREQ=WEEKLY; BYDAY=FRI; BYHOUR=22; BYMINUTE=30;' --매주 금요일 22시 30분 수행

참고]  서울야인의 블로그
oracle dbms_scheduler를 사용하는 간단한 절차 및 방법 소개
출처 : 서울야인의.. | 블로그
 - https://naver.me/5lCq7TYM

https://m.blog.naver.com/tpgpfkwkem0/220845165949