DATOR


데이터마이그-전환아키덱쳐구조-2

운영전환서버의 DB USER을 어떻게 구성하느냐에 따라서 향후 전환 담당자들이 혼동스럽지 않고 개발하기에도 편안하다.


아래 구조는 이행 프로젝트를 한다면 아래 DB USER구성도로 처리해서 작업을 하도록 유도해야 한다.

 

D2.gif 

 

아래는 이행 스크립트의 간단한 예제이다.


####################################################################
JOB명 : 010.DROP TABLE
####################################################################

DROP TABLE  이행전용USER.MIG_목적테이블 PURGE;

 

####################################################################
JOB명 : 020.CREATE MIG
####################################################################

CREATE TABLE 이행전용USER.MIG_목적테이블
TABLESPACE 테이블스페이스
NOLOGGING
PARALLEL 8
AS
SELECT  /*+ FULL(A) PARALLEL(A 8) */
 A.CUSTOMER_NUM                      AS CUST_NO           ----고객번호
,NVL(A.DISTRIBUTE_DATE+9/24,SYSDATE) AS REG_DTM           ----등록일시
,'MIG'                                        AS REGR_ID  ----등록자ID
,NVL(A.DISTRIBUTE_DATE+9/24,SYSDATE) AS MOD_DTM           ----수정일시
,'MIG'                                        AS MODR_ID  ----수정자ID
,여러개의 SQL정의.......................(생략)
FROM 전환 소스 DB USER.소스테이블 A;


 

####################################################################
JOB명 : 030.기본검증
####################################################################


SELECT 1/DECODE(SUM(CNT), 0, 1, 0) VRF
  FROM (
        SELECT /*+ FULL(A) PARALLEL(A 8) */
                COUNT(0) AS CNT
          FROM 이행전용USER.MIG_목적테이블 A
        UNION ALL 
        SELECT /*+ FULL(A) PARALLEL(A 8) */
                 COUNT(0)*(-1) AS CNT
          FROM  전환 소스 DB USER.소스테이블 A
        ) A;

 

####################################################################
JOB명 : 040.TRUNCATE AND INSERT
####################################################################


COMMIT;
ALTER SESSION ENABLE PARALLEL DML;

 

TRUNCATE TABLE  최종 Target USER.목적테이블;

 

INSERT /*+ APPEND PARALLEL(A 8) */ INTO 최종 Target USER.목적테이블 A
(
 CUST_NO                        ----고객번호
,REG_DTM                        ----등록일시
,REGR_ID                        ----등록자ID
,MOD_DTM                        ----수정일시
,MODR_ID                        ----수정자ID
,GIV_DTM                        ----부여일시
,ST_CD                          ----상태코드
,TM_ID                          ----상담원ID
)
SELECT /*+ FULL(A) PARALLEL(A 8) */
 CUST_NO                        ----고객번호
,REG_DTM                        ----등록일시
,REGR_ID                        ----등록자ID
,MOD_DTM                        ----수정일시
,MODR_ID                        ----수정자ID
,GIV_DTM                        ----부여일시
,ST_CD                          ----상태코드
,TM_ID                          ----상담원ID
FROM  이행전용USER.MIG_목적테이블 A;

COMMIT;


이행전용USER에 MIG_목적테이블을 생성하는 이유가 무엇일까?

 

생성해야 하는 이유
 1. 개발자들이 사용하는 테이블은 최종 Target USER.목적테이블임
 2. 향후 개발자들이 변경한 것인지 아니면 전환에 의해서 오류인것을 명확하게
    파악하려면 개발자에게 준 데이터가 무엇인지 가지고 있어야 함.
 3. MIG_목적테이블에는 최종테이블의 컬럼 및 조인의 원천 소스를 가지고 있을수 있기때문에
   향후 검증을 쉽게 할수 있음.

 

 


   예를 들면?
     CREATE TABLE MIG_최종테이블
     AS
     SELECT   A.컬럼1          ---- 최종컬럼1
             ,A.컬럼2          ---- 최종컬럼2
             ,B.매핑된컬럼     ---- 최종컬럼3
             ,A.연결고리 AS SRC_최종컬럼3 ---- MIG에서 전용 보존하는 컬럼
            
       FROM  전환 소스 DB USER.소스테이블 A,
             매핑테이블 B
      WHERE A.연결고리 = B.연결고리(+);            
     
     이렇게 생성했다면 향후 매핑테이블에서 매핑 안된 결과를 뽑을려면?
     SELECT *
       FROM MIG_최종테이블
       WHERE SRC_최종컬럼3 IS NOT NULL
         AND  최종컬럼3 IS NULL;


     아주 쉽게 뽑을수 있고 향후 관리하기가 싶다.
    
도움이 되시기를 바랍니다.^^

 

 

 

 

Tag

Leave Comments