Oracle 字符集转换(7):5.4。 KO16MSWIN949 环境 CSSCAN 执行结果

检查 KO16MSWIN949 环境 CSSCAN 执行结果。您可以检查模式创建、目录创建、csscan 执行结果文件 scan.txt、scan.out、scan.err 内容和 csscan 目的。

5.4. KO16MSWIN949 环境 CSSCAN 执行结果

5.4.1。创建架构

在 KO16MSWIN949 实例上执行下面的脚本,为 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 用户(模式)和 csscan 执行所需的表等对象。此时,csmig 用户的默认表空间被指定为 system。
  • 第 5 行:将 csmig 用户的默认表空间更改为用户。可以换成users以外的其他有足够存储空间的表空间。

5.4.2.创建目录

创建一个目录来保存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

指定了两个参数。

  • full:指定Y扫描整个数据库
    • 作为参考,您可以使用用户参数指定扫描目标用户,也可以使用表或列参数详细指定扫描目标。
  • tochar:指定AL32UTF8,要转换的目标字符集(CHAR、VARCHAR2、CLOB、LONG类型扫描)
    • 作为参考,要扫描 NCHAR、NVARCHAR2 和 NCLOB 类型,需要指定 tonchar 参数。

5.4.4。检查csscan执行result-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$)
-----------------------------------------------------------------------------------------

其中,“应用数据转换汇总”的内容不是Oracle系统数据,而是用户创建的数据,按类型扫描。

[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类型改为AL32UTF8时,2,579,942个值可以不变转换(Changeless),14,635个值可以转换,309个值被截断(Truncation)和丢失/损坏(Lossy)没有值发生这种情况
  • 其他 CHAR、LONG 和 VARRAY 类型的数据不进行转换。

上面对Changeless、Convertible、Truncation、Lossy的解释在上一篇已经写过了,下面再次标出。

Oracle 字符集转换 (5) – 5.2。如何使用 CSSCAN

地位描述
不变的数据在新字符集中保持不变
– 转换字符集时无数据变化
敞篷车数据可以成功转换为新的字符集
– 转换字符集时可以更改数据
截断如果发生转换,数据将被截断
– 转换字符集时数据被截断
有损如果发生转换,字符数据将丢失
– 转换字符集时数据丢失(损坏)

“可转换、截断和有损数据按表分布”和“可转换、截断和有损数据按列分布”是对每个表和列的扫描结果。

以下是该文件的一些摘录。

[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),没有任何值丢失/损坏。每列如下
    • COMMT:当更改为 AL32UTF8 时,没有值正常转换,一个值被截断,没有值丢失/损坏。
    • LINE_NUM:改为AL32UTF8时,正常转换7286个值(Convertible),截断140个值(Truncation),没有任何值丢失/损坏(Lossy)
    • SUB_STA_NM:改成AL32UTF8时,7258个值正常转换,168个值被截断,没有任何值丢失/损坏。
  • 当LEG.Z_TEST表改成AL32UTF8时,两个值正常转换,没有任何值被截断或丢失/损坏。 VAL 列对应于此。

5.4.5。检查csscan执行结果-scan.out(扫描目标表信息)

在 scan.out 文件中,您可以检查要扫描的表列表。

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文件中可以看到各个表和列的字符集转换错误的详细信息。

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 可用于两个目的。

  1. 检查转换过程中被切断或损坏的数据的RowID和ColumnID –> 用于数据净化
    • 如果大部分数据被截断或损坏(例如 US7ASCII 到 AL32UTF8),几乎所有数据都必须手动清理,这既费时又费钱。
  2. 检查列列表以增加As-Is列的长度–>用于设计To-Be数据模型
    • 它非常有意义,因为它可以用来在设计 To-Be 时确定标准域中的位数。

此外,建议在创建预先转换为原样数据的字符集的复制表时参考此长度(MAXSIZ)。如果 As-Is 表的列长度配置相同,如果字符集转换后增加的长度超过 As-Is 表的列长度,则数据加载失败并显示以下错误。

– ORA-12899: 列“OWNER”.”TABLE”.”COLUMN” 的值太大(实际:插入的长度,最大值:声明的长度)

(例如 ORA-12899:“LEG”列的值太大。“SUB_MON_STAT”。“LINE_NUM”(实际值:16,最大值:14))


下面是一条查询语句,查询执行CSSCAN后特定用户的表列之间转换出错的对象,当前长度,转换长度,是否转换为CLOB。

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#用户名TABLE_NAMECOLUMN_NAME数据类型数据长度
(当前长度)
最大尺寸
(变换长度)
CLOB_CONV_YN
(CLOB 转换)
1SUB_MON_STATLINE_NUM 行VARCHAR21420 
2SUB_MON_STATSUB_STA_NMVARCHAR22027 
3SUB_MON_STAT通讯VARCHAR240004500

每一列的含义如下。

列名意义
用户名表主
TABLE_NAME目标表名
COLUMN_NAME目标表的列名
数据类型目标列的当前数据类型
数据长度目标列的当前数据长度
最大尺寸字符集转换后的预期最大长度
CLOB_CONV_YN当前VARCHAR2类型是否为CLOB变更(Y:Subject to change to CLOB)

请注意,由于数据是根据执行 CSSCAN 时的数据进行检查的,因此即使根据此标准增加长度,根据列长度的增加,可能会出现“ORA-12899: value too large for column”错误或数据。可能性仍然存在。


到目前为止,我们已经查看了在 KO16MSWIN949 测试环境中运行 CSSCAN 的结果。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

zh_CN简体中文