테마
한빛유통의 월초 체인은 매달 1일 05:00부터 15분 간격으로 단계 여덟 개를 하나씩 띄운다. 2019년에 단계마다 스케줄러 작업을 따로 만들고 시작 시각을 박아 둔 구조다. 마감은 07:00(정산팀 출근과 정산 화면 오픈)이고, 끝나는 시각은 늘 06:51 무렵이라 '여유 9분'으로 관리해 왔다. 11월 1일에는 S5(고객 등급 재산정)가 고객 정보 화면이 잡고 있던 행 잠금을 15분 기다려 06:15:41에 끝났다. S6(월 보정)은 06:15:00에 정해진 대로 시작했고, 11월 3일 정산팀이 등급이 바뀐 고객 214명의 10월 보정액이 옛 등급 보정률로 DW에 넘어간 것을 찾아냈다. 박팀장: "시간이 모자라서가 아니라는데, 그럼 뭐가 문제입니까? 숫자로 정리해 주세요."
T_ORD_BIG 1,000,000행 · 5,826블록 · T_ORD 100,000행 · 896블록 · T_ORD_STLM 100,000행 · 640블록 · M_CUS 2,000행 · 30블록 · T_ITM_EVL 5,000행 · 48블록PRG_S1 ~ PRG_S8이 스케줄러에 등록되어 있다.-- 2019년 등록 · 단계마다 작업 하나, 시작 시각 고정 (S1 05:00, S2 05:15, … S8 06:45)
BEGIN
DBMS_SCHEDULER.CREATE_JOB(job_name => 'JOB_MON_S1', program_name => 'PRG_S1',
repeat_interval => 'FREQ=MONTHLY;BYMONTHDAY=1;BYHOUR=5;BYMINUTE=0', enabled => TRUE);
DBMS_SCHEDULER.CREATE_JOB(job_name => 'JOB_MON_S2', program_name => 'PRG_S2',
repeat_interval => 'FREQ=MONTHLY;BYMONTHDAY=1;BYHOUR=5;BYMINUTE=15', enabled => TRUE);
DBMS_SCHEDULER.CREATE_JOB(job_name => 'JOB_MON_S3', program_name => 'PRG_S3',
repeat_interval => 'FREQ=MONTHLY;BYMONTHDAY=1;BYHOUR=5;BYMINUTE=30', enabled => TRUE);
-- … S4 05:45 · S5 06:00 · S6 06:15 · S7 06:30
DBMS_SCHEDULER.CREATE_JOB(job_name => 'JOB_MON_S8', program_name => 'PRG_S8',
repeat_interval => 'FREQ=MONTHLY;BYMONTHDAY=1;BYHOUR=6;BYMINUTE=45', enabled => TRUE);
END;
[11월 1일 — 스케줄러 실행 기록]
단계 하는 일 정해진 시작 끝 경과 읽는 것 → 쓰는 것
S1 T_ORD_BIG 재적재 05:00 05:01:10 1분 10초 STG_ORD_BIG → T_ORD_BIG
S2 T_ORD_BIG 통계 수집 05:15 05:15:50 0분 50초 T_ORD_BIG
S3 정산 적재 P1 05:30 05:30:20 0분 20초 T_ORD → T_ORD_STLM
S4 월마감 집계 05:45 05:47:30 2분 30초 T_ORD_BIG → T_MON_SUM
S5 고객 등급 재산정 06:00 06:15:41 15분 41초 T_ORD_BIG → M_CUS (평소 0분 40초 · 이날 enq: TX 15분)
S6 월 보정 06:15 06:15:20 0분 20초 T_ORD_STLM · M_CUS → T_STLM_ADJ
S7 상품평가 요약 06:30 06:30:05 0분 05초 T_ITM_EVL → T_ITM_EVL_SUM
S8 DW 전송 06:45 06:51:00 6분 00초 T_MON_SUM · T_ORD_STLM · T_STLM_ADJ → DW
마감 07:00 · 끝 06:51:00 · 여유 9분 · 실패한 단계 0
[10월 1일 — 평소] 모든 단계가 위와 같고 S5 0분 40초 · 끝 06:51:00
[11월 3일 정산팀 확인]
등급이 바뀐 고객 214명 · 10월 보정이 옛 등급 보정률로 계산됨 · DW 에 그대로 넘어감