2013. 2. 1. 13:30ㆍ데이터전환
m_job_table : 마이그레이션 대상 소스 소유자, 소스 테이블, 타겟소유자, 타겟 테이블 정보
DBA_TAB_COLUMNS : 오라클 데이터베이스의 테이블 컬럼 정보, 타겟 오라클에서 관리
m_job_table 에 소스 대상 컬럼과 타겟 대상 컬럼을 컬럼 형태로 저장하고
마이그레이션 쉘에서 이 정보를 받아와서 소스 EXTERNAL TABLE 생성, 타겟 EXTERNAL TABLE 생성 테이블, INSERT 시에 활용
m_job_table 구조 |
CREATE TABLE MIGADMIN.M_JOB_TABLE |
m_job_column 테이블은 컬럼 별 정보를 담고 있는 테이블
m_job_column 구조 |
CREATE TABLE MIGADMIN.M_JOB_COLUMN ( WORK_AREA_CD VARCHAR2(50), SHL VARCHAR2(255), TGT_OWNER VARCHAR2(20), TGT_TBL VARCHAR2(255), TGT_COL VARCHAR2(255), TGT_COL_NM VARCHAR2(1000), TGT_COL_SEQ NUMBER(4), TGT_COL_TYPE VARCHAR2(255), TGT_COL_LEN NUMBER(4), TGT_COL_NULL VARCHAR2(1), TGT_ENCRYPT_YN VARCHAR2(1), TGT_ENCRYPT_KEY VARCHAR2(255), ETL_LOGIC VARCHAR2(255), SRC_OWNER VARCHAR2(20), SRC_TBL VARCHAR2(255), SRC_COL VARCHAR2(255), SRC_COL_NM VARCHAR2(1000), SRC_COL_SEQ NUMBER(4), SRC_COL_TYPE VARCHAR2(255), SRC_COL_LEN NUMBER(4), SRC_COL_NULL VARCHAR2(1), SRC_ENCRYPT_YN VARCHAR2(1), DEL_YN CHAR(1) DEFAULT 'N', UPDATE_DT DATE DEFAULT sysdate ) |
아래는 소스 테이블 컬럼과 타겟 테이블 컬럼간의 1:1 매핑, 추가, 삭제된 컬럼을 조사하기 위한 SQL 임
1 | 소스 | ||||||||||||||||||||||||||||||||||||||||||||
2 |
|
위 테이블을 이용하여 소스 테이블에서 추가/삭제된 컬럼, 타겟 테이블에서 추가/삭제된 컬럼을 조사하여 이에 맞는 컬럼을 명시 쉘에서 이용한다.
예제에 사용할 테이블
소스 테이블 T1 |
타겟 테이블 T2 |
타겟 테이블 T3 |
create table t1 ( a not null b, c ) |
create table t2 ( a1 not null b1, c1 , d1 not null ) |
create table t3 ( a1 not null, b1 not null ) |
소스 테이블 T1에서 타겟 테이블 T2로 마이그레이션
a는 a1으로 컬럼 변경, b--> b1, c -> c1
T2의 d 컬럼은 T1에 없는 컬럼이지만 not null 속성으로 업무에서 선정하는 디폴트 값을 넣어주어야 에러가 발생하지 않는다.
소스 테이블 T1에서 타겟 테이블 T3 로 마이그레이션
a는 a1으로 컬럼 변경, b--> b1
T1의 c 컬럼은 T2에 없는 컬럼이므로 소스 external table 생성시 부터 select-list에서 제거하여 처리함
T1의 b컬럼은 b1으로 컬럼명이 변경되면서 not null 속성으로 바뀌었으므로 T1의 b 컬럼이 null 인 경우 디폴토로 넣어 줄 선정값을 정한다.
[case 1]
-- T2 기준으로 소스 컬럼을 만든다.
-- T1에 없는 T2 속성 중 NULL 속성인 것은 제외
v_src_cols | a as a1, b as b1, c as c1, NVL(d, 'default') as d1 |
v_tgt_cols |
a1, b1, c1, d1 |
[case 2]
-- T2 기준으로 소스 컬럼을 만든다.
-- T1에 없는 T2 속성 중 NULL 속성인 것은 제외
v_src_cols |
a as a1, NVL(b, 'default') as b1 |
v_tgt_cols |
a1, b1 |
단계는 이렇다
소스 테이블 --> 소스 external 테이블 --> ftp 전송 --> 타겟 external 테이블 --> 타겟 테이블
여기서 ftp 전송은 오라클에서 제공하는 EXEC DBMS_FILE_TRANSFER.GET_FILE 함수를 사용하여 소스에서 external 테이블과 같이 생성된 dmp 파일을 타겟으로 가져온다.
case | 소스 external table 추출 |
타겟 external 추출 |
탸겟 Insert |
case 1 | CREATE TABLE ext_${v_rep_tbl} ORGANIZATION EXTERNAL AS SELECT ${v_src_cols} FROM ${v_src_owner}.${v_src_tbl) a |
CREATE TABLE ext_${v_rep_tbl} |
INSERT /*+ APPEND PARALLEL(A 2) */ |
case 2 |
CREATE TABLE ext_${v_rep_tbl} ORGANIZATION EXTERNAL AS SELECT ${v_src_cols} FROM ${v_src_owner}.${v_src_tbl) a |
CREATE TABLE ext_${v_rep_tbl} ORGANIZATION EXTERNAL AS SELECT ${v_tgt_cols1} FROM ${v_tgt_owner}.${v_tgt_tbl} a WHERE 0 = 1; |
INSERT /*+ APPEND PARALLEL(A 2) */ INTO ${v_tgt_owner}.${v_tgt_tbl} (${v_tgt_cols}) SELECT /*+ PARALLEL(A 2) */ (${v_tgt_cols}) FROM ext_${v_rep_tbl} a; |
'데이터전환' 카테고리의 다른 글
LOB STORAGE의 STORAGE IN ROW 옵션 (0) | 2013.02.16 |
---|---|
DBMS_FILE_TRANSFER 패키지 (0) | 2013.02.05 |
clob 컬럼을 포함한 테이블의 크기 구하기 (0) | 2013.02.05 |
오라클 외부파일 실행 (0) | 2013.02.05 |
expdp 수행 중 중단 ORA-31634: job already exists (0) | 2013.01.30 |