转载自:http://blog.itpub.net/4227/viewspace-706635/

工具csscan用于检查从一个字符集转换到另一个字符集,数据库中的数据是否会产生丢失、截断等现象。

这个工具很早就出现了,不过由于长久以来牵制到字符集转换的工作不是很多,因此对于这个工具没什么研究,这次需要将ZHS16GBK转换到AL32UTF8,尝试了一下csscan的功能,发现这个工具还是很方便的。

[oracle@dbserver1 bin]$ csscan userid=thams/thams table=libfile722 tochar=AL32UTF8 log=/home/oracle/scan_722

Character Set Scanner v2.2 : Release 11.2.0.2.0 - Production on Wed Aug 31 10:54:15 2011

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

CSS-00127: user thams does not have DBA privilege

Scanner terminated unsuccessfully.

错误信息很明显,连接用户不是DBA角色,如果用system用户连接进行这个命令:

[oracle@dbserver1 bin]$ csscan userid=system/oracle table=thams.libfile722 tochar=AL32UTF8 log=/home/oracle/scan_722

Character Set Scanner v2.2 : Release 11.2.0.2.0 - Production on Wed Aug 31 10:54:45 2011

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

CSS-00107: Character set migration utility schema not installed

Scanner terminated unsuccessfully.

导致这个错误是由于CSSCAN工具需要在数据库中建立一个CSMIG用户:

[oracle@dbserver1 bin]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Wed Aug 31 10:57:28 2011

Copyright (c) 1982, 2010, Oracle.All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL> @?/rdbms/admin/csminst

User created.

Grant succeeded.

Grant succeeded.

Grant succeeded.

Grant succeeded.

Grant succeeded.

Grant succeeded.

Grant succeeded.

User altered.

1 row created.

1 row updated.

Table created.
.
.
.
View created.

View created.

View created.

View created.

Grant succeeded.

Grant succeeded.

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

[oracle@dbserver1 bin]$ csscan userid=system/oracle table=thams.libfile722 tochar=AL32UTF8 log=/home/oracle/scan_722

Character Set Scanner v2.2 : Release 11.2.0.2.0 - Production on Wed Aug 31 10:59:35 2011

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

Enter array fetch buffer size: 1024000 > 4096000

Enter number of scan processes to utilize(1..64): 1 >

Enumerating table to scan...

. process 1 scanning THAMS.LIBFILE722[AAAP2KAAAAAB7XYAAA]

Creating Database Scan Summary Report...

Creating Individual Exception Report...

Scanner terminated successfully.

调用csminst.sql脚本创建辅助用户和对象后,再次运行csscan工具,对表中数据进行转换前的扫描。

工具csscan的调用有命令行方式,和交互两种,当命令行没有提供足够的参数,工具会以交互方式获取其他参数。

操作完成后,可以检查对应的日志信息:

[oracle@dbserver1 bin]$ more /home/oracle/scan_722.err
Database Scan Individual Exception Report

[Database Scan Parameters]

ParameterValue
------------------------------ ------------------------------------------------
CSSCAN Versionv2.1
Instance Namefhacdb1
Database Version11.2.0.2.0
Scan typeSelective tables
Scan CHAR data?YES
Database character setZHS16GBK
FROMCHARZHS16GBK
TOCHARAL32UTF8
Scan NCHAR data?NO
Array fetch buffer size4096000
Number of processes1
Capture convertible data?NO
------------------------------ ------------------------------------------------

[Data Dictionary individual exceptions]

[Application data individual exceptions]

User: THAMS
Table : LIBFILE722
Column: F4
Type: VARCHAR2(42)
Number of Exceptions: 1
Max Post Conversion Data Size: 45

ROWIDException TypeSize Cell Data(first 30 bytes)
------------------ ------------------ ----- ------------------------------
AAAP2KAAAAAB+u0AAE exceed column size45巡视台湾兼理学政陕西道监察御史
------------------ ------------------ ----- ------------------------------

[oracle@dbserver1 bin]$ more /home/oracle/scan_722.out

Character Set Scanner v2.2 : Release 11.2.0.2.0 - Production on Wed Aug 31 10:59:35 2011

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, 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 table to scan...

. process 1 scanning THAMS.LIBFILE722[AAAP2KAAAAAB7XYAAA]

Creating Database Scan Summary Report...

Creating Individual Exception Report...

Scanner terminated successfully.
[oracle@dbserver1 bin]$ more /home/oracle/scan_722.txt
Database Scan Summary Report

Time Started: 2011-08-31 10:59:48
Time Completed: 2011-08-31 10:59:50

Process IDTime StartedTime Completed
---------- -------------------- --------------------
12011-08-31 10:59:492011-08-31 10:59:49
---------- -------------------- --------------------

[Database Size]

TablespaceUsedFreeTotalExpansion
------------------------- --------------- --------------- --------------- ---------------
SYSTEM581.81M118.19M700.00M.00K
SYSAUX521.38M78.63M600.00M.00K
UNDOTBS17.44M20,699.56M20,707.00M.00K
TEMP.00K.00K.00K.00K
USERS1,930.38M139.88M2,070.25M.00K
LOB_AU2M8,176.13M1,937,423.88M1,945,600.00M212.00K
LOB_AU8M10,074.69M501,925.31M512,000.00M.00K
DATA_ARCHIVE5,332.06M1,018,667.94M1,024,000.00M.00K
LOB_AU32M4,772.38M507,227.63M512,000.00M.00K
LOB_AU64M4,548.38M507,451.63M512,000.00M.00K
------------------------- --------------- --------------- --------------- ---------------
Total35,944.63M4,493,732.63M4,529,677.25M212.00K

[Database Scan Parameters]

ParameterValue
------------------------------ ------------------------------------------------
CSSCAN Versionv2.1
Instance Namefhacdb1
Database Version11.2.0.2.0
Scan typeSelective tables
Scan CHAR data?YES
Database character setZHS16GBK
FROMCHARZHS16GBK
TOCHARAL32UTF8
Scan NCHAR data?NO
Array fetch buffer size4096000
Number of processes1
Capture convertible data?NO
------------------------------ ------------------------------------------------

[Scan Summary]

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

[Data Dictionary Conversion Summary]

Data Dictionary Tables:

DatatypeChangelessConvertibleTruncationLossy
--------------------- ---------------- ---------------- ---------------- ----------------
VARCHAR20000
CHAR0000
LONG0000
VARRAY0000
--------------------- ---------------- ---------------- ---------------- ----------------
Total0000
Total in percentage0.000%0.000%0.000%0.000%

XML CSX Dictionary Tables:

DatatypeChangelessConvertibleTruncationLossy
--------------------- ---------------- ---------------- ---------------- ----------------
VARCHAR20000
CHAR0000
LONG0000
VARRAY0000
--------------------- ---------------- ---------------- ---------------- ----------------
Total0000
Total in percentage0.000%0.000%0.000%0.000%

[Application Data Conversion Summary]

DatatypeChangelessConvertibleTruncationLossy
--------------------- ---------------- ---------------- ---------------- ----------------
VARCHAR2222,68328,30810
CHAR0000
LONG0000
VARRAY0000
--------------------- ---------------- ---------------- ---------------- ----------------
Total222,68328,30810
Total in percentage88.721%11.278%0.000%0.000%

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

Data Dictionary Tables:

USER.TABLEConvertibleTruncationLossy
---------------------------------------- ---------------- ---------------- ----------------
---------------------------------------- ---------------- ---------------- ----------------

XML CSX Dictionary Tables:

USER.TABLEConvertibleTruncationLossy
---------------------------------------- ---------------- ---------------- ----------------
---------------------------------------- ---------------- ---------------- ----------------

Application Data:

USER.TABLEConvertibleTruncationLossy
---------------------------------------- ---------------- ---------------- ----------------
THAMS.LIBFILE72228,30810
---------------------------------------- ---------------- ---------------- ----------------

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

Data Dictionary Tables:

USER.TABLE|COLUMNConvertibleTruncationLossy
---------------------------------------- ---------------- ---------------- ----------------
---------------------------------------- ---------------- ---------------- ----------------

XML CSX Dictionary Tables:

USER.TABLE|COLUMNConvertibleTruncationLossy
---------------------------------------- ---------------- ---------------- ----------------
---------------------------------------- ---------------- ---------------- ----------------

Application Data:

USER.TABLE|COLUMNConvertibleTruncationLossy
---------------------------------------- ---------------- ---------------- ----------------
THAMS.LIBFILE722|F114,64800
THAMS.LIBFILE722|F24,64300
THAMS.LIBFILE722|F34,64800
THAMS.LIBFILE722|F4622200
THAMS.LIBFILE722|F64,31200
THAMS.LIBFILE722|F756500
THAMS.LIBFILE722|TITLE4,64200
---------------------------------------- ---------------- ---------------- ---------------

[Indexes to be Rebuilt]

USER.INDEX on USER.TABLE(COLUMN)
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------

工具csscan会生成三个日志,一个err记录错误信息,比如这个例子中,一个列的长度需要变长,否则无法容纳数据长度的扩展;一个log记录操作步骤;而txt则是最终的汇总信息。