Selaa lähdekoodia

ptis server update

HANTE 2 kuukautta sitten
vanhempi
commit
35f9ccd50e

+ 1 - 1
conf/utic-ptis-server.pid

@@ -1 +1 @@
-23404
+10548

+ 115 - 0
utic-ptis-server/Reference.TXT

@@ -0,0 +1,115 @@
+select min(t.reg_date), max(t.reg_date), count(1) from EVENTID_POLICE_LOG t;
+select min(t.reg_date), max(t.reg_date), count(1) from EVENTID_POLICE_LOG_TMP t;
+select min(t.reg_date), max(t.reg_date), count(1) from OCCURID_POLICE_LOG t;
+select min(t.reg_date), max(t.reg_date), count(1) from OCCURID_POLICE_LOG_TMP t;
+
+DELETE FROM EVENTID_POLICE_LOG WHERE REG_DATE < TO_CHAR(SYSDATE - 30, 'YYYYMMDDHH24MISS');
+DELETE FROM EVENTID_POLICE_LOG_TMP WHERE REG_DATE < TO_CHAR(SYSDATE - 30, 'YYYYMMDDHH24MISS');
+DELETE FROM OCCURID_POLICE_LOG WHERE REG_DATE < TO_CHAR(SYSDATE - 30, 'YYYYMMDDHH24MISS');
+DELETE FROM OCCURID_POLICE_LOG_TMP WHERE REG_DATE < TO_CHAR(SYSDATE - 30, 'YYYYMMDDHH24MISS');
+
+SELECT SEGMENT_NAME, ROUND(SUM(BYTES) / 1024 / 1024, 2) AS SIZE_MB
+FROM USER_SEGMENTS
+WHERE
+  SEGMENT_NAME = 'EVENTID_POLICE_LOG'
+  AND SEGMENT_TYPE = 'TABLE'
+GROUP BY SEGMENT_NAME;
+
+ALTER TABLE EVENTID_POLICE_LOG_TMP MOVE;
+ALTER INDEX EVENTID_POLICE_LOG_TMP_IDX01 REBUILD TABLESPACE occurid_police_log_idx;
+ALTER INDEX EVENTID_POLICE_LOG_TMP_IDX02 REBUILD TABLESPACE occurid_police_log_idx;
+ALTER INDEX EVENTID_POLICE_LOG_TMP_IDX03 REBUILD TABLESPACE occurid_police_log_idx;
+ALTER INDEX EVENTID_POLICE_LOG_TMP_IDX1 REBUILD TABLESPACE user_default_data;
+ALTER INDEX EVENTID_POLICE_LOG_TMP_IDX2 REBUILD TABLESPACE user_default_data;
+ALTER INDEX PK_EVENTID_POLICE_LOG_TMP REBUILD TABLESPACE occurid_police_log_idx;
+
+ALTER TABLE EVENTID_POLICE_LOG MOVE;
+ALTER INDEX EVENTID_POLICE_LOG_IDX01 REBUILD TABLESPACE occurid_police_log_idx;
+ALTER INDEX EVENTID_POLICE_LOG_IDX02 REBUILD TABLESPACE occurid_police_log_idx;
+ALTER INDEX EVENTID_POLICE_LOG_IDX03 REBUILD TABLESPACE occurid_police_log_idx;
+ALTER INDEX EVENTID_POLICE_LOG_IDX1 REBUILD TABLESPACE user_default_data;
+ALTER INDEX EVENTID_POLICE_LOG_IDX2 REBUILD TABLESPACE user_default_data;
+ALTER INDEX PK_EVENTID_POLICE_LOG REBUILD TABLESPACE occurid_police_log_idx;
+
+ALTER TABLE OCCURID_POLICE_LOG MOVE;
+ALTER INDEX OCCURID_POLICE_LOG_IDX01 REBUILD TABLESPACE occurid_police_log_idx;
+ALTER INDEX OCCURID_POLICE_LOG_IDX02 REBUILD TABLESPACE occurid_police_log_idx;
+ALTER INDEX OCCURID_POLICE_LOG_IDX03 REBUILD TABLESPACE occurid_police_log_idx;
+ALTER INDEX OCCURID_POLICE_LOG_IDX1 REBUILD TABLESPACE user_default_data;
+ALTER INDEX OCCURID_POLICE_LOG_IDX2 REBUILD TABLESPACE user_default_data;
+ALTER INDEX PK_OCCURID_POLICE_LOG REBUILD TABLESPACE occurid_police_log_idx;
+
+ALTER TABLE OCCURID_POLICE_LOG_TMP MOVE;
+ALTER INDEX OCCURID_POLICE_LOG_TMP_IDX01 REBUILD TABLESPACE occurid_police_log_idx;
+ALTER INDEX OCCURID_POLICE_LOG_TMP_IDX02 REBUILD TABLESPACE occurid_police_log_idx;
+ALTER INDEX OCCURID_POLICE_LOG_TMP_IDX03 REBUILD TABLESPACE occurid_police_log_idx;
+ALTER INDEX OCCURID_POLICE_LOG_TMP_IDX1 REBUILD TABLESPACE user_default_data;
+ALTER INDEX OCCURID_POLICE_LOG_TMP_IDX2 REBUILD TABLESPACE user_default_data;
+ALTER INDEX PK_OCCURID_POLICE_LOG_TMP REBUILD TABLESPACE occurid_police_log_idx;
+
+
+-- 또는
+--ALTER TABLE EVENTID_POLICE_LOG_TMP SHRINK SPACE;
+ALTER TABLE EVENTID_POLICE_LOG ENABLE ROW MOVEMENT;
+ALTER TABLE EVENTID_POLICE_LOG SHRINK SPACE;
+ALTER TABLE EVENTID_POLICE_LOG DISABLE ROW MOVEMENT;
+
+ALTER TABLE EVENTID_POLICE_LOG_TMP ENABLE ROW MOVEMENT;
+ALTER TABLE EVENTID_POLICE_LOG_TMP SHRINK SPACE;
+ALTER TABLE EVENTID_POLICE_LOG_TMP DISABLE ROW MOVEMENT;
+
+ALTER TABLE OCCURID_POLICE_LOG ENABLE ROW MOVEMENT;
+ALTER TABLE OCCURID_POLICE_LOG SHRINK SPACE;
+ALTER TABLE OCCURID_POLICE_LOG DISABLE ROW MOVEMENT;
+
+ALTER TABLE OCCURID_POLICE_LOG_TMP ENABLE ROW MOVEMENT;
+ALTER TABLE OCCURID_POLICE_LOG_TMP SHRINK SPACE;
+ALTER TABLE OCCURID_POLICE_LOG_TMP DISABLE ROW MOVEMENT;
+
+-- 테이블에 NOLOGGING 설정
+ALTER TABLE EVENTID_POLICE_LOG NOLOGGING;
+ALTER TABLE EVENTID_POLICE_LOG_TMP NOLOGGING;
+ALTER TABLE OCCURID_POLICE_LOG NOLOGGING;
+ALTER TABLE OCCURID_POLICE_LOG_TMP NOLOGGING;
+
+
+BEGIN
+DBMS_STATS.GATHER_TABLE_STATS('PTDBS', 'EVENTID_POLICE_LOG_TMP', CASCADE => TRUE);
+END;
+/
+BEGIN
+DBMS_STATS.GATHER_TABLE_STATS('PTDBS', 'EVENTID_POLICE_LOG', CASCADE => TRUE);
+END;
+/
+BEGIN
+DBMS_STATS.GATHER_TABLE_STATS('PTDBS', 'OCCURID_POLICE_LOG', CASCADE => TRUE);
+END;
+/
+BEGIN
+DBMS_STATS.GATHER_TABLE_STATS('PTDBS', 'OCCURID_POLICE_LOG_TMP', CASCADE => TRUE);
+END;
+/
+
+select * from dba_synonyms where db_link is not null;
+--1	PUBLIC	CURLINKST	ITSAPP	CURLINKST	EXT12LOCDB
+--2	PUBLIC	GET_EXTDATE	ITSAPP	GET_EXTDATE	EXT12LOCDB
+--3	PUBLIC	RCV_LINK_TRAFFIC		RCV_LINK_TRAFFIC	XMLDB
+select * from dba_db_links;
+--1	PUBLIC	INCIDB	UTISINCI	UTIS	2022-08-17 오후 2:06:50
+--2	PUBLIC	UTISDB	UTIADMIN	UTIS	2025-05-13 오전 11:20:54
+--3	PUBLIC	XMLDB	SECTION	UTIS	2018-11-26 오전 11:21:53
+--4	PUBLIC	EXT12LOCDB	ITSAPP	EXT12LOCDB	2016-09-22 오전 9:42:13
+--5	PUBLIC	MAINDB	UTIADMIN	UTIS	2016-09-22 오전 9:42:13
+--6	PUBLIC	UTIS	PTAPP	UTIS	2016-09-22 오전 9:42:13
+--7	TIMS	MTE_06	NLDBS	NLDBS	2016-09-22 오전 9:42:13
+<!--    select 'IF_POL_MPSS_001', trunc(sysdate), '도로교통공단', '돌발정보', '5분', count(1) as count_snd from OCCURID_POLICE_LOG t where t.reg_date between to_char(sysdate-1, 'YYYYMMDD') || '000000' and to_char(sysdate-1, 'YYYYMMDD') || '235959';-->
+<!--    select 'IF_POL_MPSS_002', trunc(sysdate), '도로교통공단', '통제정보', '5분', count(1) as count_snd from EVENTID_POLICE_LOG t where t.reg_date between to_char(sysdate-1, 'YYYYMMDD') || '000000' and to_char(sysdate-1, 'YYYYMMDD') || '235959';-->
+<!--    select 'IF_POL_MPSS_003', trunc(sysdate), '도로교통공단', '소통정보', '5분', count(1) as count_snd from CURLINKST_POLICE_LOG t where t.reg_date between to_char(sysdate-1, 'YYYYMMDD') || '000000' and to_char(sysdate-1, 'YYYYMMDD') || '235959';-->
+
+INSERT INTO INDIGO_STATS (IF_ID, INIT_DATE, AGENCY, INFO, PERIOD, COUNT_SND)
+VALUES ('IF_POL_MPSS_001', trunc(sysdate+1), '도로교통공단', '돌발정보', '5분', );
+INSERT INTO INDIGO_STATS (IF_ID, INIT_DATE, AGENCY, INFO, PERIOD, COUNT_SND)
+VALUES ('IF_POL_MPSS_002', trunc(sysdate+1), '도로교통공단', '통제정보', '5분', );
+INSERT INTO INDIGO_STATS (IF_ID, INIT_DATE, AGENCY, INFO, PERIOD, COUNT_SND)
+VALUES ('IF_POL_MPSS_003', trunc(sysdate+1), '도로교통공단', '소통정보', '5분', );
+commit;

+ 40 - 0
utic-ptis-server/Shrink.SQL

@@ -0,0 +1,40 @@
+CREATE OR REPLACE PROCEDURE SHRINK_TABLE_AND_REPORT(p_table_name IN VARCHAR2) IS
+  v_pre_size_mb     NUMBER;
+  v_post_size_mb    NUMBER;
+  v_saved_mb        NUMBER;
+BEGIN
+  -- 리로그 전 사이즈 측정
+SELECT ROUND(SUM(BYTES) / 1024 / 1024, 2)
+INTO v_pre_size_mb
+FROM USER_SEGMENTS
+WHERE SEGMENT_NAME = UPPER(p_table_name)
+  AND SEGMENT_TYPE = 'TABLE';
+
+DBMS_OUTPUT.PUT_LINE('리로그 전 사이즈: ' || v_pre_size_mb || ' MB');
+
+  -- 행 이동 허용 설정
+EXECUTE IMMEDIATE 'ALTER TABLE ' || p_table_name || ' ENABLE ROW MOVEMENT';
+
+-- SHRINK SPACE 실행
+EXECUTE IMMEDIATE 'ALTER TABLE ' || p_table_name || ' SHRINK SPACE';
+
+-- 행 이동 설정 복구
+EXECUTE IMMEDIATE 'ALTER TABLE ' || p_table_name || ' DISABLE ROW MOVEMENT';
+
+-- 리로그 후 사이즈 측정
+SELECT ROUND(SUM(BYTES) / 1024 / 1024, 2)
+INTO v_post_size_mb
+FROM USER_SEGMENTS
+WHERE SEGMENT_NAME = UPPER(p_table_name)
+  AND SEGMENT_TYPE = 'TABLE';
+
+DBMS_OUTPUT.PUT_LINE('📉 리로그 후 사이즈: ' || v_post_size_mb || ' MB');
+
+  -- 절감된 공간 계산
+  v_saved_mb := v_pre_size_mb - v_post_size_mb;
+  DBMS_OUTPUT.PUT_LINE('절감된 공간: ' || ROUND(v_saved_mb, 2) || ' MB');
+EXCEPTION
+  WHEN OTHERS THEN
+    DBMS_OUTPUT.PUT_LINE('오류 발생: ' || SQLERRM);
+END;
+/

+ 17 - 0
utic-ptis-server/TableSpace.SQL

@@ -0,0 +1,17 @@
+SELECT
+    df.tablespace_name,
+    ROUND(df.total_mb, 2) AS total_mb,
+    ROUND(df.total_mb - fs.free_mb, 2) AS used_mb,
+    ROUND(fs.free_mb, 2) AS free_mb,
+    ROUND((df.total_mb - fs.free_mb) / df.total_mb * 100, 2) AS used_pct
+FROM
+    (SELECT tablespace_name, SUM(bytes) / 1024 / 1024 AS free_mb
+     FROM dba_free_space
+     GROUP BY tablespace_name) fs,
+    (SELECT tablespace_name, SUM(bytes) / 1024 / 1024 AS total_mb
+     FROM dba_data_files
+     GROUP BY tablespace_name) df
+WHERE
+    df.tablespace_name = fs.tablespace_name
+ORDER BY
+    used_pct DESC;

+ 19 - 24
utic-ptis-server/src/main/java/com/utic/center/utic/ptis/server/controller/UticPtisServerController.java

@@ -22,29 +22,6 @@ public class UticPtisServerController {
     private int today;
     private int minute;
 
-
-    private boolean isDayRunning() {
-        LocalDateTime now = LocalDateTime.now();
-        int year = now.getYear();
-        int month = now.getMonthValue();
-        int day = now.getDayOfMonth();
-        int hour = now.getHour();
-        int minute = now.getMinute();
-        int second = now.getSecond();
-        String nowTime = String.format("%04d%02d%02d%02d%02d%02d", year, month, day, hour, minute, second);
-        log.info("[05MIN...] {}: [{}]", LogUtils.elapsedLog("작업시간확인"), nowTime);
-        if (this.yesterday != day) {
-            this.yesterday = day; // 전일 일자 갱신
-            return true; // 일 작업을 수횅해야함
-        }
-        return false;
-    }
-    private void calculateTime() {
-        LocalDateTime now = LocalDateTime.now();
-        this.today = now.getDayOfMonth(); // 오늘 일자
-        this.minute = now.getMinute();  // 현재 분
-    }
-
     public boolean initialize() {
         LocalDateTime now = LocalDateTime.now();
         this.isRunning = false; // 현재 작업이 실행중이 아님을 표시
@@ -54,10 +31,22 @@ public class UticPtisServerController {
         return this.service.initialize();
     }
 
+    private void calculateTime() {
+        LocalDateTime now = LocalDateTime.now();
+//        int year = now.getYear();
+//        int month = now.getMonthValue();
+        this.today = now.getDayOfMonth(); // 오늘 일자
+        this.minute = now.getMinute();  // 현재 분
+//        int hour = now.getHour();
+//        int minute = now.getMinute();
+//        int second = now.getSecond();
+//        String nowTime = String.format("%04d%02d%02d%02d%02d%02d", year, month, day, hour, minute, second);
+    }
+
     public void run() {
         calculateTime();
         if (this.yesterday != this.today) {
-            this.service.processDay(); // 일작업 수행
+            //this.service.processDay(); // 일작업 수행
             this.yesterday = this.today; // 오늘 일자로 갱신
         }
         if (this.minute % 5 != 4) { // 5분마다 실행
@@ -70,9 +59,15 @@ public class UticPtisServerController {
         this.isRunning = true; // 현재 작업이 실행중임을 표시
         this.prevPrcsTime = TimeUtils.getCurrentTimeString(); // 현재 작업 시간 저장
 
+        log.info("");
+        log.info("[05MIN...] {}: [{}].", LogUtils.elapsedLog("PTIS ETLP JOb Processing"), this.prevPrcsTime);
+
+        this.service.initIndigoStats();
         this.service.jobEtlpTraf();
         this.service.jobEtlpEvnt();
         this.service.jobEtlpIncd();
+        this.service.insIndigoStats();
+        this.service .jobDeleteTable();
 
         this.isRunning = false; // 현재 작업이 종료됨을 표시
     }

+ 5 - 0
utic-ptis-server/src/main/java/com/utic/center/utic/ptis/server/dao/mapper/UticPtisServerMapper.java

@@ -21,6 +21,7 @@ public interface UticPtisServerMapper {
     int insertCurlinkstPoliceLog();
     int deleteRcvLinkTrafficTmp();  // none return value
     int insertRcvLinkTrafficTmp();
+    int deleteRcvLinkTraffic();
 
     String findOneMaxEventRegDate();
     int insertEventidPoliceLog(@Param("fromDate") String fromDate, @Param("toDate") String toDate);
@@ -30,4 +31,8 @@ public interface UticPtisServerMapper {
     int insertOccuridPoliceLog(@Param("fromDate") String fromDate, @Param("toDate") String toDate);
     int insertOccuridPoliceLogTmp(@Param("fromDate") String fromDate, @Param("toDate") String toDate);
 
+    int deleteEventidPoliceLog();
+    int deleteEventidPoliceLogTmp();
+    int deleteOccuridPoliceLog();
+    int deleteOccuridPoliceLogTmp();
 }

+ 22 - 0
utic-ptis-server/src/main/java/com/utic/center/utic/ptis/server/dao/repository/UticPtisServerRepository.java

@@ -59,6 +59,11 @@ public class UticPtisServerRepository {
         return this.mapper.insertRcvLinkTrafficTmp();
     }
 
+    @SqlOperation(type = SqlOperation.SqlType.DELETE, table = "RCV_LINK_TRAFFIC")
+    public int deleteRcvLinkTraffic() {
+        return this.mapper.deleteRcvLinkTraffic();
+    }
+
     @SqlOperation(type = SqlOperation.SqlType.SELECT, table = "UTISINCI.TB_IMS_DATA@UTISDB", param = "INCIDENT_TYPE_CD <> '1'")
     public String findOneMaxEventRegDate() {
         return this.mapper.findOneMaxEventRegDate();
@@ -85,4 +90,21 @@ public class UticPtisServerRepository {
         return this.mapper.insertOccuridPoliceLogTmp(fromDate, toDate);
     }
 
+    @SqlOperation(type = SqlOperation.SqlType.DELETE, table = "EVENTID_POLICE_LOG")
+    public int deleteEventidPoliceLog() {
+        return this.mapper.deleteEventidPoliceLog();
+    }
+    @SqlOperation(type = SqlOperation.SqlType.DELETE, table = "EVENTID_POLICE_LOG_TMP")
+    public int deleteEventidPoliceLogTmp() {
+        return this.mapper.deleteEventidPoliceLogTmp();
+    }
+    @SqlOperation(type = SqlOperation.SqlType.DELETE, table = "OCCURID_POLICE_LOG")
+    public int deleteOccuridPoliceLog() {
+        return this.mapper.deleteOccuridPoliceLog();
+    }
+    @SqlOperation(type = SqlOperation.SqlType.DELETE, table = "OCCURID_POLICE_LOG_TMP")
+    public int deleteOccuridPoliceLogTmp() {
+        return this.mapper.deleteOccuridPoliceLogTmp();
+    }
+
 }

+ 0 - 33
utic-ptis-server/src/main/java/com/utic/center/utic/ptis/server/scheduler/ApplicationScheduler.java

@@ -1,33 +0,0 @@
-package com.utic.center.utic.ptis.server.scheduler;
-
-import com.utic.center.utic.ptis.server.repository.ApplicationRepository;
-import com.utic.center.utic.ptis.server.service.ProcessStateService;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-@Slf4j
-@RequiredArgsConstructor
-@EnableScheduling
-@Component
-public class ApplicationScheduler {
-
-    private final ProcessStateService processStateService;
-    private final ApplicationRepository applicationRepository;
-
-    // 초(0-59) 분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-6) (0: 일, 1: 월, 2:화, 3:수, 4:목, 5:금, 6:토)
-
-    @Async("scheduleExecutor")
-    @Scheduled(cron = "5 * * * * *")
-    public void updateProcessState() {
-        try {
-            this.processStateService.processRunning();
-        } catch(Exception e) {
-            log.error("ApplicationScheduler.updateProcessState: Exception {}", e.getMessage());
-        }
-    }
-
-}

+ 9 - 0
utic-ptis-server/src/main/java/com/utic/center/utic/ptis/server/scheduler/UticPtisServerScheduler.java

@@ -2,6 +2,7 @@ package com.utic.center.utic.ptis.server.scheduler;
 
 import com.utic.center.utic.ptis.server.config.ApplicationConfig;
 import com.utic.center.utic.ptis.server.controller.UticPtisServerController;
+import com.utic.center.utic.ptis.server.service.ProcessStateService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Async;
@@ -17,6 +18,7 @@ public class UticPtisServerScheduler {
 
     private final ApplicationConfig config;
     private final UticPtisServerController controller;
+    private final ProcessStateService processStateService;
 
     @Async("scheduleExecutor")
 //    @Scheduled(cron = "0 0/5 * * * *")
@@ -26,6 +28,13 @@ public class UticPtisServerScheduler {
     public void scheduleProcess() {
         if (this.config.isStartSchedule()) {
             this.controller.run();
+
+            try {
+                // 프로세스 상태정보 업데이트
+                this.processStateService.processRunning();
+            } catch(Exception e) {
+                log.error("ApplicationScheduler.updateProcessState: Exception {}", e.getMessage());
+            }
         }
     }
 

+ 111 - 62
utic-ptis-server/src/main/java/com/utic/center/utic/ptis/server/service/UticPtisServerService.java

@@ -26,6 +26,9 @@ public class UticPtisServerService implements AbstractProcessService {
     private final String INCD_ID = "IF_POL_MPSS_001";
     private final String EVNT_ID = "IF_POL_MPSS_002";
     private final String TRAF_ID = "IF_POL_MPSS_003";
+    private final String INCD_INFO = "돌발정보";
+    private final String EVNT_INFO = "통제정보";
+    private final String TRAF_INFO = "소통정보";
     private final String agency = "도로교통공단";
     private final String period = "5분";
     private final ApplicationRepository applicationRepository;
@@ -34,9 +37,9 @@ public class UticPtisServerService implements AbstractProcessService {
     void destroy() {
         log.info("UticPtisServerService.destroy: start.");
         // 프로그램 종료시 통계정보를 최종적으로 저장(내일 날짜로 저장됨)
-        this.repo.mergeIndigoStats(this.INCD_ID, this.agency, "돌발정보", this.period, String.valueOf(ApplicationRepository.indigoStats.getIncdCnt()));
-        this.repo.mergeIndigoStats(this.EVNT_ID, this.agency, "통제정보", this.period, String.valueOf(ApplicationRepository.indigoStats.getEvntCnt()));
-        this.repo.mergeIndigoStats(this.TRAF_ID, this.agency, "소통정보", this.period, String.valueOf(ApplicationRepository.indigoStats.getTrafCnt()));
+//        this.repo.mergeIndigoStats(this.INCD_ID, this.agency, this.INCD_INFO, this.period, String.valueOf(ApplicationRepository.indigoStats.getIncdCnt()));
+//        this.repo.mergeIndigoStats(this.EVNT_ID, this.agency, this.EVNT_INFO, this.period, String.valueOf(ApplicationRepository.indigoStats.getEvntCnt()));
+//        this.repo.mergeIndigoStats(this.TRAF_ID, this.agency, this.TRAF_INFO, this.period, String.valueOf(ApplicationRepository.indigoStats.getTrafCnt()));
 
         log.info("UticPtisServerService.destroy: end.");
     }
@@ -65,26 +68,6 @@ public class UticPtisServerService implements AbstractProcessService {
             }
             ApplicationRepository.lastRegDate.setIncdDt(result);
             log.info("[INIT....] {}: Last registration date. {}", LogUtils.elapsedLog("LAST_REG_DATE"), ApplicationRepository.lastRegDate);
-
-            // 초기화시 indigoStats 통계정보를 데이터베이스에서 조회하여 조치과 시킨다.(내일 날짜로 조회한다)
-            List<IndigoStatsDataDto> indigoStats = this.repo.findAllIndigoStats();
-            if (indigoStats != null) {
-                for (IndigoStatsDataDto stats : indigoStats) {
-                    switch (stats.getIfId()) {
-                        case INCD_ID:
-                            ApplicationRepository.indigoStats.setIncdCnt(stats.getCountSnd());
-                            break;
-                        case EVNT_ID:
-                            ApplicationRepository.indigoStats.setEvntCnt(stats.getCountSnd());
-                            break;
-                        case TRAF_ID:
-                            ApplicationRepository.indigoStats.setTrafCnt(stats.getCountSnd());
-                            break;
-                        default:
-                            log.warn("[INIT....] {}: Unknown IF_ID: {}", LogUtils.elapsedLog("initialize.findAllIndigoStats"), stats.getIfId());
-                    }
-                }
-            }
             return true;
         } catch (Exception e) {
             log.error("[INIT....] {}: Exception: {}", LogUtils.elapsedLog("initialize.findLastRegDate"), e.getMessage());
@@ -97,18 +80,49 @@ public class UticPtisServerService implements AbstractProcessService {
         return 0;
     }
 
-    @ProcessingElapsed(type="01DAY", name="1-Day Processing")
-    public void processDay() {
-        // 일작업 수행, 프로그램 최초 기동할때 첫번째 가공은 항상 일작업을 처리하게 됨.
-        log.info("[01DAY...] {}: Traf: {}, Event: {}, Incident: {}.", LogUtils.elapsedLog("Day Statistics"),
-                ApplicationRepository.indigoStats.getTrafCnt(), ApplicationRepository.indigoStats.getEvntCnt(), ApplicationRepository.indigoStats.getIncdCnt());
+    @ProcessingElapsed(type="05MIN", name="INDIGO Processing(SEL)")
+    public void initIndigoStats() {
+
+        // 작업 시작시 indigoStats 통계정보를 데이터베이스에서 조회하여 이전 정보를 읽어온다.(내일 날짜로 조회한다)
+        ApplicationRepository.indigoStats.reset(); // 통계정보 초기화
+        List<IndigoStatsDataDto> indigoStats = this.repo.findAllIndigoStats();
+        if (indigoStats != null) {
+            for (IndigoStatsDataDto stats : indigoStats) {
+                switch (stats.getIfId()) {
+                    case INCD_ID:
+                        ApplicationRepository.indigoStats.setIncdCnt(stats.getCountSnd());
+                        break;
+                    case EVNT_ID:
+                        ApplicationRepository.indigoStats.setEvntCnt(stats.getCountSnd());
+                        break;
+                    case TRAF_ID:
+                        ApplicationRepository.indigoStats.setTrafCnt(stats.getCountSnd());
+                        break;
+                    default:
+                        log.warn("[INIT....] {}: Unknown IF_ID: {}", LogUtils.elapsedLog("initialize.findAllIndigoStats"), stats.getIfId());
+                }
+            }
+        }
+        printIndigoStats();
+    }
 
+    private void printIndigoStats() {
+        log.info("[05MIN...] {}: TRAF: {}, EVNT: {}, INCD: {}",
+                LogUtils.elapsedLog("INDIGO_STATUS"),
+                ApplicationRepository.indigoStats.getTrafCnt(),
+                ApplicationRepository.indigoStats.getEvntCnt(),
+                ApplicationRepository.indigoStats.getIncdCnt());
+    }
+    @ProcessingElapsed(type="05MIN", name="INDIGO Processing(INS)")
+    public void insIndigoStats() {
+        // 통계정보를 매 작업주기마다 업데이트 하고 작업전에 조회해서 처리하도록 수정함.
         try {
-            this.repo.insertIndigoStats(this.INCD_ID, this.agency, "돌발정보", this.period, String.valueOf(ApplicationRepository.indigoStats.getIncdCnt()));
-            this.repo.insertIndigoStats(this.EVNT_ID, this.agency, "통제정보", this.period, String.valueOf(ApplicationRepository.indigoStats.getEvntCnt()));
-            this.repo.insertIndigoStats(this.TRAF_ID, this.agency, "소통정보", this.period, String.valueOf(ApplicationRepository.indigoStats.getTrafCnt()));
+            this.repo.insertIndigoStats(this.INCD_ID, this.agency, this.INCD_INFO, this.period, String.valueOf(ApplicationRepository.indigoStats.getIncdCnt()));
+            this.repo.insertIndigoStats(this.EVNT_ID, this.agency, this.EVNT_INFO, this.period, String.valueOf(ApplicationRepository.indigoStats.getEvntCnt()));
+            this.repo.insertIndigoStats(this.TRAF_ID, this.agency, this.TRAF_INFO, this.period, String.valueOf(ApplicationRepository.indigoStats.getTrafCnt()));
+            printIndigoStats();
         } catch (Exception e) {
-            log.error("[01DAY...] {}: Exception: {}", LogUtils.elapsedLog("insertIndigoStats"), e.getMessage());
+            log.error("[05MIN...] {}: Exception: {}", LogUtils.elapsedLog("insertIndigoStats"), e.getMessage());
         }
         ApplicationRepository.indigoStats.reset(); // 일작업 후 통계정보 초기화
    }
@@ -131,18 +145,18 @@ public class UticPtisServerService implements AbstractProcessService {
             log.warn("[05MIN...] {}: No new traf data to process.", LogUtils.elapsedLog(trafTable));
         }
 
-//        // 교통정보 이관
-//        result = this.repo.insertCurlinkstPoliceLog();
-//        if (result < 0) {
-//            log.error("[05MIN...] {}: Failed to insert traffic data.", LogUtils.elapsedLog("CURLINKST_POLICE_LOG"));
-//            return; // 교통정보 이관 실패
-//        }
-//
+        // 교통정보 이관
+        result = this.repo.insertCurlinkstPoliceLog();
+        if (result < 0) {
+            log.error("[05MIN...] {}: Failed to insert traffic data.", LogUtils.elapsedLog("CURLINKST_POLICE_LOG"));
+            return; // 교통정보 이관 실패
+        }
+
         ApplicationRepository.lastRegDate.setTrafDt(regDate); // 교통정보 최종시각 갱신
         ApplicationRepository.indigoStats.setTrafCnt(result + ApplicationRepository.indigoStats.getTrafCnt());
         log.info("[05MIN...] {}: {} EA.", LogUtils.elapsedLog("Total Traffic"), ApplicationRepository.indigoStats.getTrafCnt());
 
-//        // 임시 교통정보테이블 삭제
+//        // 임시 교통정보테이블 삭제(사용안함)
 //        result = this.repo.deleteRcvLinkTrafficTmp();
 //        if (result < 0) {
 //            log.error("[05MIN...] {}: Failed to delete temporary traffic data.", LogUtils.elapsedLog("RCV_LINK_TRAFFIC_TMP"));
@@ -175,22 +189,22 @@ public class UticPtisServerService implements AbstractProcessService {
             return; // 새로운 통제정보가 없음
         }
 
-//        // 통제정보 이관
-//        result = this.repo.insertEventidPoliceLog(fromDate, regDate);
-//        if (result < 0) {
-//            log.error("[05MIN...] {}: Failed to insert event data.", LogUtils.elapsedLog("EVENTID_POLICE_LOG"));
-//            return; // 통제정보 이관 실패
-//        }
+        // 통제정보 이관
+        result = this.repo.insertEventidPoliceLog(fromDate, regDate);
+        if (result < 0) {
+            log.error("[05MIN...] {}: Failed to insert event data.", LogUtils.elapsedLog("EVENTID_POLICE_LOG"));
+            return; // 통제정보 이관 실패
+        }
 
         ApplicationRepository.lastRegDate.setEvntDt(regDate); // 통제정보 최종시각 갱신
         ApplicationRepository.indigoStats.setEvntCnt(result + ApplicationRepository.indigoStats.getEvntCnt());
         log.info("[05MIN...] {}: {} EA.", LogUtils.elapsedLog("Total Event"), ApplicationRepository.indigoStats.getEvntCnt());
 
-//        // 임시 통제정보테이블에 데이터 이관
-//        result = this.repo.insertEventidPoliceLogTmp(fromDate, regDate);
-//        if (result < 0) {
-//            log.error("[05MIN...] {}: Failed to insert temporary event data.", LogUtils.elapsedLog("EVENTID_POLICE_LOG_TMP"));
-//        }
+        // 임시 통제정보테이블에 데이터 이관
+        result = this.repo.insertEventidPoliceLogTmp(fromDate, regDate);
+        if (result < 0) {
+            log.error("[05MIN...] {}: Failed to insert temporary event data.", LogUtils.elapsedLog("EVENTID_POLICE_LOG_TMP"));
+        }
     }
 
     @ProcessingElapsed(type="05MIN", name="INCIDENT Processing")
@@ -212,22 +226,57 @@ public class UticPtisServerService implements AbstractProcessService {
             return; // 새로운 돌발정보가 없음
         }
 
-//        // 돌발정보 이관
-//        result = this.repo.insertOccuridPoliceLog(fromDate, regDate);
-//        if (result < 0) {
-//            log.error("[05MIN...] {}: Failed to insert incident data.", LogUtils.elapsedLog("OCCURID_POLICE_LOG"));
-//            return; // 돌발정보 이관 실패
-//        }
+        // 돌발정보 이관
+        result = this.repo.insertOccuridPoliceLog(fromDate, regDate);
+        if (result < 0) {
+            log.error("[05MIN...] {}: Failed to insert incident data.", LogUtils.elapsedLog("OCCURID_POLICE_LOG"));
+            return; // 돌발정보 이관 실패
+        }
 
         ApplicationRepository.lastRegDate.setIncdDt(regDate); // 돌발정보 최종시각 갱신
         ApplicationRepository.indigoStats.setIncdCnt(result + ApplicationRepository.indigoStats.getIncdCnt());
         log.info("[05MIN...] {}: {} EA.", LogUtils.elapsedLog("Total Incident"), ApplicationRepository.indigoStats.getIncdCnt());
 
-//        // 임시 돌발정보테이블에 데이터 이관
-//        result = this.repo.insertOccuridPoliceLogTmp(fromDate, regDate);
-//        if (result < 0) {
-//            log.error("[05MIN...] {}: Failed to insert temporary incident data.", LogUtils.elapsedLog("OCCURID_POLICE_LOG_TMP"));
-//        }
+        // 임시 돌발정보테이블에 데이터 이관
+        result = this.repo.insertOccuridPoliceLogTmp(fromDate, regDate);
+        if (result < 0) {
+            log.error("[05MIN...] {}: Failed to insert temporary incident data.", LogUtils.elapsedLog("OCCURID_POLICE_LOG_TMP"));
+        }
+    }
+
+    @ProcessingElapsed(type="05MIN", name="DELETE Processing")
+    public void jobDeleteTable() {
+        int result = 0;
+
+        result = this.repo.deleteRcvLinkTraffic();
+        if (result < 0) {
+            log.error("[05MIN...] {}: Failed to delete rcv traffic data.", LogUtils.elapsedLog("RCV_LINK_TRAFFIC"));
+            return; // 통제정보 이관 실패
+        }
+
+        // 통제정보 삭제
+        result = this.repo.deleteEventidPoliceLog();
+        if (result < 0) {
+            log.error("[05MIN...] {}: Failed to delete event data.", LogUtils.elapsedLog("EVENTID_POLICE_LOG"));
+            return; // 통제정보 이관 실패
+        }
+        // 임시 통제정보테이블 삭제
+        result = this.repo.deleteEventidPoliceLogTmp();
+        if (result < 0) {
+            log.error("[05MIN...] {}: Failed to delete temporary event data.", LogUtils.elapsedLog("EVENTID_POLICE_LOG_TMP"));
+        }
+
+        // 돌발정보 삭제
+        result = this.repo.deleteOccuridPoliceLog();
+        if (result < 0) {
+            log.error("[05MIN...] {}: Failed to delete incident data.", LogUtils.elapsedLog("OCCURID_POLICE_LOG"));
+            return; // 돌발정보 이관 실패
+        }
+        // 임시 돌발정보테이블 삭제
+        result = this.repo.deleteOccuridPoliceLogTmp();
+        if (result < 0) {
+            log.error("[05MIN...] {}: Failed to delete temporary incident data.", LogUtils.elapsedLog("OCCURID_POLICE_LOG_TMP"));
+        }
     }
 
 }

+ 1 - 1
utic-ptis-server/src/main/resources/logback-spring.xml

@@ -15,7 +15,7 @@
     <property name="LOG_FILE_NAME_ERROR"  value="${PROJECT_NAME}.err.log"/>
     <property name="LOG_FILE_NAME_BACKUP" value="%d{yyyyMMdd}_%i.log.gz"/>
 
-    <property name="MAX_FILESIZE" value="10MB"/>
+    <property name="MAX_FILESIZE" value="30MB"/>
     <property name="MAX_HISTORY"  value="10"/>
     <property name="LOG_PATTERN_FILE"        value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
     <property name="LOG_PATTERN_ERROR"       value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>

+ 33 - 4
utic-ptis-server/src/main/resources/mybatis/mapper/UticPtisServerMapper.xml

@@ -47,7 +47,7 @@
         <![CDATA[
         MERGE INTO INDIGO_STATS X
             USING (SELECT #{ifId}           AS IF_ID,
-                          TRUNC(SYSDATE)    AS INIT_DATE,
+                          TRUNC(SYSDATE+1)  AS INIT_DATE,
                           #{agency}         AS AGENCY,
                           #{info}           AS INFO,
                           #{period}         AS PERIOD,
@@ -125,6 +125,11 @@
         ]]>
     </insert>
 
+    <delete id="deleteRcvLinkTraffic">
+        <![CDATA[
+        DELETE FROM RCV_LINK_TRAFFIC WHERE LOGDATE < SYSDATE - 10/1440
+        ]]>
+    </delete>
 
     <select id="findOneMaxEventRegDate" resultType="java.lang.String">
         <![CDATA[
@@ -179,7 +184,6 @@
         ]]>
     </insert>
 
-
     <select id="findOneMaxIncdRegDate" resultType="java.lang.String">
         <![CDATA[
         SELECT MAX( TO_CHAR(REPORT_DATE,'YYYYMMDDHH24MISS') ) AS maxIncdRegDate
@@ -191,7 +195,7 @@
 
     <insert id="insertOccuridPoliceLog" parameterType="java.lang.String">
         <![CDATA[
-        INSERT INTO OCCURID_POLICE_LOG (REG_DATE, STD_LINK_ID, UPDATE_TIME, TYPE_DESC, TYPE_OTHER, STATUS, UPDATE_TYPE, STATUS_DESC, UPDATE_DESC)
+        INSERT /*+ APPEND */ INTO OCCURID_POLICE_LOG (REG_DATE, STD_LINK_ID, UPDATE_TIME, TYPE_DESC, TYPE_OTHER, STATUS, UPDATE_TYPE, STATUS_DESC, UPDATE_DESC)
         SELECT TO_CHAR(ST.REPORT_DATE,'YYYYMMDDHH24MISS')   AS REG_DATE,
                ST.LINK_ID                                   AS STD_LINK_ID,
                TO_CHAR(SYSDATE ,'YYYYMMDDHH24MISS')         AS UPDATE_TIME,
@@ -212,7 +216,7 @@
 
     <insert id="insertOccuridPoliceLogTmp" parameterType="java.lang.String">
         <![CDATA[
-        INSERT INTO OCCURID_POLICE_LOG_TMP (REG_DATE, STD_LINK_ID, UPDATE_TIME, TYPE_DESC, TYPE_OTHER, STATUS, UPDATE_TYPE, STATUS_DESC, UPDATE_DESC)
+        INSERT /*+ APPEND */ INTO OCCURID_POLICE_LOG_TMP (REG_DATE, STD_LINK_ID, UPDATE_TIME, TYPE_DESC, TYPE_OTHER, STATUS, UPDATE_TYPE, STATUS_DESC, UPDATE_DESC)
         SELECT TO_CHAR(ST.REPORT_DATE,'YYYYMMDDHH24MISS')   AS REG_DATE,
                ST.LINK_ID                                   AS STD_LINK_ID,
                TO_CHAR(SYSDATE ,'YYYYMMDDHH24MISS')         AS UPDATE_TIME,
@@ -231,4 +235,29 @@
         ]]>
     </insert>
 
+    <delete id="deleteEventidPoliceLog">
+        <![CDATA[
+        DELETE FROM EVENTID_POLICE_LOG WHERE REG_DATE < TO_CHAR(SYSDATE - 30, 'YYYYMMDDHH24MISS')
+        ]]>
+    </delete>
+
+    <delete id="deleteEventidPoliceLogTmp">
+        <![CDATA[
+        DELETE FROM EVENTID_POLICE_LOG_TMP WHERE REG_DATE < TO_CHAR(SYSDATE - 30, 'YYYYMMDDHH24MISS')
+        ]]>
+    </delete>
+
+    <delete id="deleteOccuridPoliceLog">
+        <![CDATA[
+        DELETE FROM OCCURID_POLICE_LOG WHERE REG_DATE < TO_CHAR(SYSDATE - 30, 'YYYYMMDDHH24MISS')
+        ]]>
+    </delete>
+
+    <delete id="deleteOccuridPoliceLogTmp">
+        <![CDATA[
+        DELETE FROM OCCURID_POLICE_LOG_TMP WHERE REG_DATE < TO_CHAR(SYSDATE - 30, 'YYYYMMDDHH24MISS')
+        ]]>
+    </delete>
+
+
 </mapper>