DB

캐릭터셋 차이에 따른 Oracle DB 이관 시 문자열 길이 초과 문제 해결 방법

Lawmin 2024. 8. 21. 11:59

1. 구DB DMP 파일에서 메타데이터(테이블 구조 등)만 신DB에 IMPORT

(exclude, remap_tablespace 등은 필요에 따라 생략)

$ impdp \'/ as sysdba\' directory=[DMP파일디렉토리] dumpfile=[DMP파일명] exclude=STATISTICS schemas=[대상스키마1, 대상스키마2, ...] remap_tablespace=%:[변경할테이블스페이스명] content=METADATA_ONLY;

 

2. BYTE 타입의 문자열을 CHAR 타입으로 바꿔주는 SQL문 추출 후, 해당 결과를 재실행하여, 각 테이블의 컬럼 타입 변경
SELECT  'ALTER TABLE ' || owner || '.' || table_name || ' MODIFY (' || column_name || ' ' || data_type || '(' || data_length || ' CHAR));' mod_sql
FROM    dba_tab_columns c
WHERE   owner IN ('대상스키마1', '대상스키마2', ...)
AND     char_used = 'B'
AND NOT EXISTS (SELECT 1 FROM dba_views v WHERE v.owner = c.owner AND c.table_name = v.view_name)
ORDER BY owner, table_name, column_id;

 

3. 구DB DMP 파일에서  테이블 데이터만 신DB에 IMPORT

impdp \'/ as sysdba\' directory=[DMP파일디렉토리] dumpfile=[DMP파일명] exclude=STATISTICS schemas=[대상스키마1, 대상스키마2, ...] remap_tablespace=%:[변경할테이블스페이스명] content=DATA_ONLY;