1. CSSCAN 사용목적
2. CSSCAN utility에서 적용되는 scan 범위
3. CSSCAN utility 실행시 검사 항목
4. CSSCAN utility 사용 방법
4.1 CSSCAN utility schema 생성
4.2 CSSCAN 실행
4.3 CSSCAN 매개변수 설명
5. CSSCAN 실행 후의 결과물
5.1 scan.out
5.2 scan.txt
5.3 scan.err
6. CHARACTER SET 변환
6.1 EXPORT/IMPORT
6.2 ALTER DATBASE [NATIONAL] CHARACTER SET
6.3 EXPORT/IMPORT + ALTER DATABASE CHARACTER SET
6.4 CSALTER(10g 이상)
7. 실제 사용사례(scoredb \-> dbset04)
character set 변경시 발생할 수 있는 문제점을 미리 감지하고 보고서를 생성해주는 매우 유용한 유틸리티이다.
10gR1 이상부터는 $ORACLE_HOME/bin/csscan이 존재하지만 9iR2 이하 버전은 별도 설치가 필요하다.
sysdba 권한을 가지고 sqlplus 에 접속하여 csscan을 설치한다.
SQL> connect / as sysdba {*}SQL> @?/rdbms/admin/csminst.sql * |
---|
위의 문장을 실행하지 않고 csscan을 사용하려고 하면 아래의 에러메세지가 나온다.
CSS-00107: Character set migration utility schema not installed |
---|
아래와 같이 명령행 인터페이스를 사용하거나 혹은 대화식 프롬프트로 실행할 수 있다.
csscan system/manager FULL=y TOCHAR=utf8 ARRAY=102400 PROCESS=5 |
---|
csscan help=y |
---|
세개의 텍스트 파일 보고서(기본 이름은 scan)가 생성된다.
scan 명령을 수행한 화면 로그 복사
1. 데이터베이스를 export한다.
2. 새 character set을 가지는 데이터베이스를 생성한다.
3. 긴 컬럼 길이가 필요한 테이블을 생성한다.
4. 데이터를 import 한다. (이전 단계에서 생성한 테이블로 import 하는 경우 IGNORE=YES 옵션을 준다.)
변환이 필요한 데이터양이 적을 때 사용한다.
1. 변환이 필요한 데이터를 포함하는 테이블을 export 한다.
2. export한 테이블을 truncate 한다.
3. ALTER DATABASE ... CHARACTER SET ... 명령을 수행한다.
4. 테이블 데이터를 다시 import 한다.
10g부터 ALTER DATBASE CHARACTER SET 명령을 대신해서 사용된다.
1. 데이터베이스를 restricted mode로 오픈한다.(이 명령 수행시 다른 세션이 접속해 있으면 실패한다.)
2. SYS 유저로 접속해서 $ORACLE_HOME/rdbms/admin/csalter.plb를 수행한다.
Checking data validility... Sorry only one session is allowed to run this script |
---|
Checking data validility... Unrecognized convertible date found in scanner result |
---|
=>
{*}수행시에 문제가 발생하면{*} {*}character set{*} {*}변환은 중지된다{*}.
3. 데이터베이스를 restart 한다.
1. 테스트 환경
2. csscan 수행
...
3. csscan 출력 결과(일부만 발췌합니다.)
1) SCAN.TXT
data dictionary data와 user data 모두에서 truncation, lossy가 발생한 것을 확인할 수 있다. 정확한 발생 원인은 scan.err 에서 확인한다.
2) SCAN.ERR
exceed column size: KO16KSC5601 => AL32UTF8로 character set이 변환되면서 한글데이터의 경우 사이즈가 증가하여 발생한 에러이다. 컬럼 사이즈를 일정하게 증가하여 해결하였다.
lossy conversion: character set 변환시 데이터가 정상적인 변환이 되지 못해 깨지면서 발생하는 손실이다. 이런 Exception Type이 발생하는 경우 해당 데이터를 삭제하거나 포기하지 않는 이상 character set의 변환은 불가하다.
4. 결론
위의 예에서는 csscan을 사용한 character set 변경시 발생할 수 있는 문제점을 진단한 결과 exceed column size, lossy conversion 두경우에 해당하는 문제점이 보고되었다.
그 중 exceed column size는 컬럼사이즈를 변경하면서 간단히 해결될 수 있는 문제이지만 lossy conversion의 경우 해결 방법이 없다.
해당하는 테이블과 컬럼을 살펴보아 필요없는 데이터라고 판단되면 이 점을 감안할 수 있겠지만 그렇지 않을 경우 chracter set의 변환이 불가하다.
scan.txt에서 보이듯 총 453건의 lossy 데이터가 발견되었고(영어, 한글 모두 해당된다.) 이에 따라 KO16KSC5601 => AL32UTF8로의 character set 변환은 적합하지 않다.