oracle job 응용 프로그램

8177 단어 Oacle
(전환) oracle job 응용
1.
begin   
  sys.dbms_job.submit(job => :job,    
                      what => 'job_stat_cooperate;',    
                      next_date => to_date('01-07-2008 05:00:00', 'dd-mm-yyyy hh24:mi:ss'),    
                      interval => 'TRUNC(SYSDATE+30)+5/24');    
  commit;    
end;    
/  

 
 
  매달 1 일 오전 5 시 에 실 행 된 JOB 는 지난주 에 쓰 려 고 시 도 했 는데 이번 주 에 와 서 실행 효 과 를 보고 OK. 기록 했다.
  TRUNC (SYSDATE + 30) + 5 / 24 는 순환 시간 을 표시 합 니 다. 현재 시간 에 30 일의 날 짜 를 더 하고 구체 적 인 시간 을 더 합 니 다.
 
2.
Oracle 타이머 (Job) 시간 대별 쓰기 집합
원작 자: 블 로그 가든 이 휘황찬란 하 다. 원문: 링크 
DBA 에 있어 데이터베이스 Job 은 더 이상 익숙 할 수 없습니다. 데이터 베 이 스 를 정기 적 으로 자동 으로 실행 하거나 데이터 베 이 스 를 백업 하거나 데이터 추출 을 하거나 데이터 베 이 스 를 최적화 시 켜 야 하기 때 문 입 니 다. 색인 재 구축 등 작업 을 포함 합 니 다.그러나 Oracle 타이머 Job 시간의 처리 에 있어 변화무쌍 합 니 다. 오늘 저 는 비교적 자주 사용 하 는 문법 을 다음 과 같이 모 았 습 니 다.
정리 하기 전에 먼저 Job 의 인 자 를 일일이 설명 하 세 요.
job 매개 변 수 는 Submit () 과정 에서 돌아 오 는 binaryineger。이 값 은 유일한 작업 을 표시 하 는 데 사 용 됩 니 다.
what 인 자 는 실 행 될 PL / SQL 코드 블록 입 니 다.
next_date 매개 변 수 는 언제 이 작업 을 실행 할 지 알려 줍 니 다.Job 을 쓸 때 이 값 을 지정 하지 않 아 도 됩 니 다.
interval 매개 변 수 는 언제 이 작업 이 다시 실 행 될 것 입 니까?
그 중에서 Interval 이라는 값 은 Job 이 언제, 다시 실 행 될 지 를 결정 하 는 관건 입 니 다.
예 를 들 어 저장 프로 세 스 pdosomethings, 서로 다른 시간 간격 으로 실행 되 어야 합 니 다.
declare   
 2  jobno number;   
 3begin   
 4  dbms_job.submit(
 5    jobno,
 6    'p_dosomething;',  --what
 7    to_date('20090101020000','yyyy-mm-dd hh24:mi:ss'),--next_date,    
 8    'Interval     '--interval,    
 9  );   
10  commit;   
11end; 

 
1、 분당 실행
Interval => TRUNC(sysdate,’mi’) + 1 / (24*60)
2、 매일 정시 에 집행 하 다.
매일 새벽 2 시 에 실행
Interval => TRUNC(sysdate) + 1 +2 / (24)
3、 매주 정시 에 집행 하 다.
매주 새벽 2 시 에 실행
Interval = > TRUNC (next day (sysdate, 2) + 2 / 24 -- 월요일, 일주일 다음 날
4、 매달 정시 에 집행 하 다
매월 1 일 새벽 2 시 에 실행
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24
5、 매 분기 정시 집행
예 를 들 어 매 분기 첫날 새벽 2 시 에 집행 된다.
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24
6、 반년 마다 정시 에 집행 하 다.
매년 7 월 1 일과 1 월 1 일 새벽 2 시
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24
7、 매년 정시 에 집행 하 다.
매년 1 월 1 일 새벽 2 시 에 집행 한다.
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24
물론 위 에 나열 되 어 있 는 것 은 여러 가지 측면 을 고려 할 수 없 지만 조금 만 변화 하면 수많은 예 를 파생 시 킬 수 있 습 니 다. 똑똑 한 당신 은 반드시 그 럴 것 입 니 다. 저 는 잔소리 가 많 지 않 습 니 다.
3. Oacle 데이터 베 이 스 는 정기 적 으로 스 크 립 트 를 자동 으로 실행 하거나 데이터 베 이 스 를 백업 하거나 데이터 추출 을 하거나 데이터 베 이 스 를 최적화 시 켜 야 합 니 다. 색인 재 구축 등 작업 을 포함 하여 함수 dbms 가 필요 합 니 다.job. submit, Oracle 타이머 Job 시간 처리 완료.dbms 사용job. submit 이 함 수 는 두 가지 만 고려 해 야 합 니 다. 특정한 임 무 를 배정 하고 임 무 를 수행 하 는 시간 을 맞 춰 야 합 니 다.하지만 가장 중요 하고 까다 로 운 일 입 니 다. 임 무 를 수행 할 시간 을 정 하 는 것 이 라 고 생각 합 니 다.시간 이 확정 되면 다른 일 은 하기 쉽다.다음은 함수 dbmsjob. submit 사용 방법:
dbms_job.submit( job out binary_integer,    
what       in   archar2,    
next_date     in   date,    
interval     in   varchar2,    
no_parse     in   boolean)  
dbms_job.submit( job out binary_integer, what       in   archar2, next_date     in   date, interval     in   varchar2, no_parse     in   boolean) 


 
 
그 중: ● job: 출력 변 수 는 이 작업 이 작업 대기 열 에 있 는 번호 입 니 다.● what: 실 행 된 작업 의 이름과 입력 매개 변수;●next_date: 작업 수행 시간;● interval: 작업 수행 시간 간격.그 중에서 Interval 이라는 값 은 Job 이 언제, 다시 실 행 될 지 결정 하 는 관건 입 니 다.interval 이 null 로 설정 되 었 을 때 이 job 실행 이 끝나 면 대기 열 에서 삭 제 됩 니 다.만약 우리 가 이 job 를 주기 적 으로 실행 해 야 한다 면 'sysdate + m' 로 표시 해 야 합 니 다.실행 시간의 간격 을 어떻게 잘 정 하 는 지 는 함수 TRUNC 를 파악 해 야 합 니 다.1. TRUNC (for dates) TRUNC 함수 가 지정 한 요 소 를 위 한 날짜 값 입 니 다.구체 적 인 문법 형식 은 다음 과 같다. TRUNC (date [, fmt]) 에서 날짜 값 fmt 날짜 형식 입 니 다. 이 날 짜 는 지정 한 요소 형식 으로 절 제 됩 니 다.무시 하면 가장 가 까 운 날짜 에서 이 함수 의 사용 상황 을 캡 처 합 니 다: 1) 해마다 select  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'yyyy')  from dual -----------------------------------------------------------------------------------  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'mm')  from dual ----------------------------------------------------------------------------------  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'dd')  from dual --------------------------------------------------------------------------------------  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'hh')  from dual ------------------------------------------------------------------------------------------  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'mi')  from dual ---------------------------------------------------------------------------------------- 1) 、 분당 실행 Interval = > TRUNC (sysdate, 'mi') + 1 / (24 * 60) 2), 매일 정시 실행 예: 매일 새벽 2 시 에 Interval = > TRUNC (sysdate) + 1 + 2 / (24) 3), 매주 정시 실행 예: 매주 1 새벽 2 시 에 Interval = > TRUNC (next day (sysdate, 2) + 2 / 24 -- 월요일, 일주일 의 다음날 4),매월 정시 집행 예: 매월 1 일 새벽 2 시 에 Interval = > TRUNC (LAST DAY (SYSDATE) + 1 + 2 / 24 5), 분기 별 정시 집행 예 를 들 어 분기 별 첫날 새벽 2 시 에 Interval = > TRUNC (ADD MONTHS (SYSDATE, 3), 'Q') + 2 / 24 6), 반기 별 정시 집행 예: 매년 7 월 1 일과 1 월 1 일 새벽 2 시 Interval = > ADDMONTHS (trunc (sysdate, yyy), 6) + 2 / 24 7), 매년 정시 집행 예: 매년 1 월 1 일 새벽 2 시 에 Interval = > ADDMONTHS (trunc (sysdate, 'yyy'), 12) + 2 / 24 3. 인 스 턴 스 는 간단 한 예 를 제공 합 니 다. 주로 시간 간격 마다 표 에 기록 을 삽입 하 는 것 을 완성 합 니 다.  1) 테스트 테이블 생 성 
SQL>   create   table   test(id number,cur_time   date);      
      。    
---- sequence    
CREATE  SEQUENCE test_sequence    
INCREMENT  BY   1    --            
 START  WITH   1     --   1         
 NOMAXVALUE     --             
 NOCYCLE      --      ,        
 CACHE  10 ;  
   SQL>   create   table   test(id number,cur_time   date);         。 ---- sequence CREATE  SEQUENCE test_sequence INCREMENT  BY   1    --          START  WITH   1     --   1       NOMAXVALUE     --           NOCYCLE      --      ,      CACHE  10 ; 


 
-- 트리거 코드 는:
create or replace trigger tri_test_id    
  before insert on test   --test        
  for each row    
declare    
  nextid number;    
begin    
  IF :new.id IS NULLor :new.id=0 THEN --id       
    select test_sequence.nextval --SEQ_ID           
    into nextid    
    from sys.dual;    
    :new.id:=nextid;    
  end if;    
end tri_test_id;     

 
 
2) 사용자 정의 프로 세 스 만 들 기 
SQL>   create   or   replace   procedure   proc_test   as      
     2     begin      
     3     insert   into   test(cur_time)   values(sysdate);      
     4     end;      
     5     /    

 
 
프로 세 스 가 생 성 되 었 습 니 다.       3) JOB 만 들 기 
SQL> declare job1 number;    
     begin    
        dbms_job.submit(job1,'proc_test;',sysdate,'sysdate+1/1440');--  1440  ,      test        
    end;  
  SQL> declare job1 number;        begin           dbms_job.submit(job1,'proc_test;',sysdate,'sysdate+1/1440');--  1440  ,      test           end; 


 
 
PL/SQL   JOB 가 성공 적 으로 완성 되 었 습 니 다.

좋은 웹페이지 즐겨찾기