DATOR


데이터마이그-실전 AS-IS 모델 리버스 하기 -2

 이제 아래와 같은 경우에 리버스를 효과적으로 하는 방법에 대해서 설명 하도록 하겠습니다.

인하우스 시스템이고 각 테이블에 대한 설명 및 SM에서 전혀 프로그램 문서관리가 안되어 있는 경우
이런 경우가 주로 급변하게 변화하는 비즈니스 환경에서 자주 발생하는 유형입니다.
예를 들면 쇼핑물 사이트가 이런 경우가 많습니다.

 

현업은 빠르게 반영 되기를 원하고 SM은 프로그램 변경에 대한 문서를 관리할 여유가 없다보니
마구 잡이 방식으로 테이블 무한 복제 및 프로그램 복제 ...
이렇게 몇년 관리 하다 보면 해당 테이블이 사용하는지 안사용하는지 테이블의 용도가 무엇인지..
프로그램을 자세하게 다 보지 않는 이상 절대 알수가 없습니다.

 

이런 시스템에 투입되어 AS-IS 리버스를 해야 하는 경우 DA입장에서는 난처 하기 짝이 없습니다.

그렇다고 그냥 개발팀에서 줄때까지도 기달릴수도 없는 입장입니다.

자 어떻게 해야 할까요? 어떻게 준비해야 프로답다는 말을 들을수 있을까요?

 

현제의 문제점)

1.우선 개발팀에서 테이블 리스트를 줄수가 없다.기다릴수도 없다.
2.보통 사용하는 DB USER을 알려 줄것이다.
3.해당 DB USER의 테이블을 COUNT해보면 수천개가 넘는다.
  이거 다 분석 하면 몇년이 지나도 리버스를 할수가 없다.
 
DA의 기준)
1.현재 부여 받은 테이블에서 사용이 불가능한 테이블 대상을 뽑는다.(예를 들면 대상이 3,000개 테이블 이라고 가정)
불가능한 대상을 뽑는 방법은 아래와 같다.

2.현실적으로 OLPT에서 업무적으로 사용하는 주요테이블은 절대 500개가 넘을수는 없다.
2.3000개 테이블의 전체 COUNT수,그리고 날짜 컬럼을 가지고 있는 컬럼의 MIN,MAX값,그리고 해당 테이블의 컬럼수의 정보를 취한다.

(이부분이 핵심임)

 

샘플 SCRIPT)

SELECT 'INSERT /*+ APPEND */ INTO EN_STORE_TABLE_DT_CNT_0718'||CHR(10)
       ||' (TABLE_NAME,REG_DTM '||CHR(10)
       ||CASE WHEN DATE_1 IS NOT NULL THEN   ',MIN_DATE_1'||CHR(10) END
       ||CASE WHEN DATE_1 IS NOT NULL THEN   ',MAX_DATE_1'||CHR(10) END
       ||CASE WHEN DATE_2 IS NOT NULL THEN   ',MIN_DATE_2'||CHR(10) END
       ||CASE WHEN DATE_2 IS NOT NULL THEN   ',MAX_DATE_2'||CHR(10) END
       ||CASE WHEN DATE_3 IS NOT NULL THEN   ',MIN_DATE_3'||CHR(10) END
       ||CASE WHEN DATE_3 IS NOT NULL THEN   ',MAX_DATE_3'||CHR(10) END
       ||CASE WHEN DATE_4 IS NOT NULL THEN   ',MIN_DATE_4'||CHR(10) END
       ||CASE WHEN DATE_4 IS NOT NULL THEN   ',MAX_DATE_4'||CHR(10) END
       ||CASE WHEN DATE_5 IS NOT NULL THEN   ',MIN_DATE_5'||CHR(10) END
       ||CASE WHEN DATE_5 IS NOT NULL THEN   ',MAX_DATE_5'||CHR(10) END
       ||CASE WHEN DATE_6 IS NOT NULL THEN   ',MIN_DATE_6'||CHR(10) END
       ||CASE WHEN DATE_6 IS NOT NULL THEN   ',MAX_DATE_6'||CHR(10) END
       ||CASE WHEN DATE_7 IS NOT NULL THEN   ',MIN_DATE_7'||CHR(10) END
       ||CASE WHEN DATE_7 IS NOT NULL THEN   ',MAX_DATE_7'||CHR(10) END
       ||CASE WHEN DATE_8 IS NOT NULL THEN   ',MIN_DATE_8'||CHR(10) END
       ||CASE WHEN DATE_8 IS NOT NULL THEN   ',MAX_DATE_8'||CHR(10) END
       ||CASE WHEN DATE_9 IS NOT NULL THEN   ',MIN_DATE_9'||CHR(10) END
       ||CASE WHEN DATE_9 IS NOT NULL THEN   ',MAX_DATE_9'||CHR(10) END
       ||CASE WHEN DATE_10 IS NOT NULL THEN  ',MIN_DATE_10'||CHR(10) END
       ||CASE WHEN DATE_10 IS NOT NULL THEN  ',MAX_DATE_10'||CHR(10) END
       ||CASE WHEN DATE_11 IS NOT NULL THEN  ',MIN_DATE_11'||CHR(10) END
       ||CASE WHEN DATE_11 IS NOT NULL THEN  ',MAX_DATE_11'||CHR(10) END
       ||CASE WHEN DATE_12 IS NOT NULL THEN  ',MIN_DATE_12'||CHR(10) END
       ||CASE WHEN DATE_12 IS NOT NULL THEN  ',MAX_DATE_12'||CHR(10) END
       ||CASE WHEN DATE_13 IS NOT NULL THEN  ',MIN_DATE_13'||CHR(10) END
       ||CASE WHEN DATE_13 IS NOT NULL THEN  ',MAX_DATE_13'||CHR(10) END
       ||CASE WHEN DATE_14 IS NOT NULL THEN  ',MIN_DATE_14'||CHR(10) END
       ||CASE WHEN DATE_14 IS NOT NULL THEN  ',MAX_DATE_14'||CHR(10) END
       ||CASE WHEN DATE_15 IS NOT NULL THEN  ',MIN_DATE_15'||CHR(10) END
       ||CASE WHEN DATE_15 IS NOT NULL THEN  ',MAX_DATE_15'||CHR(10) END
       ||CASE WHEN DATE_16 IS NOT NULL THEN  ',MIN_DATE_16'||CHR(10) END
       ||CASE WHEN DATE_16 IS NOT NULL THEN  ',MAX_DATE_16'||CHR(10) END
       ||CASE WHEN DATE_17 IS NOT NULL THEN  ',MIN_DATE_17'||CHR(10) END
       ||CASE WHEN DATE_17 IS NOT NULL THEN  ',MAX_DATE_17'||CHR(10) END
       ||CASE WHEN DATE_18 IS NOT NULL THEN  ',MIN_DATE_18'||CHR(10) END
       ||CASE WHEN DATE_18 IS NOT NULL THEN  ',MAX_DATE_18'||CHR(10) END
       ||CASE WHEN DATE_19 IS NOT NULL THEN  ',MIN_DATE_19'||CHR(10) END
       ||CASE WHEN DATE_19 IS NOT NULL THEN  ',MAX_DATE_19'||CHR(10) END
       ||CASE WHEN DATE_20 IS NOT NULL THEN  ',MIN_DATE_20'||CHR(10) END
       ||CASE WHEN DATE_20 IS NOT NULL THEN  ',MAX_DATE_20'||CHR(10) END
       ||CASE WHEN DATE_21 IS NOT NULL THEN  ',MIN_DATE_21'||CHR(10) END
       ||CASE WHEN DATE_21 IS NOT NULL THEN  ',MAX_DATE_21'||CHR(10) END
       ||CASE WHEN DATE_22 IS NOT NULL THEN  ',MIN_DATE_22'||CHR(10) END
       ||CASE WHEN DATE_22 IS NOT NULL THEN  ',MAX_DATE_22'||CHR(10) END
       ||CASE WHEN DATE_23 IS NOT NULL THEN  ',MIN_DATE_23'||CHR(10) END
       ||CASE WHEN DATE_23 IS NOT NULL THEN  ',MAX_DATE_23'||CHR(10) END
       ||CASE WHEN DATE_24 IS NOT NULL THEN  ',MIN_DATE_24'||CHR(10) END
       ||CASE WHEN DATE_24 IS NOT NULL THEN  ',MAX_DATE_24'||CHR(10) END
       ||CASE WHEN DATE_25 IS NOT NULL THEN  ',MIN_DATE_25'||CHR(10) END
       ||CASE WHEN DATE_25 IS NOT NULL THEN  ',MAX_DATE_25'||CHR(10) END
       ||CASE WHEN DATE_26 IS NOT NULL THEN  ',MIN_DATE_26'||CHR(10) END
       ||CASE WHEN DATE_26 IS NOT NULL THEN  ',MAX_DATE_26'||CHR(10) END
       ||CASE WHEN DATE_27 IS NOT NULL THEN  ',MIN_DATE_27'||CHR(10) END
       ||CASE WHEN DATE_27 IS NOT NULL THEN  ',MAX_DATE_27'||CHR(10) END
       ||CASE WHEN DATE_28 IS NOT NULL THEN  ',MIN_DATE_28'||CHR(10) END
       ||CASE WHEN DATE_28 IS NOT NULL THEN  ',MAX_DATE_28'||CHR(10) END
       ||CASE WHEN DATE_29 IS NOT NULL THEN  ',MIN_DATE_29'||CHR(10) END
       ||CASE WHEN DATE_29 IS NOT NULL THEN  ',MAX_DATE_29'||CHR(10) END
       ||CASE WHEN DATE_30 IS NOT NULL THEN  ',MIN_DATE_30'||CHR(10) END
       ||CASE WHEN DATE_30 IS NOT NULL THEN  ',MAX_DATE_30'||CHR(10) END
       ||CASE WHEN DATE_31 IS NOT NULL THEN  ',MIN_DATE_31'||CHR(10) END
       ||CASE WHEN DATE_31 IS NOT NULL THEN  ',MAX_DATE_31'||CHR(10) END
       ||CASE WHEN DATE_32 IS NOT NULL THEN  ',MIN_DATE_32'||CHR(10) END
       ||CASE WHEN DATE_32 IS NOT NULL THEN  ',MAX_DATE_32'||CHR(10) END
       ||CASE WHEN DATE_33 IS NOT NULL THEN  ',MIN_DATE_33'||CHR(10) END
       ||CASE WHEN DATE_33 IS NOT NULL THEN  ',MAX_DATE_33'||CHR(10) END
       ||CASE WHEN DATE_34 IS NOT NULL THEN  ',MIN_DATE_34'||CHR(10) END
       ||CASE WHEN DATE_34 IS NOT NULL THEN  ',MAX_DATE_34'||CHR(10) END
       ||CASE WHEN DATE_35 IS NOT NULL THEN  ',MIN_DATE_35'||CHR(10) END
       ||CASE WHEN DATE_35 IS NOT NULL THEN  ',MAX_DATE_35'||CHR(10) END
       ||CASE WHEN DATE_36 IS NOT NULL THEN  ',MIN_DATE_36'||CHR(10) END
       ||CASE WHEN DATE_36 IS NOT NULL THEN  ',MAX_DATE_36'||CHR(10) END
       ||' )'||CHR(10)
       ||' SELECT  /*+ FULL(A) PARALLEL(A 8) */ '||CHR(10)
       ||' '''||TABLE_NAME||''', SYSDATE '||CHR(10)
       ||CASE WHEN DATE_1 IS NOT NULL THEN ',MIN('||DATE_1||') AS MIN_'||DATE_1||CHR(10) END
       ||CASE WHEN DATE_1 IS NOT NULL THEN ',MAX('||DATE_1||') AS MAX_'||DATE_1||CHR(10) END
       ||CASE WHEN DATE_2 IS NOT NULL THEN ',MIN('||DATE_2||') AS MIN_'||DATE_2||CHR(10) END
       ||CASE WHEN DATE_2 IS NOT NULL THEN ',MAX('||DATE_2||') AS MAX_'||DATE_2||CHR(10) END
       ||CASE WHEN DATE_3 IS NOT NULL THEN ',MIN('||DATE_3||') AS MIN_'||DATE_3||CHR(10) END
       ||CASE WHEN DATE_3 IS NOT NULL THEN ',MAX('||DATE_3||') AS MAX_'||DATE_3||CHR(10) END
       ||CASE WHEN DATE_4 IS NOT NULL THEN ',MIN('||DATE_4||') AS MIN_'||DATE_4||CHR(10) END
       ||CASE WHEN DATE_4 IS NOT NULL THEN ',MAX('||DATE_4||') AS MAX_'||DATE_4||CHR(10) END
       ||CASE WHEN DATE_5 IS NOT NULL THEN ',MIN('||DATE_5||') AS MIN_'||DATE_5||CHR(10) END
       ||CASE WHEN DATE_5 IS NOT NULL THEN ',MAX('||DATE_5||') AS MAX_'||DATE_5||CHR(10) END
       ||CASE WHEN DATE_6 IS NOT NULL THEN ',MIN('||DATE_6||') AS MIN_'||DATE_6||CHR(10) END
       ||CASE WHEN DATE_6 IS NOT NULL THEN ',MAX('||DATE_6||') AS MAX_'||DATE_6||CHR(10) END
       ||CASE WHEN DATE_7 IS NOT NULL THEN ',MIN('||DATE_7||') AS MIN_'||DATE_7||CHR(10) END
       ||CASE WHEN DATE_7 IS NOT NULL THEN ',MAX('||DATE_7||') AS MAX_'||DATE_7||CHR(10) END
       ||CASE WHEN DATE_8 IS NOT NULL THEN ',MIN('||DATE_8||') AS MIN_'||DATE_8||CHR(10) END
       ||CASE WHEN DATE_8 IS NOT NULL THEN ',MAX('||DATE_8||') AS MAX_'||DATE_8||CHR(10) END
       ||CASE WHEN DATE_9 IS NOT NULL THEN ',MIN('||DATE_9||') AS MIN_'||DATE_9||CHR(10) END
       ||CASE WHEN DATE_9 IS NOT NULL THEN ',MAX('||DATE_9||') AS MAX_'||DATE_9||CHR(10) END
       ||CASE WHEN DATE_10 IS NOT NULL THEN ',MIN('||DATE_10||') AS MIN_'||DATE_10||CHR(10) END
       ||CASE WHEN DATE_10 IS NOT NULL THEN ',MAX('||DATE_10||') AS MAX_'||DATE_10||CHR(10) END
       ||CASE WHEN DATE_11 IS NOT NULL THEN ',MIN('||DATE_11||') AS MIN_'||DATE_11||CHR(10) END
       ||CASE WHEN DATE_11 IS NOT NULL THEN ',MAX('||DATE_11||') AS MAX_'||DATE_11||CHR(10) END
       ||CASE WHEN DATE_12 IS NOT NULL THEN ',MIN('||DATE_12||') AS MIN_'||DATE_12||CHR(10) END
       ||CASE WHEN DATE_12 IS NOT NULL THEN ',MAX('||DATE_12||') AS MAX_'||DATE_12||CHR(10) END
       ||CASE WHEN DATE_13 IS NOT NULL THEN ',MIN('||DATE_13||') AS MIN_'||DATE_13||CHR(10) END
       ||CASE WHEN DATE_13 IS NOT NULL THEN ',MAX('||DATE_13||') AS MAX_'||DATE_13||CHR(10) END
       ||CASE WHEN DATE_14 IS NOT NULL THEN ',MIN('||DATE_14||') AS MIN_'||DATE_14||CHR(10) END
       ||CASE WHEN DATE_14 IS NOT NULL THEN ',MAX('||DATE_14||') AS MAX_'||DATE_14||CHR(10) END
       ||CASE WHEN DATE_15 IS NOT NULL THEN ',MIN('||DATE_15||') AS MIN_'||DATE_15||CHR(10) END
       ||CASE WHEN DATE_15 IS NOT NULL THEN ',MAX('||DATE_15||') AS MAX_'||DATE_15||CHR(10) END
       ||CASE WHEN DATE_16 IS NOT NULL THEN ',MIN('||DATE_16||') AS MIN_'||DATE_16||CHR(10) END
       ||CASE WHEN DATE_16 IS NOT NULL THEN ',MAX('||DATE_16||') AS MAX_'||DATE_16||CHR(10) END
       ||CASE WHEN DATE_17 IS NOT NULL THEN ',MIN('||DATE_17||') AS MIN_'||DATE_17||CHR(10) END
       ||CASE WHEN DATE_17 IS NOT NULL THEN ',MAX('||DATE_17||') AS MAX_'||DATE_17||CHR(10) END
       ||CASE WHEN DATE_18 IS NOT NULL THEN ',MIN('||DATE_18||') AS MIN_'||DATE_18||CHR(10) END
       ||CASE WHEN DATE_18 IS NOT NULL THEN ',MAX('||DATE_18||') AS MAX_'||DATE_18||CHR(10) END
       ||CASE WHEN DATE_19 IS NOT NULL THEN ',MIN('||DATE_19||') AS MIN_'||DATE_19||CHR(10) END
       ||CASE WHEN DATE_19 IS NOT NULL THEN ',MAX('||DATE_19||') AS MAX_'||DATE_19||CHR(10) END
       ||CASE WHEN DATE_20 IS NOT NULL THEN ',MIN('||DATE_20||') AS MIN_'||DATE_20||CHR(10) END
       ||CASE WHEN DATE_20 IS NOT NULL THEN ',MAX('||DATE_20||') AS MAX_'||DATE_20||CHR(10) END
       ||CASE WHEN DATE_21 IS NOT NULL THEN ',MIN('||DATE_21||') AS MIN_'||DATE_21||CHR(10) END
       ||CASE WHEN DATE_21 IS NOT NULL THEN ',MAX('||DATE_21||') AS MAX_'||DATE_21||CHR(10) END
       ||CASE WHEN DATE_22 IS NOT NULL THEN ',MIN('||DATE_22||') AS MIN_'||DATE_22||CHR(10) END
       ||CASE WHEN DATE_22 IS NOT NULL THEN ',MAX('||DATE_22||') AS MAX_'||DATE_22||CHR(10) END
       ||CASE WHEN DATE_23 IS NOT NULL THEN ',MIN('||DATE_23||') AS MIN_'||DATE_23||CHR(10) END
       ||CASE WHEN DATE_23 IS NOT NULL THEN ',MAX('||DATE_23||') AS MAX_'||DATE_23||CHR(10) END
       ||CASE WHEN DATE_24 IS NOT NULL THEN ',MIN('||DATE_24||') AS MIN_'||DATE_24||CHR(10) END
       ||CASE WHEN DATE_24 IS NOT NULL THEN ',MAX('||DATE_24||') AS MAX_'||DATE_24||CHR(10) END
       ||CASE WHEN DATE_25 IS NOT NULL THEN ',MIN('||DATE_25||') AS MIN_'||DATE_25||CHR(10) END
       ||CASE WHEN DATE_25 IS NOT NULL THEN ',MAX('||DATE_25||') AS MAX_'||DATE_25||CHR(10) END
       ||CASE WHEN DATE_26 IS NOT NULL THEN ',MIN('||DATE_26||') AS MIN_'||DATE_26||CHR(10) END
       ||CASE WHEN DATE_26 IS NOT NULL THEN ',MAX('||DATE_26||') AS MAX_'||DATE_26||CHR(10) END
       ||CASE WHEN DATE_27 IS NOT NULL THEN ',MIN('||DATE_27||') AS MIN_'||DATE_27||CHR(10) END
       ||CASE WHEN DATE_27 IS NOT NULL THEN ',MAX('||DATE_27||') AS MAX_'||DATE_27||CHR(10) END
       ||CASE WHEN DATE_28 IS NOT NULL THEN ',MIN('||DATE_28||') AS MIN_'||DATE_28||CHR(10) END
       ||CASE WHEN DATE_28 IS NOT NULL THEN ',MAX('||DATE_28||') AS MAX_'||DATE_28||CHR(10) END
       ||CASE WHEN DATE_29 IS NOT NULL THEN ',MIN('||DATE_29||') AS MIN_'||DATE_29||CHR(10) END
       ||CASE WHEN DATE_29 IS NOT NULL THEN ',MAX('||DATE_29||') AS MAX_'||DATE_29||CHR(10) END
       ||CASE WHEN DATE_30 IS NOT NULL THEN ',MIN('||DATE_30||') AS MIN_'||DATE_30||CHR(10) END
       ||CASE WHEN DATE_30 IS NOT NULL THEN ',MAX('||DATE_30||') AS MAX_'||DATE_30||CHR(10) END
       ||CASE WHEN DATE_31 IS NOT NULL THEN ',MIN('||DATE_31||') AS MIN_'||DATE_31||CHR(10) END
       ||CASE WHEN DATE_31 IS NOT NULL THEN ',MAX('||DATE_31||') AS MAX_'||DATE_31||CHR(10) END
       ||CASE WHEN DATE_32 IS NOT NULL THEN ',MIN('||DATE_32||') AS MIN_'||DATE_32||CHR(10) END
       ||CASE WHEN DATE_32 IS NOT NULL THEN ',MAX('||DATE_32||') AS MAX_'||DATE_32||CHR(10) END
       ||CASE WHEN DATE_33 IS NOT NULL THEN ',MIN('||DATE_33||') AS MIN_'||DATE_33||CHR(10) END
       ||CASE WHEN DATE_33 IS NOT NULL THEN ',MAX('||DATE_33||') AS MAX_'||DATE_33||CHR(10) END
       ||CASE WHEN DATE_34 IS NOT NULL THEN ',MIN('||DATE_34||') AS MIN_'||DATE_34||CHR(10) END
       ||CASE WHEN DATE_34 IS NOT NULL THEN ',MAX('||DATE_34||') AS MAX_'||DATE_34||CHR(10) END
       ||CASE WHEN DATE_35 IS NOT NULL THEN ',MIN('||DATE_35||') AS MIN_'||DATE_35||CHR(10) END
       ||CASE WHEN DATE_35 IS NOT NULL THEN ',MAX('||DATE_35||') AS MAX_'||DATE_35||CHR(10) END
       ||CASE WHEN DATE_36 IS NOT NULL THEN ',MIN('||DATE_36||') AS MIN_'||DATE_36||CHR(10) END
       ||CASE WHEN DATE_36 IS NOT NULL THEN ',MAX('||DATE_36||') AS MAX_'||DATE_36||CHR(10) END
       ||' FROM STORE.'||TABLE_NAME||' A;'||CHR(10)||CHR(10)
       ||'COMMIT;'||CHR(10) AS SEARCH_SQL
FROM (
      SELECT  TABLE_NAME
             ,COL_CNT
             ,MIN(CASE WHEN NO = 1 THEN COL_DATE END) AS DATE_1
             ,MIN(CASE WHEN NO = 2 THEN COL_DATE END) AS DATE_2
             ,MIN(CASE WHEN NO = 3 THEN COL_DATE END) AS DATE_3
             ,MIN(CASE WHEN NO = 4 THEN COL_DATE END) AS DATE_4
             ,MIN(CASE WHEN NO = 5 THEN COL_DATE END) AS DATE_5
             ,MIN(CASE WHEN NO = 6 THEN COL_DATE END) AS DATE_6
             ,MIN(CASE WHEN NO = 7 THEN COL_DATE END) AS DATE_7
             ,MIN(CASE WHEN NO = 8 THEN COL_DATE END) AS DATE_8
             ,MIN(CASE WHEN NO = 9 THEN COL_DATE END) AS DATE_9
             ,MIN(CASE WHEN NO = 10 THEN COL_DATE END) AS DATE_10
             ,MIN(CASE WHEN NO = 11 THEN COL_DATE END) AS DATE_11
             ,MIN(CASE WHEN NO = 12 THEN COL_DATE END) AS DATE_12
             ,MIN(CASE WHEN NO = 13 THEN COL_DATE END) AS DATE_13
             ,MIN(CASE WHEN NO = 14 THEN COL_DATE END) AS DATE_14
             ,MIN(CASE WHEN NO = 15 THEN COL_DATE END) AS DATE_15
             ,MIN(CASE WHEN NO = 16 THEN COL_DATE END) AS DATE_16
             ,MIN(CASE WHEN NO = 17 THEN COL_DATE END) AS DATE_17
             ,MIN(CASE WHEN NO = 18 THEN COL_DATE END) AS DATE_18
             ,MIN(CASE WHEN NO = 19 THEN COL_DATE END) AS DATE_19
             ,MIN(CASE WHEN NO = 20 THEN COL_DATE END) AS DATE_20
             ,MIN(CASE WHEN NO = 21 THEN COL_DATE END) AS DATE_21
             ,MIN(CASE WHEN NO = 22 THEN COL_DATE END) AS DATE_22
             ,MIN(CASE WHEN NO = 23 THEN COL_DATE END) AS DATE_23
             ,MIN(CASE WHEN NO = 24 THEN COL_DATE END) AS DATE_24
             ,MIN(CASE WHEN NO = 25 THEN COL_DATE END) AS DATE_25
             ,MIN(CASE WHEN NO = 26 THEN COL_DATE END) AS DATE_26
             ,MIN(CASE WHEN NO = 27 THEN COL_DATE END) AS DATE_27
             ,MIN(CASE WHEN NO = 28 THEN COL_DATE END) AS DATE_28
             ,MIN(CASE WHEN NO = 29 THEN COL_DATE END) AS DATE_29
             ,MIN(CASE WHEN NO = 30 THEN COL_DATE END) AS DATE_30
             ,MIN(CASE WHEN NO = 31 THEN COL_DATE END) AS DATE_31
             ,MIN(CASE WHEN NO = 32 THEN COL_DATE END) AS DATE_32
             ,MIN(CASE WHEN NO = 33 THEN COL_DATE END) AS DATE_33
             ,MIN(CASE WHEN NO = 34 THEN COL_DATE END) AS DATE_34
             ,MIN(CASE WHEN NO = 35 THEN COL_DATE END) AS DATE_35
             ,MIN(CASE WHEN NO = 36 THEN COL_DATE END) AS DATE_36
        FROM (
              SELECT  TABLE_NAME
                     ,COL_CNT
                     ,ROW_NUMBER() OVER (PARTITION BY TABLE_NAME ORDER BY COL_DATE) AS NO
                     ,COL_DATE
               FROM (
                     SELECT  A.TABLE_NAME
                            ,MIN(A.CNT)     AS CNT
                            ,MIN(A.REG_DTM) AS REG_DTM
                            ,COUNT(*) OVER (PARTITION BY A.TABLE_NAME) AS COL_CNT
                            ,CASE WHEN B.DATA_TYPE = 'DATE' THEN COLUMN_NAME END AS COL_DATE
                       FROM EN_STORE_TABLE_CNT_0718 A,
                            EN_STORE_TAB_COLUMNS_0718 B
                      WHERE A.TABLE_NAME = B.TABLE_NAME(+)
                     GROUP BY  A.TABLE_NAME
                              ,CASE WHEN B.DATA_TYPE = 'DATE' THEN COLUMN_NAME END
                     )
              WHERE COL_DATE IS NOT NULL
              )
      GROUP BY  TABLE_NAME
               ,COL_CNT 
      ORDER BY TABLE_NAME             
      );
     
3.해당값을 메타 테이블에 넣고 액셀로 저장한다.

 

자 아래와 같은 유형으로 제외 대상을 뽑고 개발팀과 공유를 한다.

제외 대상 유형을 뽑는 방법

 

3-1 데이터가 0건인 경우

3-2 날짜의 MIN,MAX의 값이 변동이 없고 과거 날짜만 존재하는 경우

3-3 컬럼의 수가 2개 이하인 경우

3-4 코드성테이블이 아닌데 건수가 10건 이하인 경우

 

 

4.이제 3000개의 대상에서 제외 대상은 2000개 정도가 나올것이다.더 나올수도 있습니다.
그러면 1000개의 테이블이 실제 리버스할 대상이 되는 것입니다.


5.2000개 테이블이 정말 사용하지 않는 경우을 최종 물리적인 확인은 아래 방법을 사용하면 된다.

오라클 9I부터 인덱스모니터닝을 사용해서 해당테이블의 사용여부를 최종 판단하면 됩니다.

 

다음 글에는 대상 1000개에서 실제 테이블의 리버스를 하는 방법에 대해서 설명을 하겠습니다.

 

대상3000테이블에 대한 의사결정 자료 샘플

 

 

액셀자료를 보면 해당 테이블의 COUNT수와 실제 날짜데이터의 MIN,MAX값을 가지고 데이터 발생 여부를 확인 할수 있고.

대부분의 경우 과거데이터만 존재하고 실제로 발생하는 테이블은 1/3 이하 일것입니다.

 

우선 여기서 제외 대상에 대해서 명확하게 제외 사유라고 표시를 하고 대상 되는 테이블부터 실제 리버스를 시작을 합니다.

다음장에는 대상테이블을 어떻게 쉽고 빠르게 리버스를 하는 방법에 대해서 설명 하겠습니다.

 

01.gif

 

테이블1은 컬럼수는 8개 이고 실제 COUNT은 464건이고 BEST_DATE의 날짜컬럼의 최소값,최대값이 과거라고 판단할수 있음.

 

 

 

 

 

 

 


Tag

Leave Comments