Browse Source

dbms stts update

shjung 3 years ago
parent
commit
7e7ca95391

+ 2 - 0
src/main/java/com/its/op/ItsOpServerApplication.java

@@ -96,6 +96,8 @@ public class ItsOpServerApplication extends SpringBootServletInitializer impleme
             vdsServerConfig.setIpAddress(vdsServer.getSystIp1().trim());
             vdsServerConfig.setPort(Integer.parseInt(vdsServer.getPrgmPort().trim()));
         }
+
+        processConfig.setStartSchedule(true);
     }
 
     @Override

+ 8 - 0
src/main/java/com/its/op/controller/its/common/CommonSttsController.java

@@ -3,6 +3,7 @@ package com.its.op.controller.its.common;
 import com.its.op.dto.its.common.FcltSttsListDto;
 import com.its.op.dto.its.common.SttsCommErrDto;
 import com.its.op.dto.its.database.TbDbSvrSttsDto;
+import com.its.op.dto.its.dbms.TbDbmsSttsDto;
 import com.its.op.dto.its.unit.TbUnitSystSttsDto;
 import com.its.op.service.its.cctv.TbCctvCtlrService;
 import com.its.op.service.its.common.CommonSttsService;
@@ -76,4 +77,11 @@ public class CommonSttsController {
         return this.dbSvrSttsService.findAll();
     }
 
+    // TODO
+    @ApiOperation(value = "DBMS STTS", response = TbDbSvrSttsDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/dbms-stts", produces = {"application/json; charset=utf8"})
+    public List<TbDbmsSttsDto> findAllDbmsSttsAll() {
+        return this.dbSvrSttsService.findAllDbmsStts();
+    }
+
 }

+ 15 - 0
src/main/java/com/its/op/dao/mapper/bis/BisDbmsSttsMapper.java

@@ -0,0 +1,15 @@
+package com.its.op.dao.mapper.bis;
+
+import com.its.op.dto.its.dbms.SessionSttsDto;
+import com.its.op.dto.its.dbms.TblSpaceSttsDto;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface BisDbmsSttsMapper {
+
+    List<SessionSttsDto> findSessionUsage();
+    List<TblSpaceSttsDto> findTblsUsage();
+
+}

+ 20 - 0
src/main/java/com/its/op/dao/mapper/its/dbms/DbmsSttsMapper.java

@@ -0,0 +1,20 @@
+package com.its.op.dao.mapper.its.dbms;
+
+import com.its.op.dto.its.dbms.SessionSttsDto;
+import com.its.op.dto.its.dbms.TbDbmsSttsDto;
+import com.its.op.dto.its.dbms.TbTbDbmsSttsDto;
+import com.its.op.dto.its.dbms.TblSpaceSttsDto;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface DbmsSttsMapper {
+
+    List<TbDbmsSttsDto> findAll();
+    List<SessionSttsDto> findSessionUsage();
+    List<TblSpaceSttsDto> findTblsUsage();
+    int updateDbmsStts(@Param("stts") TbTbDbmsSttsDto stts);
+
+}

+ 23 - 0
src/main/java/com/its/op/dto/its/dbms/SessionSttsDto.java

@@ -0,0 +1,23 @@
+package com.its.op.dto.its.dbms;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * DBMS 세션 사용 정보 DTO Class
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class SessionSttsDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private Integer INST_ID;
+    private Double USE_SESN;
+
+}

+ 46 - 0
src/main/java/com/its/op/dto/its/dbms/TbDbmsSttsDto.java

@@ -0,0 +1,46 @@
+package com.its.op.dto.its.dbms;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+/**
+ * DB 서버 상태 DTO Class
+ */
+@Data
+@ToString
+@Builder
+@ApiModel("TbDbSvrSttsDto(DB 서버 상태)")
+public class TbDbmsSttsDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("DB 서버 ID")  // N VARCHAR(30)
+    @JsonProperty("db_svr_id")
+    private String dbSvrId;
+
+    @ApiModelProperty("DB 서버 명")  // Y VARCHAR(50)
+    @JsonProperty("db_svr_nm")
+    private String dbSvrNm;
+
+    @ApiModelProperty("테이블스페이스 명")  // Y VARCHAR(50)
+    @JsonProperty("tbls_nm")
+    private String tblsNm;
+
+    @ApiModelProperty("테이블스페이스 잔여 용량")  // Y VARCHAR(30)
+    @JsonProperty("tbls_rmnd_cpct")
+    private String tblsRmndCpct;
+
+    @ApiModelProperty("사용 세션")  // Y VARCHAR(30)
+    @JsonProperty("use_sesn")
+    private String useSesn;
+
+    @ApiModelProperty("갱신 일시")  // Y VARCHAR(14)
+    @JsonProperty("updt_dt")
+    private String updtDt;
+
+}

+ 27 - 0
src/main/java/com/its/op/dto/its/dbms/TbTbDbmsSttsDto.java

@@ -0,0 +1,27 @@
+package com.its.op.dto.its.dbms;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * DBMS 정보 DTO Class
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class TbTbDbmsSttsDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String DBMS_ID;
+    private Integer INST_ID;
+    private String STTS_TYPE;
+    private String STTS_NAME;
+    private String STTS;
+    private String UPDT_DT;
+
+}

+ 23 - 0
src/main/java/com/its/op/dto/its/dbms/TblSpaceSttsDto.java

@@ -0,0 +1,23 @@
+package com.its.op.dto.its.dbms;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * DBMS 테이블 스페이스 정보 DTO Class
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class TblSpaceSttsDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String TBLS_NM;
+    private Double TBLS_REMAIN_STTS;
+
+}

+ 28 - 5
src/main/java/com/its/op/scheduler/ItsApiScheduler.java

@@ -1,6 +1,7 @@
 package com.its.op.scheduler;
 
 import com.its.op.config.JobConfig;
+import com.its.op.config.ProcessConfig;
 import com.its.op.scheduler.job.*;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -17,12 +18,14 @@ import javax.annotation.PreDestroy;
 @Component
 public class ItsApiScheduler {
 
+    private final ProcessConfig processConfig;
     private final JobConfig jobConfig;
     private final CctvPsetCtrlScnrJobThread cctvPsetScnrThread;
     private final FcltSttsJobThread fcltSttsJobThread;
     private final UnitSttsJobThread unitSttsJobThread;
     private final BaseDbmsJobThread baseDbmsJobThread;
-    private final DbSvrSttsJobThread dbSvrSttsJobThread;
+    private final DbmsSttsJobThread dbmsSttsJobThread;
+    //private final DbSvrSttsJobThread dbSvrSttsJobThread;
 
     @PreDestroy
     public void onShutDown() {
@@ -34,6 +37,10 @@ public class ItsApiScheduler {
     @Async
     @Scheduled(cron = "0 * * * * *")  // 1분 주기 작업 실행
     public void jobCctvPsetScnr() {
+        if (!this.processConfig.isStartSchedule()) {
+            return;
+        }
+
         if (this.jobConfig.isCctvPreset()) {
             this.cctvPsetScnrThread.run();
         }
@@ -45,7 +52,11 @@ public class ItsApiScheduler {
     @Async
     @Scheduled(cron = "5 * * * * *")  // 60초 주기 작업 실행
     public void pollingBaseDbms() {
-       if (this.jobConfig.isBaseDbms()) {
+        if (!this.processConfig.isStartSchedule()) {
+            return;
+        }
+
+        if (this.jobConfig.isBaseDbms()) {
            this.baseDbmsJobThread.run();
        }
     }
@@ -56,6 +67,10 @@ public class ItsApiScheduler {
     @Async
     @Scheduled(cron = "20 * * * * *")  // 60초 주기 작업 실행
     public void pollingUnitStts() {
+        if (!this.processConfig.isStartSchedule()) {
+            return;
+        }
+
         if (this.jobConfig.isUnitStts()) {
             this.unitSttsJobThread.run();
         }
@@ -67,6 +82,10 @@ public class ItsApiScheduler {
     @Async
     @Scheduled(cron = "25 * * * * *")  // 60초 주기 작업 실행
     public void pollingFcltStts() {
+        if (!this.processConfig.isStartSchedule()) {
+            return;
+        }
+
         if (this.jobConfig.isFcltStts()) {
             this.fcltSttsJobThread.run();
         }
@@ -76,11 +95,15 @@ public class ItsApiScheduler {
      * DB Server Stts Update
      */
     @Async
-    @Scheduled(cron = "40 0/10 * * * *")  // 5분 주기 작업 실행
+    @Scheduled(cron = "40 0/10 * * * *")  // 10분 주기 작업 실행
     public void jobDbSvrStts() {
-        if (this.jobConfig.isDbSvrStts()) {
-            this.dbSvrSttsJobThread.run();
+        if (!this.processConfig.isStartSchedule()) {
+            return;
         }
+        this.dbmsSttsJobThread.run();
+//        if (this.jobConfig.isDbSvrStts()) {
+//            this.dbSvrSttsJobThread.run();
+//        }
     }
 
     /*@Async

+ 1 - 2
src/main/java/com/its/op/scheduler/job/DbSvrSttsJobThread.java

@@ -7,7 +7,6 @@ import com.its.utils.ItsUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
 import org.springframework.util.StopWatch;
 
 import javax.annotation.PostConstruct;
@@ -18,7 +17,7 @@ import java.util.Properties;
 
 @Slf4j
 @AllArgsConstructor
-@Service
+//@Service
 public class DbSvrSttsJobThread {
 
     private final TbDbSvrSttsRepository dbSvrSttsRepo;

+ 134 - 0
src/main/java/com/its/op/scheduler/job/DbmsSttsJobThread.java

@@ -0,0 +1,134 @@
+package com.its.op.scheduler.job;
+
+import com.its.op.config.AppUtils;
+import com.its.op.dao.mapper.bis.BisDbmsSttsMapper;
+import com.its.op.dao.mapper.its.dbms.DbmsSttsMapper;
+import com.its.op.dto.its.dbms.SessionSttsDto;
+import com.its.op.dto.its.dbms.TbTbDbmsSttsDto;
+import com.its.op.dto.its.dbms.TblSpaceSttsDto;
+import com.its.utils.ItsUtils;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.env.Environment;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StopWatch;
+
+import javax.annotation.PostConstruct;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Slf4j
+@AllArgsConstructor
+@Service
+public class DbmsSttsJobThread {
+
+    private final Environment environment;
+    private final DbmsSttsMapper dbmsSttsMapper;
+
+    @PostConstruct
+    private void init() {
+        log.info("{}", this);
+    }
+
+    @Async("schJobExecutor")
+    public void run() {
+
+        log.info("START: DbmsSttsJobThread.run: {}", Thread.currentThread().getName());
+
+        StopWatch stopWatch = new StopWatch();
+        stopWatch.start();
+
+        //List<TbDbmsSttsDto> dbms = this.dbmsSttsMapper.findAll();
+        List<TbTbDbmsSttsDto> result = new ArrayList<>();
+//        private String DBMS_ID;
+//        private Integer INST_ID;
+//        private String STTS_TYPE;
+//        private String STTS_NAME;
+//        private String STTS;
+//        private String UPDT_DT;
+
+        String UPDT_DT = ItsUtils.getSysTime();
+
+        List<SessionSttsDto> session = this.dbmsSttsMapper.findSessionUsage();
+        session.forEach((obj) -> {
+            String STTS_NAME;
+            if (obj.getINST_ID() == 101) {
+                STTS_NAME = "ITS DB #1";
+            } else if (obj.getINST_ID() == 102) {
+                STTS_NAME = "ITS DB #2";
+            } else {
+                return;
+            }
+            TbTbDbmsSttsDto data = TbTbDbmsSttsDto.builder()
+                    .DBMS_ID("ITS")
+                    .INST_ID(obj.getINST_ID())
+                    .STTS_TYPE("SESSION")
+                    .STTS_NAME(STTS_NAME)
+                    .STTS(String.valueOf(obj.getUSE_SESN()))
+                    .UPDT_DT(UPDT_DT)
+                    .build();
+            result.add(data);
+        });
+
+        List<TblSpaceSttsDto> tbls = this.dbmsSttsMapper.findTblsUsage();
+        tbls.forEach((obj) -> {
+            TbTbDbmsSttsDto data = TbTbDbmsSttsDto.builder()
+                    .DBMS_ID("ITS")
+                    .INST_ID(101)
+                    .STTS_TYPE("SPACE")
+                    .STTS_NAME(obj.getTBLS_NM())
+                    .STTS(String.valueOf(obj.getTBLS_REMAIN_STTS()))
+                    .UPDT_DT(UPDT_DT)
+                    .build();
+            result.add(data);
+        });
+
+        boolean isRunBis = Arrays.asList(environment.getActiveProfiles()).contains("bis");
+        if (isRunBis) {
+            BisDbmsSttsMapper bisDbmsSttsMapper = (BisDbmsSttsMapper) AppUtils.getBean(BisDbmsSttsMapper.class);;
+            List<SessionSttsDto> bisSession = bisDbmsSttsMapper.findSessionUsage();
+            bisSession.forEach((obj) -> {
+                String STTS_NAME;
+                if (obj.getINST_ID() == 101) {
+                    STTS_NAME = "BIS DB #1";
+                } else if (obj.getINST_ID() == 102) {
+                    STTS_NAME = "BIS DB #2";
+                } else {
+                    return;
+                }
+                TbTbDbmsSttsDto data = TbTbDbmsSttsDto.builder()
+                        .DBMS_ID("BIS")
+                        .INST_ID(obj.getINST_ID())
+                        .STTS_TYPE("SESSION")
+                        .STTS_NAME(STTS_NAME)
+                        .STTS(String.valueOf(obj.getUSE_SESN()))
+                        .UPDT_DT(UPDT_DT)
+                        .build();
+                result.add(data);
+            });
+
+            List<TblSpaceSttsDto> bisTbls = bisDbmsSttsMapper.findTblsUsage();
+            bisTbls.forEach((obj) -> {
+                TbTbDbmsSttsDto data = TbTbDbmsSttsDto.builder()
+                        .DBMS_ID("BIS")
+                        .INST_ID(101)
+                        .STTS_TYPE("SPACE")
+                        .STTS_NAME(obj.getTBLS_NM())
+                        .STTS(String.valueOf(obj.getTBLS_REMAIN_STTS()))
+                        .UPDT_DT(UPDT_DT)
+                        .build();
+                result.add(data);
+            });
+        }
+
+        // 결과 저장
+        result.forEach((obj) -> {
+            this.dbmsSttsMapper.updateDbmsStts(obj);
+        });
+        stopWatch.stop();
+        log.info("--END: DbmsSttsJobThread.run: {}, {} ms.", Thread.currentThread().getName(), stopWatch.getTotalTimeMillis());
+    }
+
+}

+ 7 - 0
src/main/java/com/its/op/service/its/database/TbDbSvrSttsService.java

@@ -1,7 +1,9 @@
 package com.its.op.service.its.database;
 
+import com.its.op.dao.mapper.its.dbms.DbmsSttsMapper;
 import com.its.op.dao.repository.its.database.TbDbSvrSttsRepository;
 import com.its.op.dto.its.database.TbDbSvrSttsDto;
+import com.its.op.dto.its.dbms.TbDbmsSttsDto;
 import com.its.op.entity.its.database.TbDbSvrStts;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -17,6 +19,7 @@ import java.util.List;
 public class TbDbSvrSttsService {
 
     private final TbDbSvrSttsRepository repo;
+    private final DbmsSttsMapper mapper;
 
     // 전체 데이터 조회
     @Transactional(readOnly = true)
@@ -29,4 +32,8 @@ public class TbDbSvrSttsService {
         return result;
     }
 
+    public List<TbDbmsSttsDto> findAllDbmsStts() {
+        return this.mapper.findAll();
+    }
+
 }

+ 3 - 0
src/main/resources/application-dev.yml

@@ -11,6 +11,7 @@ spring:
       #jdbc-url: jdbc:tibero:thin:@192.168.20.99:8629:tibero
       username: ENC(07xt40GoahE=)
       password: ENC(07xt40GoahE=)
+      connection-test-query: SELECT 1 FROM DUAL
       minimumIdle: 5
       maximumIdle: 10
       maximumPoolSize: 20
@@ -29,6 +30,7 @@ spring:
       #jdbc-url: jdbc:tibero:thin:@192.168.20.99:8629:tibero
       username: ENC(SDpa2UMdPqw=)
       password: ENC(SDpa2UMdPqw=)
+      connection-test-query: SELECT 1 FROM DUAL
       minimumIdle: 3
       maximumIdle: 10
       maximumPoolSize: 20
@@ -47,6 +49,7 @@ spring:
       #jdbc-url: jdbc:tibero:thin:@192.168.20.99:8629:tibero
       username: ENC(07xt40GoahE=)
       password: ENC(07xt40GoahE=)
+      connection-test-query: SELECT 1 FROM DUAL
       minimumIdle: 3
       maximumIdle: 10
       maximumPoolSize: 20

+ 3 - 0
src/main/resources/application-prod.yml

@@ -11,6 +11,7 @@ spring:
       jdbc-url: jdbc:tibero:thin:@(DESCRIPTION=(FAILOVER=ON)(LOAD_BALANCE=ON)(ADDRESS_LIST=(ADDRESS=(HOST=172.16.11.52)(PORT=8800))(ADDRESS=(HOST=172.16.11.62)(PORT=8629)))(DATABASE_NAME=new_yiitsdb))
       username: ENC(07xt40GoahE=)
       password: ENC(07xt40GoahE=)
+      connection-test-query: SELECT 1 FROM DUAL
       minimumIdle: 5
       maximumIdle: 10
       maximumPoolSize: 20
@@ -28,6 +29,7 @@ spring:
       jdbc-url: jdbc:tibero:thin:@172.16.11.71:8629:rutis
       username: ENC(SDpa2UMdPqw=)
       password: ENC(SDpa2UMdPqw=)
+      connection-test-query: SELECT 1 FROM DUAL
       minimumIdle: 3
       maximumIdle: 10
       maximumPoolSize: 20
@@ -45,6 +47,7 @@ spring:
       jdbc-url: jdbc:tibero:thin:@(DESCRIPTION=(FAILOVER=ON)(LOAD_BALANCE=ON)(ADDRESS_LIST=(ADDRESS=(HOST=172.16.11.162)(PORT=8800))(ADDRESS=(HOST=172.16.11.152)(PORT=8629)))(DATABASE_NAME=yiitsdb))
       username: ENC(07xt40GoahE=)
       password: ENC(07xt40GoahE=)
+      connection-test-query: SELECT 1 FROM DUAL
       minimumIdle: 3
       maximumIdle: 10
       maximumPoolSize: 20

+ 3 - 3
src/main/resources/application.yml

@@ -65,14 +65,14 @@ spring:
   jpa:
     #database: Oracle
     open-in-view: false
-    show-sql: true
+    show-sql: false
     hibernate:
       ddl-auto: none
     properties:
       hibernate:
         default_batch_fetch_size: 1000
-        format_sql: true
-        use_sql_columns: true
+        format_sql: false
+        use_sql_columns: false
         hbm2ddl.auto: validate
         implicit_naming_strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
         physical_naming_strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

+ 23 - 0
src/main/resources/mybatis/mapper/bis/BisDbmsSttsMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.its.op.dao.mapper.bis.BisDbmsSttsMapper">
+
+    <select id="findSessionUsage" resultType="com.its.op.dto.its.dbms.SessionSttsDto">
+        SELECT INST_ID AS INST_ID, ROUND(COUNT(1) / 400 * 100, 1) AS USE_SESN FROM GV$SESSION GROUP BY INST_ID
+    </select>
+
+    <select id="findTblsUsage" resultType="com.its.op.dto.its.dbms.TblSpaceSttsDto">
+        SELECT A.TABLESPACE_NAME AS TBLS_NM,
+               100 - ROUND((A.TOTAL - NVL(B.FREE,0))*100/TOTAL,2) AS TBLS_REMAIN_STTS
+        FROM (SELECT X.TABLESPACE_NAME, ROUND((SUM(X.BYTES)/1024/1024),0) AS TOTAL
+              FROM DBA_DATA_FILES X
+              GROUP BY X.TABLESPACE_NAME) A,
+             (SELECT Y.TABLESPACE_NAME, ROUND((SUM(Y.BYTES)/1024/1024),0) AS FREE
+              FROM DBA_FREE_SPACE Y
+              GROUP BY Y.TABLESPACE_NAME) B
+        WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+)
+          AND A.TABLESPACE_NAME IN ('TS_BIS03_DAT' , 'TS_BIS03_IDX')
+    </select>
+
+</mapper>

+ 52 - 0
src/main/resources/mybatis/mapper/its/dbms/DbmsSttsMapper.xml

@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.its.op.dao.mapper.its.dbms.DbmsSttsMapper">
+
+    <select id="findAll" resultType="com.its.op.dto.its.dbms.TbDbmsSttsDto">
+        SELECT DBMS_ID AS dbSvrId, DBMS_NM AS dbSvrNm, TBLS_NM AS tblsNm, TBLS_RMND_CPCT AS tblsRmndCpct, USE_SESN AS useSesn, UPDT_DT AS updtDt
+        FROM TB_DBMS_STTS
+    </select>
+
+    <select id="findSessionUsage" resultType="com.its.op.dto.its.dbms.SessionSttsDto">
+        SELECT INST_ID AS INST_ID, ROUND(COUNT(1) / 200 * 100, 1) AS USE_SESN FROM GV$SESSION GROUP BY INST_ID
+    </select>
+
+    <select id="findTblsUsage" resultType="com.its.op.dto.its.dbms.TblSpaceSttsDto">
+        SELECT A.TABLESPACE_NAME AS TBLS_NM,
+               100 - ROUND((A.TOTAL - NVL(B.FREE,0))*100/TOTAL,2) AS TBLS_REMAIN_STTS
+        FROM (SELECT X.TABLESPACE_NAME, ROUND((SUM(X.BYTES)/1024/1024),0) AS TOTAL
+              FROM DBA_DATA_FILES X
+              GROUP BY X.TABLESPACE_NAME) A,
+             (SELECT Y.TABLESPACE_NAME, ROUND((SUM(Y.BYTES)/1024/1024),0) AS FREE
+              FROM DBA_FREE_SPACE Y
+              GROUP BY Y.TABLESPACE_NAME) B
+        WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+)
+          AND A.TABLESPACE_NAME IN ('ITS_HIST_DATA' , 'ITS_HIST_INDX')
+    </select>
+
+    <update id="updateDbmsStts" parameterType="com.its.op.dto.its.dbms.TbTbDbmsSttsDto">
+    MERGE INTO TB_DBMS_STTS L
+    USING (SELECT
+               #{stts.DBMS_ID}   AS DBMS_ID,
+               #{stts.INST_ID}   AS INST_ID,
+               #{stts.STTS_TYPE} AS STTS_TYPE,
+               #{stts.STTS_NAME} AS STTS_NAME,
+               #{stts.STTS}      AS STTS,
+               #{stts.UPDT_DT}   AS UPDT_DT
+           FROM DUAL) M
+       ON (L.DBMS_ID   = M.DBMS_ID
+       AND L.INST_ID   = M.INST_ID
+       AND L.STTS_TYPE = M.STTS_TYPE
+       AND L.STTS_NAME = M.STTS_NAME
+           )
+    WHEN MATCHED THEN
+        UPDATE SET
+                   L.STTS    = M.STTS,
+                   L.UPDT_DT = M.UPDT_DT
+    WHEN NOT MATCHED THEN
+        INSERT (  DBMS_ID,   INST_ID,   STTS_TYPE,   STTS_NAME,   STTS,   UPDT_DT )
+        VALUES (M.DBMS_ID, M.INST_ID, M.STTS_TYPE, M.STTS_NAME, M.STTS, M.UPDT_DT )
+</update>
+
+</mapper>