http://develop.sunshiny.co.kr/970
# KO16KSC5601 에서 UTF8 or AL32UTF8 데이터 이관(import)
KO...등으로 시작하는 캐릭터셋은 한글을 2Byte로 표현
UTF8 에서는 한글을 3Byte로 표현.
> KO16KSC5601에서 Export한 파일을 UTF8의 DB에 데이터 이관시,
한글 문자열이 있는 컬럼에서 아래와 같은 에러가 발생하며 import 되지 않음.
IMP-00003: ORACLE error 12899 encountered
ORA-12899: value too large for column "USER_ID"."TABLE_NAME"."CONTENTS" (actual: 105, maximum: 100)
# CHAR, VARCHAR 타입의 컬럼에서 기본단위(Byte)를 문자단위(Char)로 변경하여 import 가능
> 이 방법도 KO16KSC5601 캐릭터셋의 VARCHAR 타입에서 한글 글자수가 1330(4000/3)여개 이상일경우 문제발생.
NLS_LENGTH_SEMANTICS 및 Byte, Char 단위 관련
> 진행
1) 캐릭터셋 KO16KSC5601의 데이타 Export
2) Import 할 DB의 NLS_LENGTH_SEMANTICS 파라메터 변경
ALTER SYSTEM SET NLS_LENGTH_SEMANTICS=CHAR SCOPE=BOTH ;
또는
CREATE TABLE TABLE_NAME(VARCHAR2(100 CHAR))와 같이
DDL 스크립트의 문자 데이터 타입의 단위설정에 CHAR를 지정(기본 Byte 단위)
3) 목표 DB의 Oracle 계정 imp 명령에서 SHOW=Y 옵션을 이용하여 DDL 스크립트 추출
imp dbuser/1234 file='/DMP/database.dmp' log='/DMP/database_sql.log' fromuser=dbuser SHOW=Y
또는
토드등의 툴에서 DDL 스크립트 추출
4) 목표 DB에 DDL 스크립트를 이용하여 테이블 생성(스크립트의 문자 타입에 CHAR 단위 지정)
5) 목표 DB에 imp 명령에서 IGNORE=Y 옵션을 이용하여 데이터 import 진행
imp dbuser/1234 file='/DMP/database.dmp' log='/DMP/database.log' fromuser=dbuser IGNORE=Y
'Infomation' 카테고리의 다른 글
Oracle Character Set 확인, 변경 (0) | 2016.12.06 |
---|---|
지능형 서비스 (0) | 2016.11.27 |
LLVM , Clang (0) | 2016.11.25 |
CUDA example & start & sample (0) | 2016.11.14 |
동기(synchronous)방식과 비동기(asynchronous)방식 차이점 (0) | 2016.11.11 |