- 환경 구성
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
);