본문 바로가기

ETL Tools/Oracle Data Integrator

odi dynamic batch scheduling 30s 30 초 배치 JOB_LOG

- 환경 구성
JOB Log Table 생성

create table etl_job_log(
    sess_no number,
    sess_name varchar2(30),
    start_time varchar2(14),
    end_time varchar2(14),
    reg_time date
);

구성할 패키지.



전체적 시나리오 설명

- log 테이블에 각각의 job이 실행 될때 마다 종료시간을 로그로 남긴다.

1. 초기실행시 3변수의 값을 새로고침한다.
 - #V_S : 배치의 from 이 되는 변수로, 로그에서 마지막 적제된 종료시간을 추출
 - #V_E : 배치의 to 가 되는 변수로, sysdate
 - #V_S_PLUS : 배치가 비정상적인 종료 후, 재가동되었을때 추출시간 간격을 유지하기 위해 사용.(#V_S + 1분)

2. 현재 배치가 정상인지 여부 검사
 - #V_E >= #V_S_PLUS ( = 해당 배치가 1분이상 돌지않았을 경우 )

* 정상적인 배치
3. JOB 실행
4. 로그 생성 ( 적재 종료시간 삽입 )
5. 30s WAIT.
6. 시나리오 실행 ( -> 1 )

* 비정상적인 배치
3. 배치 to 변수 재 설정
 - #V_E = #V_S_PLUS ( 배치를 1분으로 줄임 )
4. JOB 실행
5. 로그생성 ( 적재 종료시간 삽입 )
6. 시나리오 실행 ( ->1 ) -- 비정상적인 배치일 경우는 정상으로 돌아갈 때까지 wait를 주지 않아 따라갈 수 있도록 한다.

## Example 생성 :

- 변수 생성
#V_S
새로고침
select nvl(max(end_time),to_char(sysdate,'yyyymmddhh24miss')) start_time
from s_lcd.etl_job_log
where (1=1)
and sess_name = '<%=snpRef.getSession("SESS_NAME")%>'
order by reg_time desc
-- 로그를 분석하여 최근 적재된 마지막 시간을 가져옴.

#V_E
새로고침
select to_char(sysdate,'yyyymmddhh24miss') from dual
-- 현재시간

#V_PLUS
새로고침
select
 to_char(
  to_date('#V_S','yyyymmddhh24miss')
   + 1/(24*60) 
 ,'yyyymmddhh24miss' )
from dual
-- #V_S + 1분

Log 남기는 Interface 생성 

insert into etl_job_log
values (
    '<%=snpRef.getSession("SESS_NO")%>',
    '<%=snpRef.getSession("SESS_NAME")%>',
    #V_S,
    #V_E,
    sysdate
);