기술 정보
home
채널 소개
home

Character Set 변경 프로세스 (MSWIN949→UTF8)

문서 유형
기술 정보
분야
마이그레이션
키워드
characterSet
MSWIN949
UTF8
변경
적용 제품 버전
6FS07
6FS07PS
7FS02
7FS02PS

개요

Database를 구성할 시 DB NAME (SID), Data File 경로, Character Set을 결정해야 합니다. 특히 Character set의 경우, Database를 구성하면 이후 변경이 어렵기 때문에 초기 설치 시 사용자 환경 및 요구 사항을 고려하여 구성이 필요합니다.
MSWIN949 문자셋에서 UTF8 문자셋으로 Character Set을 전환하는 방법과 각 단계별 작업 내용을 설명합니다.

방법

MSWIN949 → UTF8로 캐릭터 셋 변경 순서
기존 2Byte(MSWIN949 ) → 3Byte(UTF-8) 변경 시 기존 테이블의 컬럼 사이즈 늘리는 작업 필요
기존 DB 사이즈 조정
기존 DB 백업 (tbexport) - 서버의 locale와 DB의 문자셋이 동일해야한다
신규 DB 생성 (변경하고자하는 문자열로 데이터베이스 생성)
백업한 데이터 신규 DB에 import
1.
기존 Tibero Character Set 확인
NLS_CHARACTERSET: MSWIN949
NLS_NCHAR_CHARACTERSET: UTF16
SQL> col name for a25 SQL> col value for a15 SQL> col COMMENT_STR for a60 SQL> set linesize 200 SQL> select * from database_properties; NAME VALUE COMMENT_STR ------------------------- --------------- ------------------------------------------------------------ DFLT_PERM_TS USR Name of default permanent tablespace DFLT_TEMP_TS TEMP Name of default temporary tablespace DFLT_UNDO_TS0 UNDO Name of default undo tablespace NLS_CHARACTERSET MSWIN949 NLS_NCHAR_CHARACTERSET UTF16 DB_NAME tibero database name 6 rows selected.
SQL
복사
2.
OS에서 Character Set 변경
OS 계정의 LANG 확인
$ locale | grep LANG LANG=en_US.UTF-8
SQL
복사
변경 가능한 LANG 확인
$ locale -a | grep en_US.utf8 en_US.utf8
SQL
복사
변경이 필요할 시 LANG 임시 변경
$ LANG=en_US.utf8
SQL
복사
영구 변경
$ vi ~/.bash_profile export LANG=en_US.utf8 -- 적용 $ source ~/.bash_profile
SQL
복사
3.
터미널 상의 Character Set 설정
사용 중인 터미널의 문자 인코딩도 UTF-8 설정이 필요합니다. (예: Putty, Terminal 설정)
4.
tbdns.tbr 파일  Character Set  설정
PATH : $TB_HOME/client/config/tbdsn.tbr
$ vi $TB_HOME/client/config/tbdsn.tbr tibero=( (INSTANCE=(HOST=localhost) (PORT=8629) (DB_NAME=tibero) ) ) tibero_SP=( (INSTANCE=(HOST=localhost) (PORT=8630) (DB_NAME=tibero) ) ) TB_NLS_LANG=UTF8
SQL
복사
5.
기존 테이블의 컬럼 사이즈 늘려주기
테이블 스페이스 확인 후 65% 이상 사용 중: 1.5배 늘리기
VARCHAR/CHAR : 기존 컬럼에서 1.5 ~ 2배 사이즈 늘리기
아래 스크립트를 통해 컬럼 사이즈 늘리는 쿼리 확인하여 테이블에 적용합니다.
$ tbsql tibero/tmax tbSQL 6 TmaxData Corporation Copyright (c) 2008-. All rights reserved. Connected to Tibero. SQL> SELECT 'ALTER TABLE '|| table_name ||' MODIFY('|| LOWER(column_name) ||' VARCHAR2('|| LEAST(CEIL(data_length*1.5/10) * 10, 4000) ||'));' AS sqltext FROM USER_TAB_COLUMNS WHERE data_type LIKE 'VARCHAR%' AND data_length > 1 AND data_length < 4000; SQLTEXT -- 자동으로 1.5 ~ 2배 해준 상태 -------------------------------------------------------------------------------- ALTER TABLE TEST MODIFY(name VARCHAR2(20)); ALTER TABLE TEST MODIFY(address VARCHAR2(60)); ALTER TABLE TMAXKOREAN MODIFY(name VARCHAR2(20)); ALTER TABLE TMAXKOREAN MODIFY(address VARCHAR2(150)); ALTER TABLE TMAXKOREAN MODIFY(gender VARCHAR2(20)); 5 rows selected.
SQL
복사
참고
MSWIN949는 2Byte, UTF-8은 최대 3Byte로, 데이터 손실을 방지하기 위해 컬럼 사이즈를 변경합니다.
쿼리 적용 전 테이블 상태 확인
SQL> desc TMAXKOREAN COLUMN_NAME TYPE CONSTRAINT ---------------------------------------- ------------------ -------------------- NAME VARCHAR(10) ADDRESS VARCHAR(100) POST NUMBER(6) NUM NUMBER(4) GENDER VARCHAR(10) SQL> ALTER TABLE TEST MODIFY(name VARCHAR2(20)); SQL> ALTER TABLE TEST MODIFY(address VARCHAR2(60)); SQL> ALTER TABLE TMAXKOREAN MODIFY(name VARCHAR2(20)); SQL> ALTER TABLE TMAXKOREAN MODIFY(address VARCHAR2(150)); SQL> ALTER TABLE TMAXKOREAN MODIFY(gender VARCHAR2(20)); -- 쿼리 적용 후 테이블 상태 확인 SQL> desc TMAXKOREAN COLUMN_NAME TYPE CONSTRAINT ---------------------------------------- ------------------ -------------------- NAME VARCHAR(20) ADDRESS VARCHAR(150) POST NUMBER(6) NUM NUMBER(4) GENDER VARCHAR(20)
SQL
복사
6.
tbexport로 데이터 백업 (기존 캐릭터 셋 - mswin949)
$ tbexport username=sys password=tibero sid=tibero file=/work/bak_data.dat log=/work/bak_data.log full=y
SQL
복사
7.
새로운 Character Set으로 database 생성
(1) 새로운 서버 생성 후 database 생성 (UTF8)
(2) 동일 서버에 멀티 인스턴스로 database 생성 (UTF8)
8.
데이터 복구 (새로 생성한 database에 데이터 이관)
-- tbimport 전 유저 생성 & 권한 부여 SQL> create user {user name} identified by {user password} ; User '{user name}' created. -- 권한 부여 SQL> grant connect, resource, dba to {user name};
SQL
복사
tbimport 수행
$ tbimport username=sys password=tibero sid=tibero2 file=/work/test.dat USER=TIBERO IGNORE=y
SQL
복사
참고
OS, 터미널, DB 문자셋이 일치해야 tbexport/tbimport 수행 시 데이터 깨짐을 방지할 수 있습니다.
데이터 유실을 방지하기 위해서는 반드시 사전 백업이 필요합니다.
tbimport 시, ‘IGNORE=y’ 옵션은 기존 객체의 Duplicate 에러를 무시하고 복구를 계속 진행합니다.