Oracle Character Set変換(7):5.4。 KO16MSWIN949環境CSSCAN実行結果

KO16MSWIN949環境CSSCANの実行結果を見てください。 schema生成、directory生成、csscan実行結果ファイルscan.txt、scan.out、scan.err内容、csscan用途に関する内容を確認することができる。

5.4。 KO16MSWIN949環境CSSCAN実行結果

5.4.1。スキーマの作成

KO16MSWIN949 instanceで以下のスクリプトを実行してcsscanを実行するためのスキーマを生成します。

-- MSWIN949
sqlplus sys/________@oramswin949 as sysdba
@%ORACLE_HOME%\rdbms\admin\csminst.sql
sqlplus sys/________@oramswin949 as sysdba
ALTER USER CSMIG DEFAULT TABLESPACE USERS;
EXIT
  • 行3:csminst.sqlを実行してcsmig user(schema)とcsscanの実行に必要なテーブルなどのオブジェクトを作成します。このとき、csmig userのデフォルトのtablespaceはsystemに指定されます。
  • 行5:csmig userのデフォルトのtablespaceをusersに変更します。 usersではなく、保存スペースが十分な別のtablespaceに変更してもよい。

5.4.2。 directoryの作成

csscan実行結果を保存するディレクトリを作成し、そのディレクトリに移動します。

mkdir D:\Temp\csscan\MSWIN949
cd D:\Temp\csscan\MSWIN949

5.4.3。 csscanの実行

Windowsのコマンドプロンプトで、次のコマンドでcsscanを実行します。

csscan \"sys/________@oramswin949 as sysdba\" full=y tochar=AL32UTF8

パラメータは2つを指定しました。

  • full:データベース全体をターゲットにスキャンするようにYを指定する
    • 注: user parameter で scan ターゲット user を指定したり、table, column parameter で scan ターゲットを詳細に指定したりすることができます
  • tochar: 変換するターゲット charset セットである AL32UTF8 指定 (CHAR, VARCHAR2, CLOB, LONG type scan)
    • ちなみに、NCHAR、NVARCHAR2、NCLOB型をスキャンするにはtoncharパラメータを指定する必要があります

5.4.4。 csscan実行結果の確認 - scan.txt(結果サマリーレポート)

KO16MSWIN949テスト環境では、scan.txtの全内容は次のとおりです。

Database Scan Summary Report

Time Started  : 2014-05-07 20:21:51
Time Completed: 2014-05-07 20:22:46

Process ID         Time Started       Time Completed
---------- -------------------- --------------------
​​​​​​​​​1  2014-05-07 20:22:04  2014-05-07 20:22:45
---------- -------------------- --------------------

[Database Size]

Tablespace                           Used            Free           Total       Expansion
------------------------- --------------- --------------- --------------- ---------------
SYSTEM                            563.25M         136.75M         700.00M            .00K
SYSAUX                            360.19M         239.81M         600.00M           2.00K
UNDOTBS1                           19.25M         465.75M         485.00M            .00K
TEMP                                 .00K            .00K            .00K            .00K
USERS                               1.81M           3.19M           5.00M          39.00K
------------------------- --------------- --------------- --------------- ---------------
Total                             944.50M         845.50M       1,790.00M          42.00K

[Database Scan Parameters]

Parameter                      Value                                           
------------------------------ ------------------------------------------------
CSSCAN Version                 v2.1                                            
Instance Name                  oramswin949                                     
Database Version               11.2.0.1.0                                      
Scan type                      Full database                                   
Scan CHAR data?                YES                                             
Database character set         KO16MSWIN949                                    
FROMCHAR                       KO16MSWIN949                                    
TOCHAR                         AL32UTF8                                        
Scan NCHAR data?               NO                                              
Array fetch buffer size        1024000                                         
Number of processes            1                                               
Capture convertible data?      NO                                              
------------------------------ ------------------------------------------------

[Scan Summary]

All character type data in the data dictionary are convertible to the new character set
Some character type application data are not convertible to the new character set

[Data Dictionary Conversion Summary]

Data Dictionary Tables:

Datatype                    Changeless      Convertible       Truncation            Lossy
--------------------- ---------------- ---------------- ---------------- ----------------
VARCHAR2                     2,566,115               36                0                0
CHAR                               354                0                0                0
LONG                           182,178                0                0                0
VARRAY                          39,205                0                0                0
--------------------- ---------------- ---------------- ---------------- ----------------
Total                        2,787,852               36                0                0
Total in percentage             99.999%           0.001%           0.000%           0.000%

The data dictionary can not be safely migrated using the CSALTER script

XML CSX Dictionary Tables:

Datatype                    Changeless      Convertible       Truncation            Lossy
--------------------- ---------------- ---------------- ---------------- ----------------
VARCHAR2                           493                0                0                0
CHAR                                 0                0                0                0
LONG                                 0                0                0                0
VARRAY                               0                0                0                0
--------------------- ---------------- ---------------- ---------------- ----------------
Total                              493                0                0                0
Total in percentage            100.000%           0.000%           0.000%           0.000%

[Application Data Conversion Summary]

Datatype                    Changeless      Convertible       Truncation            Lossy
--------------------- ---------------- ---------------- ---------------- ----------------
VARCHAR2                     2,579,942           14,635              309                0
CHAR                                 0                0                0                0
LONG                                 0                0                0                0
VARRAY                               0                0                0                0
--------------------- ---------------- ---------------- ---------------- ----------------
Total                        2,579,942           14,635              309                0
Total in percentage             99.424%           0.564%           0.012%           0.000%

[Distribution of Convertible, Truncated and Lossy Data by Table]

Data Dictionary Tables:

USER.TABLE                                              Convertible       Truncation            Lossy
-------------------------------------------------- ---------------- ---------------- ----------------
SYS.COM$                                                         11                0                0
SYS.ERROR$                                                       10                0                0
SYS.JOB$                                                          2                0                0
SYS.SCHEDULER$_JOB                                                8                0                0
SYS.SCHEDULER$_PROGRAM                                            5                0                0
-------------------------------------------------- ---------------- ---------------- ----------------

XML CSX Dictionary Tables:

USER.TABLE                                              Convertible       Truncation            Lossy
-------------------------------------------------- ---------------- ---------------- ----------------
-------------------------------------------------- ---------------- ---------------- ----------------

Application Data:

USER.TABLE                                              Convertible       Truncation            Lossy
-------------------------------------------------- ---------------- ---------------- ----------------
APEX_030200.WWV_FLOW_UPGRADE_PROGRESS                            89                0                0
LEG.SUB_MON_STAT                                             14,544              309                0
LEG.Z_TEST                                                        2                0                0
-------------------------------------------------- ---------------- ---------------- ----------------

[Distribution of Convertible, Truncated and Lossy Data by Column]

Data Dictionary Tables:

USER.TABLE|COLUMN                                       Convertible       Truncation            Lossy
-------------------------------------------------- ---------------- ---------------- ----------------
SYS.COM$|COMMENT$                                                11                0                0
SYS.ERROR$|TEXT                                                  10                0                0
SYS.JOB$|NLSENV                                                   2                0                0
SYS.SCHEDULER$_JOB|NLS_ENV                                        8                0                0
SYS.SCHEDULER$_PROGRAM|NLS_ENV                                    5                0                0
-------------------------------------------------- ---------------- ---------------- ----------------

XML CSX Dictionary Tables:

USER.TABLE|COLUMN                                       Convertible       Truncation            Lossy
-------------------------------------------------- ---------------- ---------------- ----------------
-------------------------------------------------- ---------------- ---------------- ----------------

Application Data:

USER.TABLE|COLUMN                                       Convertible       Truncation            Lossy
-------------------------------------------------- ---------------- ---------------- ----------------
APEX_030200.WWV_FLOW_UPGRADE_PROGRESS|UPGRADE_ERR                89                0                0
LEG.SUB_MON_STAT|COMMT                                            0                1                0
LEG.SUB_MON_STAT|LINE_NUM                                     7,286              140                0
LEG.SUB_MON_STAT|SUB_STA_NM                                   7,258              168                0
LEG.Z_TEST|VAL                                                    2                0                0
-------------------------------------------------- ---------------- ---------------- ----------------

[Indexes to be Rebuilt]

USER.INDEX on USER.TABLE(COLUMN)                                                         
-----------------------------------------------------------------------------------------
SYS.I_SCHEDULER_JOB4 on SYS.SCHEDULER$_JOB(SYS_NC00056$)
SYS.I_SCHEDULER_JOB1 on SYS.SCHEDULER$_JOB(SYS_NC00055$)
-----------------------------------------------------------------------------------------

この中で、「Application Data Conversion Summary」の内容がOracle System Dataではなく、ユーザーが作成したDataにtype別にスキャンした内容です。

[Application Data Conversion Summary]

Datatype                    Changeless      Convertible       Truncation            Lossy
--------------------- ---------------- ---------------- ---------------- ----------------
VARCHAR2                     2,579,942           14,635              309                0
CHAR                                 0                0                0                0
LONG                                 0                0                0                0
VARRAY                               0                0                0                0
--------------------- ---------------- ---------------- ---------------- ----------------
Total                        2,579,942           14,635              309                0
Total in percentage             99.424%           0.564%           0.012%           0.000%

上記の内容を解釈すると次のようになる。

  • VARCHAR2 typeに対してAL32UTF8に変更すると、2,579,942個の値は変更なし(Changeless)のまま切り替えることができ、14,635個の値は変更可能(Convertable)し、309個の値が切り捨て(Truncation)され、損失/割れ(Lossy)この発生する値はありません
  • その他 CHAR, LONG, VARRAY typeのデータは変換対象がない

上記の内容では、Changeless、Convertible、Truncation、Lossyの説明は前の記事に書いておき、以下にもう一度表記しておく。

Oracle Character Set変換(5) - 5.2。 CSSCANの使い方

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
– 文字セット変換時にデータを切り捨てる
LossyCharacter data will be lost if conversion takes place
– 文字セット変換時にデータが失われる(壊れている)

「Distribution of Convertible, Truncated and Lossy Data by Table」, 「Distribution of Convertible, Truncated and Lossy Data by Column」の内容は、各テーブルとカラムごとにスキャンした結果である。

以下にファイルの一部内容を抜粋しておく。

[Distribution of Convertible, Truncated and Lossy Data by Table]

...
Application Data:

USER.TABLE                                              Convertible       Truncation            Lossy
-------------------------------------------------- ---------------- ---------------- ----------------
APEX_030200.WWV_FLOW_UPGRADE_PROGRESS                            89                0                0
LEG.SUB_MON_STAT                                             14,544              309                0
LEG.Z_TEST                                                        2                0                0
-------------------------------------------------- ---------------- ---------------- ----------------

[Distribution of Convertible, Truncated and Lossy Data by Column]

...
Application Data:

USER.TABLE|COLUMN                                       Convertible       Truncation            Lossy
-------------------------------------------------- ---------------- ---------------- ----------------
APEX_030200.WWV_FLOW_UPGRADE_PROGRESS|UPGRADE_ERR                89                0                0
LEG.SUB_MON_STAT|COMMT                                            0                1                0
LEG.SUB_MON_STAT|LINE_NUM                                     7,286              140                0
LEG.SUB_MON_STAT|SUB_STA_NM                                   7,258              168                0
LEG.Z_TEST|VAL                                                    2                0                0
-------------------------------------------------- ---------------- ---------------- ----------------

上記の内容を解釈すると次のようになる。

  • LEG.SUB_MON_STATテーブルはAL32UTF8に変更すると14,544個の値は正常に変換(Convertible)され、309個の値が切り捨て(Truncation)され、損失/壊れ(Lossy)が発生する値はない。各列ごとに次のようになります
    • COMMT:AL32UTF8に変更すると正常に変換される値はなく、1つの値が切り捨てられ(Truncation)、損失/壊れ(Lossy)が発生する値はありません。
    • LINE_NUM:AL32UTF8に変更すると、7,286個の値は正常に変換され、140個の値が切り捨てられ、損失/破損(Lossy)が発生する値はありません
    • SUB_STA_NM:AL32UTF8に変更した場合、7,258個の値は正常に変換され、168個の値が切り捨てられ、損失/破損(Lossy)が発生する値はありません
  • LEG.Z_TESTテーブルはAL32UTF8に変更すると、2つのvalueが正常に変換(Convertible)され、切り捨て(Truncation)したり、損失/壊れ(Lossy)が発生するvalueはない。 VAL列がこれに該当します。

5.4.5。 csscan実行結果の確認-scan.out(scanターゲットテーブル情報)

scan.outファイルでは、scanターゲットテーブルのリストを確認できます。

Character Set Scanner v2.2 : Release 11.2.0.1.0 - Production on Wed May 7 20:21:48 2014

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Enter array fetch buffer size: 1024000 > 
Enter number of scan processes to utilize(1..64): 1 > 
Enumerating tables to scan...

. process 1 scanning SYS.SOURCE$[AAAADfAABAAAAXYAAA]
. process 1 scanning SYS.PARAMETER$[AAAAH3AABAAAAzgAAA]
. process 1 scanning SYS.TYPE$[AAAAH3AABAAAAzgAAA]
. process 1 scanning SYS.ATTRIBUTE$[AAAAH3AABAAAAzgAAA]
...
. process 1 scanning MDSYS.SDO_COORD_REF_SYS[AAAPKtAACAAAEtYAAA]
. process 1 scanning XDB.XDB$H_LINK[AAANh/AACAAACUwAAA]
. process 1 scanning SYS.SYS$SERVICE_METRICS_TAB[AAADI9AACAAACEAAAA]
...
. process 1 scanning LEG.SUB_MON_STAT[AAAQSRAAEAAAACIAAA]
...
. process 1 scanning XDB.PRIN_PT[AAAN2VAACAAAEDoAAA]
ORA-30967: operation directly on the Path Table is disallowed

CSS-00144: failed to scan table XDB.PRIN_PT


Creating Database Scan Summary Report...

Creating Individual Exception Report...

Scanner terminated successfully.

ここでは以下の内容を確認することができる。

  • 行23:テスト環境に作成したLEGユーザーのSUB_MON_STATテーブルをスキャンします

5.4.6。 csscan実行結果の確認-scan.err(エラー詳細履歴)

scan.err ファイルでは、各テーブル、列の character set 変換エラー履歴を詳細に見ることができる。

Database Scan Individual Exception Report


[Database Scan Parameters]

Parameter                      Value
------------------------------ ------------------------------------------------
CSSCAN Version                 v2.1
Instance Name                  oramswin949
Database Version               11.2.0.1.0
Scan type                      Full database
Scan CHAR data?                YES
Database character set         KO16MSWIN949
FROMCHAR                       KO16MSWIN949
TOCHAR                         AL32UTF8
Scan NCHAR data?               NO
Array fetch buffer size        1024000
Number of processes            1
Capture convertible data?      NO
------------------------------ ------------------------------------------------

[Data Dictionary individual exceptions]

User  : SYS
Table : COM$
Column: COMMENT$
Type  : VARCHAR2(4000)
Number of Exceptions         : 0
Max Post Conversion Data Size: 381

ROWID              Exception Type      Size Cell Data(first 30 bytes)
------------------ ------------------ ----- ------------------------------
AAAACIAABAAARCPABN convertible              사용월
AAAACIAABAAARCPABO convertible              호선명
AAAACIAABAAARCPABP convertible              지하철역코드
AAAACIAABAAARCPABQ convertible              지하철역명
AAAACIAABAAARCPABR convertible              승차인원수
AAAACIAABAAARCPABS convertible              하차인원수
AAAACIAABAAARCPABT convertible              작업일자
AAAACIAABAAARCPABU convertible              비고
AAAACIAABAAARCPABV convertible              참조설명
AAAACIAABAAARCPABW convertible              참조이미지
AAAACIAABAAARCPABX convertible              지하철역별승하차인원
------------------ ------------------ ----- ------------------------------


[Application data individual exceptions]

User  : LEG
Table : SUB_MON_STAT
Column: LINE_NUM
Type  : VARCHAR2(14)
Number of Exceptions         : 140
Max Post Conversion Data Size: 20

ROWID              Exception Type      Size Cell Data(first 30 bytes)
------------------ ------------------ ----- ------------------------------
AAAQSRAAEAAAAC/ABp exceed column size    20 공항철도 1호선
AAAQSRAAEAAAAC/ABq exceed column size    20 공항철도 1호선
AAAQSRAAEAAAAC/ABr exceed column size    20 공항철도 1호선
...
------------------ ------------------ ----- ------------------------------

User  : LEG
Table : SUB_MON_STAT
Column: COMMT
Type  : VARCHAR2(4000)
Number of Exceptions         : 1
Max Post Conversion Data Size: 4500

ROWID              Exception Type      Size Cell Data(first 30 bytes)
------------------ ------------------ ----- ------------------------------
AAAQSRAAEAAAACNAAA exceed column size  4500 서울역서울역서울역서울역서울역
------------------ ------------------ ----- ------------------------------

User  : LEG
Table : SUB_MON_STAT
Column: SUB_STA_NM
Type  : VARCHAR2(20)
Number of Exceptions         : 168
Max Post Conversion Data Size: 27

ROWID              Exception Type      Size Cell Data(first 30 bytes)
------------------ ------------------ ----- ------------------------------
AAAQSRAAEAAAAC+AA8 exceed column size    24 디지털미디어시티
AAAQSRAAEAAAAC+AAC exceed column size    21 가산디지털단지
AAAQSRAAEAAAAC/AAR exceed column size    27 동대문역사문화공원
...
------------------ ------------------ ----- ------------------------------

KO16MSWIN949環境でのCSSCAN実行結果ファイルは、以下のgithubリポジトリで確認できます。

5.5。注:CSSCAN用途

CSSCANは2つの用途に利用できます。

  1. 変換時に切り捨てられたり壊れたりするデータのRowID、ColumnIDの確認 - >データの精製に活用
    • 切り捨てられたり壊れたりするデータがほとんどの場合(例:US7ASCII to AL32UTF8)、手作業でほとんどすべてのデータを洗練する必要があるため、時間と費用がかかり、大きな意味はありません
  2. As-Is列の長さを増やす列リストを確認する - > To-Beデータモデルの設計に活用
    • To-Be設計時に標準ドメインの桁数決定に活用できるので、かなり意味がある

また、As-Isデータに対してCharacter Setを変換した複製テーブルをあらかじめ構成する場合でも、この長さ(MAXSIZ)を参照して生成することが好ましい。 As-Isテーブルの列の長さと同じに設定すると、Character Set変換後の長さがAs-Isテーブルの列の長さを超えるデータは、次のエラーでデータのロードに失敗します。

– ORA-12899: value too large for column “OWNER”.”TABLE”.”COLUMN” (actual: Inserted length, maximum: Declared length)

(例: ORA-12899: value too large for column “LEG”.”SUB_MON_STAT”.”LINE_NUM” (actual: 16, maximum: 14) )


以下は、CSSCAN実行後、特定のUSERのテーブル列のうち変換時にエラーが発生する対象と、現在の長さ、変換長、CLOBに変換すべきかどうかを確認するQuery文です。

SELECT  U.USERNAME, TC.TABLE_NAME, TC.COLUMN_NAME, TC.DATA_TYPE, TC.DATA_LENGTH, CC.MAXSIZ
       ,CASE WHEN TC.DATA_TYPE <> 'CLOB' AND CC.MAXSIZ > 4000 THEN 'Y' END AS CLOB_CONV_YN
  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  U.USERNAME = 'LEG'
   AND  O.OBJECT_TYPE = 'TABLE'
   AND  CC.ERRCNT <> 0;

抽出されるデータのサンプルは以下の通りである。

Row#USERNAMETABLE_NAMECOLUMN_NAMEDATA_TYPEDATA_LENGTH
(現在の長さ)
MAXSIZ
(変換長)
CLOB_CONV_YN
(CLOB 変換可)
1LEGSUB_MON_STATLINE_NUMVARCHAR21420 
2LEGSUB_MON_STATSUB_STA_NMVARCHAR22027 
3LEGSUB_MON_STATCOMMTVARCHAR240004500Y

各列の意味は次のとおりです。

列名意味
USERNAMEテーブルの所有者
TABLE_NAMEターゲットテーブル名
COLUMN_NAMEターゲット表の列名
DATA_TYPEターゲット列の現在のデータ型
DATA_LENGTHターゲット列の現在のデータ長
MAXSIZCharacter Set 変換後に予想される最大長
CLOB_CONV_YN現在、VARCHAR2タイプをCLOBに変更する対象かどうか(Y:CLOBに変更レビュー対象)

注意すべきは、CSSCANが実行された時点のデータを基準に確認したため、この基準で長さを増加させても、列長の増加またはデータの増加によって「ORA-12899: value too large for column」エラーが発生する可能性はまだあるという点だ。


これまで、KO16MSWIN949テスト環境でCSSCANを実行した結果について見てきました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ja日本語