개요
데이터베이스의 character set은 데이터베이스 생성 시점에 설정값에 의해서 정해지며 다시 변경할 수 없습니다. 따라서 변경을 하려면 데이터베이스를 삭제하고 새로 생성해야 합니다.
데이터베이스가 삭제되면 모든 객체와 데이터가 사라지므로 필요한 데이터는 백업후 데이터베이스를 재생성후 다시 import해야만 합니다.
필요한 데이터를 보존하면서 데이터베이스 character set 을 변경하는 상황을 가정하고 설명합니다.
대상버전
다국어 지원이 가능한 ALTIBASE HDB 5.3.1 이상 버전에 해당하는 설명입니다.
변경절차
변경절차 요약
변경절차는 전체적으로 요약하면 아래와 같은 단계로 진행합니다.
- STEP 1 : 데이터베이스 export 툴을 사용하여 데이터베이스의 전체 스키마를 다운로드 받습니다.
- STEP 2 : 데이터베이스의 데이터를 현재의 DB character set 으로 다운로드 받습니다. 예) KSC5601
- STEP 3 : 데이터베이스를 삭제하고 새로 데이터베이스를 변경하고자 하는 character set 설정으로 생성합니다. 예) UTF8
- STEP 4 : STEP1에서 다운로드 받은 스키마 정보를 이용하여 새로 생성된 DB에 스키마를 구성합니다.
- STEP 5 : 데이터 import 툴을 사용하여 STEP2 에서 다운로드 받은 데이터를 변경된 character set 을 사용하여 업로드 합니다. 예) UTF8
변경절차 상세
상세한 변경절차는 아래와 같은 단계로 진행합니다. 현재 DB의 character set 이 US7ASCII 인 DB의 character set 을 MS949로 변경하는 절차에 대한 설명입니다.
STEP 1. 데이터 베이스의 스키마를 다운로드 받습니다.
#1.1 현재 DB와 같은 client character set 를 환경변수로 설정합니다.
$ export ALTIBASE_NLS_USE=US7ASCII
#1.2 현재 DB의 character set 과 client character set 을 확인합니다.
iSQL> set vertical on;
iSQL> select * from v$nls_parameters;
SESSION_ID : 1
NLS_USE : US7ASCII <--- client character set
NLS_CHARACTERSET : ASCII <--- database character set
NLS_NCHAR_CHARACTERSET : UTF16
NLS_COMP : BINARY
NLS_NCHAR_CONV_EXCP : FALSE
NLS_NCHAR_LITERAL_REPLACE : FALSE
#1.3 aexport 툴을 사용하여 스키마를 다운로드 받습니다.
$ aexport
STEP 2. 데이터를 현재의 character set 으로 다운로드 받습니다.
#2.1 현재 DB와 같은 client character set 를 환경변수에 셋팅한다.
$ export ALTIBASE_NLS_USE=US7ASCII
#2.2 STEP1 에서 aexport 에 의해서 생성된 run_il_out.sh 에서 formout script와 data export script를 생성합니다.
iSQL> create table hangul_t (c1 char(500));
iSQL> insert into hangul_t values('US7ASII_한글테스트합니다');
iSQL> select * from hangul_t;
C1 : US7ASII_한글테스트합니다
$ cat run_il_out.sh | grep formout > formout.sh
$ cat run_il_out.sh | grep 'out -f' > dataout.sh
#2.3 formout script를 생성하고 form script 의 NLS_USE가 DB와 같은 character set 인지 확인합니다.
$ sh formout.sh
$ cat *.fmt
table HANGUL_T
{
"C1" char (500);
}
DATA_NLS_USE=US7ASCII
#2.4 2.2 단계에서 만든 script를 실행하여 데이터를 파일로 다운로드하고 한글이 정상적으로 포함되어 있는지 한글 데이터를 확인합니다
$ sh dataout.sh
$ cat *.dat
"한글 데이터입니다"
STEP 3. 데이터베이스를 삭제하고 새로 데이터베이스를 변경하고자 하는 character set 설정으로 생성합니다.
#3.1 데이터베이스를 삭제합니다.
$ server stop
$ cd $ALTIBASE_HOME
$ rm dbs/*
$ rm logs/*
#3.2 새로운 character set 으로 DB를 생성합니다.
$ export ALTIBASE_NLS_USE=MS949
$ server create MS949 UTF16
#3.3 DB의 character set 을 확인합니다.
iSQL> set vertical on;
iSQL> select * from v$nls_parameters;
SESSION_ID : 1
NLS_USE : MS949
NLS_CHARACTERSET : MS949
NLS_NCHAR_CHARACTERSET : UTF16
NLS_COMP : BINARY
NLS_NCHAR_CONV_EXCP : FALSE
NLS_NCHAR_LITERAL_REPLACE : FALSE
STEP 4 : STEP1에서 다운로드 받은 스키마 정보를 이용하여 새로 생성된 DB에 스키마를 구성합니다.
#4.1 aexport로 생성된 스키마 생성 shell script를 실행하고 스키마가 정상적으로 생성되었는지 확인합니다.
$ sh run_is.sh
iSQL> select * from tab;
STEP 5 : 데이터 import 툴을 사용하여 STEP2 에서 다운로드 받은 데이터를 변경된 character set 을 사용하여 업로드합니다.
#5.1 STEP 2.2 에서 생성된 form 파일안의 NLS_USE 설정을 새로운 character set으로 변경합니다.
$ export ALTIBASE_NLS_USE=MS949
$ cat *.fmt
table HANGUL_T
{
"C1" char (500);
}
DATA_NLS_USE=MS949
#5.2 aexport 에 의해서 생성된 데이터를 import 해주는 shell script를 실행해서 데이터를 테이블에 업로드합니다.
$ sh run_il_in.sh
#5.3 데이터가 정상적으로 업로드 되었는지 한글이 들어가 있는 테이블을 조회합니다.
iSQL> select * from v$nls_parameters;
SESSION_ID : 1
NLS_USE : MS949
NLS_CHARACTERSET : MS949
NLS_NCHAR_CHARACTERSET : UTF16
NLS_COMP : BINARY
NLS_NCHAR_CONV_EXCP : FALSE
NLS_NCHAR_LITERAL_REPLACE : FALSE
iSQL> select * from hangul_t;
C1 : US7ASII_한글테스트합니다 .