문서유형ㅣ기술정보
분야ㅣ마이그레이션
적용제품버전ㅣTibero 7.2.4
문서번호ㅣTMITS014
현상
Oracle 캐릭터셋이 KO16KSC5601 일 경우에 '샾','똟','잌' 등 KO16KSC5601 에서 지원하지 않는 한글 형 타입이지만, DB 상에 조회하면 입력되어 있는 경우, Tibero로 Migration을 진행하게 되면 데이터가 깨지는 현상이 있습니다.
원인
Oracle JDBC 에서 자체적으로 데이터를 입력할 때, UTF-8 로 DB에 CHAR과 VARCHAR2 한글 데이터를conversion 해 입력할 수 있습니다.
위와 같이 정상적으로 입력이 안된 경우에 Tibero 케릭터셋이 MSWIN949 나 UTF8 등으로 세팅하고 데이터 Migration 을 하면 데이터가 깨져서 Migration 되는 현상이 있습니다.
해결 방안
Tibero to Oracle DB LINK 를 통해 데이터를 Migration을 진행하여 해결할 수 있습니다.
1. Tibero to Oracle DB Link 설정 환경
- Oracle Server 버전과 Tibero Server에 설치 되어있는 Oracle Client 버전을 동일하게 설정
2. .profile(혹은 .bash_profile)에 NLS_LANG 을 Oracle Server 와 동일한 NLS_LANG 설정
$ vi .profile export NLS_LANG=KOREAN_KOREA.KO16KSC5601
3. tbdsn.tbr 에 TB_NLS_LANG 설정
$ vi tbdsn.tbr oralink=((GATEWAY =(PROGRAM=/tibero/tbgateway/gw4orcl_11g)(TARGET=Oracle)(TX_MODE=GLOBAL))) #티베로가 UTF8 이면 UTF8, MSWIN949 면 MSWIN949 세팅 TB_NLS_LANG=UTF8
4. tbgw.cfg 에 SKIP_CHAR_CONV=Y로 설정
$ vi tbgw.cfg LISTENER_PORT=9998 LOG_DIR=/tibero/tbgateway/oracle/log LOG_LVL=5 MAX_LOG_SIZE=502400000 SKIP_CHAR_CONV=Y
※ SKIP_CHAR_CONV 파라미터
SKIP_CHAR_CONV 파라미터를 Y로 설정하면,
Gateway가 기동되는 서버에서 환경 변수로 설정된 NLS_LANG에 해당하는 캐릭터셋으로 세팅 됩니다.
따라서 Oracle의 캐릭터셋이 KSC5601인 환경에서, KSC5601에서 지원하지 않는 문자 '잌'이 저장되어 있는 경우에도, NLS_LANG과 SKIP_CHAR_CONV 파라미터를 위와 같이 설정함으로써 Oracle의 캐릭터셋 변환과 Tibero에서의 캐릭터셋 변환을 모두 생략할 수 있습니다.
그 결과, 데이터가 깨지지 않고 정상적으로 이관이 가능해집니다.