Oracle Character Set 변환(5): 5. Oracle 권장 방법

Oracle 권장 Character Set 변환 방법 에 대해 살펴본다. CSALTER 사용 방법과 한계점, CSSCAN 사용 방법과 실행 순서, 실행결과 파일, CSSCAN 실행 결과 저장 Table을 생성하는 DDL을 확인할 수 있다.

이전 글에서 이어지는 내용이다.

Oracle Character Set 변환(4): 4.테스트 환경 구성

5. Oracle 권장 Character Set 변환 방법 (CSALTER, CSSCAN)

Oracle은 Full Export & Import 방법과 CSALTER script를 활용하는 방법을 권장하고 있다. 이 중 먼저 CSALTER를 사용하는 방법에 대해 살펴본다.

5.1. CSALTER 사용 방법

Oracle 문서는 아래 URL에서 확인할 수 있다.

Migrating a Character Set Using the CSALTER Script (https://docs.oracle.com/cd/E11882_01/server.112/e10729/ch11charsetmig.htm#NLSPG469)

데이터베이스의 character set을 변경하기 위해서 다음 절차를 실행한다.

  1. Shut down the database, using either a SHUTDOWN IMMEDIATE or a SHUTDOWN NORMAL statement.
  2. Do a full backup of the database, because the CSALTER script cannot be rolled back.
  3. Start up the database.
  4. Run the Database Character Set Scanner utility.
    CSSCAN /AS SYSDBA FULL=Y…
  5. Run the CSALTER script.
    @@CSALTER.PLB
    SHUTDOWN IMMEDIATE; — or SHUTDOWN NORMAL;
    STARTUP;

하지만 CSALTER는 사용자가 생성한 데이터는 변환하지 않는다. (위 URL의 문서 내용 일부 발췌)

Note that the CSALTER script does not perform any user data conversion. It only changes the character set metadata in the data dictionary. Thus, after the CSALTER operation, Oracle behaves as if the database was created using the new character set.

이것은 CSALTER의 한계점이고, CSALTER를 character set 변환에 사용하는 것은 대부분의 application 환경에서 적합하지 않다.

다만, CSSCAN(Database Character Set Scanner utility)는 변환 대상 데이터베이스에 대해 변환 가능한 데이터와 변환시 문제가 되는 데이터를 미리 파악하는 용도로 사용할만 하다.

5.2. CSSCAN 사용 방법

다음 명령어로 csscan 실행에 필요한 parameter를 확인할 수 있다.

csscan help=y

oracle csscan help
oracle csscan help
C:\Users\ymlee>csscan help=y


Character Set Scanner v2.2 : Release 11.2.0.1.0 - Production on 일 3월 20 22:58:48 2022

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.


You can let Scanner prompt you for parameters by entering the CSSCAN
command followed by your username/password:

  Example: CSSCAN \"SYSTEM/MANAGER AS SYSDBA\"

Or, you can control how Scanner runs by entering the CSSCAN command
followed by various parameters. To specify parameters, you use keywords:

  Example:
    CSSCAN \"SYSTEM/MANAGER AS SYSDBA\" FULL=y TOCHAR=utf8 ARRAY=1024000 PROCESS=3

Keyword    Default Prompt Description
---------- ------- ------ -------------------------------------------------
USERID             yes    username/password
FULL       N       yes    scan entire database
USER               yes    owner of tables to be scanned
TABLE              yes    list of tables to scan
COLUMN             yes    list of columns to scan
EXCLUDE                   list of tables to exclude from scan
TOCHAR             yes    new database character set name
FROMCHAR                  current database character set name
TONCHAR                   new national character set name
FROMNCHAR                 current national character set name
ARRAY      1024000 yes    size of array fetch buffer
PROCESS    1       yes    number of concurrent scan process
MAXBLOCKS                 split table if block size exceed MAXBLOCKS
CAPTURE    N              capture convertible data
SUPPRESS                  maximum number of exceptions logged for each table
FEEDBACK                  report progress every N rows
BOUNDARIES                list of column size boundaries for summary report
LASTRPT    N              generate report of the last database scan
LOG        scan           base file name of report files
PARFILE                   parameter file name
PRESERVE   N              preserve existing scan results
LCSD       N       no     enable language and character set detection
LCSDDATA   LOSSY   no     define the scope of the detection
HELP       N              show help screen (this screen)
QUERY      N              select clause to scan subset of tables or columns
---------- ------- ------ -------------------------------------------------
Scanner terminated successfully.

각 parameter에 대한 자세한 설명은 다음 URL을 참고한다.

Database Character Set Scanner Parameters (https://docs.oracle.com/cd/E11882_01/server.112/e10729/ch12scanner.htm#NLSPG498)

csscan은 다음 순서로 실행한다.

  1. schema 생성: $ORACLE_HOME/rdbms/admin/csminst.sql 실행
  2. directory 생성: D:\temp\csscan 생성 (실행결과 파일 저장 용도)
  3. csscan 실행
  4. csscan 실행결과 확인

csscan 실행결과로 세 개의 파일이 생성된다.

  • scan.txt: scan 결과 요약 보고서
  • scan.out: scan 대상 테이블 정보
  • scan.err: 오류 상세 내역

scan.txt (scan 결과 요약 보고서)는 다음의 내용으로 구성되어 있다. (클릭시 oracle 문서로 이동)

[Data Conversion Summary] 내용에서 Changeless, Convertible, Truncation, Lossy에 대한 설명은 아래 문서에서 확인할 수 있다.

https://docs.oracle.com/cd/E11882_01/server.112/e10729/ch12scanner.htm#g1019330

StatusDescription
ChangelessData remains the same in the new character set
– character set 변환시 데이터 변경없음
ConvertibleData can be successfully converted to the new character set
– character set 변환시 데이터 변경 가능함
TruncationData will be truncated if conversion takes place
– character set 변환시 데이터 잘림
LossyCharacter data will be lost if conversion takes place
– character set 변환시 데이터 손실됨(깨짐)

5.2.1. CSSCAN 실행 결과 저장 Table

csminst.sql 실행시 생성되는 여러 table 중 아래 table에 csscan 결과가 저장된다.

  • CSM$TABLES
  • CSM$COLUMNS
  • CSM$ERRORS

주의할 점은 매번 CSSCAN 실행시마다 이 table의 데이터는 모두 초기화된다는 점이다.(scan.txt, scan.out, scan.err 파일도 마찬가지로 초기화된다)

CSSCAN을 여러 번 실행하면서 결과를 비교하고자 할 경우는 별도 table로 백업해 두는 것이 좋다.

백업시에는 아래 DDL을 참고하기 바란다.

CREATE  TABLE Z_CSSCAN_COL_SUMMARY
AS
SELECT  '20140507' BASE_DT, U.USERNAME, TC.TABLE_NAME, TC.COLUMN_NAME
       ,CC.NUMROWS, CC.NULCNT, CC.CNVCNT, CC.CNVTYPE, CC.ERRCNT, CC.SIZERR
       ,CC.CNVERR, CC.MAXSIZ, CC.CHRSIZ
  FROM  CSMIG.CSM$COLUMNS CC INNER JOIN DBA_USERS U
          ON   (CC.USR# = U.USER_ID)
        INNER JOIN DBA_OBJECTS O
          ON   (CC.OBJ# = O.OBJECT_ID)
        INNER JOIN DBA_TAB_COLUMNS TC
          ON   (CC.COL# = TC.COLUMN_ID
            AND O.OBJECT_NAME = TC.TABLE_NAME)
 WHERE  1=1
   AND  U.USERNAME = 'LEG'
   AND  O.OBJECT_TYPE = 'TABLE'
   AND  CC.ERRCNT <> 0;

위 DDL의 실행결과로 생성되는 데이터 샘플은 다음과 같다.

Row#BASE_DTUSERNAMETABLE_NAMECOLUMN_NAMENUMROWSNULCNTCNVCNTCNVTYPEERRCNTSIZERRCNVERRMAXSIZCHRSIZ
120140507LEGZ_TESTVAL2000202120
220140507LEGSUB_MON_STATLINE_NUM7426000742632387426380
320140507LEGSUB_MON_STATSUB_STA_NM7426000742612687426540
420140507LEGSUB_MON_STATCOMMT742674250011190000
520140507LEGSUB_MON_STATREF_DES742674250010130000

여기까지 Oracle 권장 Character Set 변환 방법 (CSALTER, CSSCAN)에 대해 살펴보았다. 다음에는 US7ASCII, KO16MSWIN949 테스트 환경에서 CSSCAN을 실행한 결과에 대해 살펴본다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

ko_KR한국어