`
streamsong
  • 浏览: 82219 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ORACLE字符集检查工具CSSCAN

阅读更多

我们在创建数据库的时候,通常会把字符集设置为ZHS16GBK,有些时候,ZHS16GBK字符集满足不了业务的需求,会更换字符集,以AL32UTF8为例,ZHS16GBK字符集每个汉字以2个字符存放,而AL32UTF8字符集每个汉字是以3个自己存放,这样,有可能就要增大某些表的字段长度。ORACLE提供了CSSCAN工具来查看字符集转换的时候哪些字段需要增大到多大的长度。(当然,也可以写PL/SQL将所有的表为CHAR,VARCHAR2的字段都增大1.5倍),既然ORACLE提供了CSSCAN工具,我们就要学着使用。
在我们创建数据库的时候,CSSCAN工具一般不会被安装,我们需要手动执行$ORACLE_HOME/rdbms/admin/csminst.sql手动创建,这个操作很简单:
SQL> @?/rdbms/admin/csminst.sql
用户已创建。
授权成功。


有可能会遇到如下的错误
drop public synonym csm$parameters
                    *
第 1 行出现错误:
ORA-01432: 要删除的公用同义词不存在
查看csminst.sql文件,您会发现
drop public synonym csm$parameters
/
create public synonym csm$parameters for csmig.csm$parameters
/
这个错误是由于csminst.sql这个脚本在创建同义词csm$parameters之前,会先删除这个同义词,然后在创建,也就是如果这个同义词存在,先删除,然后再创建,这个错误可以忽略。
CSSCAN工具安装完后,就可以使用CSSCAN工具查看字符集转换之后,哪些字段需要增大长度。操作也很简单,我们拿T_FONDS_INFO表为例:
SQL> desc T_FONDS_INFO
名称                                      是否为空? 类型
----------------------------------------- -------- -------------------
FOND_CODE                                          VARCHAR2(2)
FOND_NAME                                          VARCHAR2(33)
FONDS_NUMBER                                       VARCHAR2(40)
ADMITER                                            VARCHAR2(3)
TERM                                               VARCHAR2(35)
FILE_SUM                                           NUMBER
PRINCIPLE                                          VARCHAR2(315)
FOND_INTRO                                         CLOB
REMARK                                             VARCHAR2(70)
利用CSSCAN查看哪些字段需要增大
C:\Documents and Settings\Administrator>csscan system/oracle table= T_FONDS_INFO tochar= al32utf8 log=d:\css.log
Character Set Scanner v2.2 : Release 11.2.0.1.0 - Production on 星期五 9月 23 16:36:01 2011
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 >--默认为1M,可根据实际情况输入大一点的值
Enter number of scan processes to utilize(1..64): 1 >--多少个进程来检查
Enumerating tables to scan...
. process 1 scanning STREAM.T_FONDS_INFO[AAASgRAAEAAAADwAAA]
Creating Database Scan Summary Report...
Creating Individual Exception Report...
Scanner terminated successfully.
执行完之后会在D:\下看到css.log.err、css.log1.out和css.log1.txt文件,检查css.log1.err文件可以看到哪些字段需要修改到多大。例如:
User  : STREAM
Table : T_FONDS_INFO
Column: TERM
Type  : VARCHAR2(35)
Number of Exceptions         : 3
Max Post Conversion Data Size: 46
此部分说明STREAM下的T_FONDS_INFO表的TERM字段更改为AL32UTF8字符集之后,有3条数据需要增大字段长度,需要从原长度35增大到46,下面是数据在AL32UTF8字符集下的实际长度:
ROWID              Exception Type      Size Cell Data(first 30 bytes)    
------------------ ------------------ ----- ------------------------------
AAASgRAAEAAAAD0AAB exceed column size    46 光绪二十七年1901--光绪二十八年
AAASgRAAEAAAAD1AAB exceed column size    40 光绪二十八年1902--宣统三年1911
AAASgRAAEAAAAD1AAC exceed column size    40 光绪二十一年1895--宣统四年1912
------------------ ------------------ ----- ------------------------------
     可以通过csscan help=y查看CSSCAN的各个参数
C:\Documents and Settings\Administrator>csscan help=y
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.
Linux系统下运行CSSCAN工具可能会遇到csscan: error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file: No such file or directory错误,可以用下面的方法解决:
[oracle@dbserver2 bin]$ env|grep LD_LIB
LD_LIBRARY_PATH=/etc/emc/rsa/cst/lib
[oracle@dbserver2 bin]$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
当然,也可以利用数据字典生成脚本直接修改所有表的CHAR类型的字段长度为原值的1.5倍,例如:
创建spool.sql文件,内容如下:
set heading off
set feedback OFF
set echo off
set pages 1000 lines 120
spool d:\length.sql
select 'alter table '||table_name||' modify'||'('||COLUMN_NAME||' '||data_type||'('||round(DATA_LENGTH*1.5)||'));' from user_tab_columns where data_type like '%CHAR%';
spool off
在SQL*PLUS里执行
@d:\spool.sql
这样生成的length.sql文件内容如下:
alter table T_SPECIAL modify(CLASS_NUM VARCHAR2(45));
alter table T_SPECIAL modify(CLASS_NUM_A VARCHAR2(45));
alter table T_FONDS_INFO_RAW modify(FOND_ID VARCHAR2(15));
alter table T_FONDS_INFO_RAW modify(FOND_CODE VARCHAR2(60));
直接在SQL*PLUS里面运行D:\length.sql即可讲所有表的%CHAR%类型的字段长度都增大1.5倍。

0
1
分享到:
评论

相关推荐

    Oracle字符集扫描工具使用简介.pdf

    Oracle字符集扫描工具是Oracle数据库管理系统提供的一种实用工具,用于检查和评估字符数据在不同字符集之间的转换过程。字符集是Oracle数据库支持多种语言的基础,它定义了如何存储和显示字符。在实际操作中,当需要...

    如何更改Oracle字符集.doc

    Oracle字符集的更改是一个复杂的过程,涉及到数据库的底层结构和数据的编码方式。在Oracle数据库中,字符集用于定义字符的表示方式,不同的字符集对不同语言的支持程度和存储效率也不同。在本文中,我们将讨论如何...

    如何更改Oracle字符集[借鉴].pdf

    Oracle字符集更改是一个复杂的过程,尤其涉及到从超集字符集如UTF8转换为子集字符集如ZHS16GBK。在本文中,我们将探讨如何处理这个问题,以及更改字符集可能涉及的风险和步骤。 首先,Oracle数据库的字符集选择在...

    Oracle CSscan install guide

    CSscan(Character Set Scanner)是一款由Oracle提供的工具,主要用于检查数据库字符集设置的影响或帮助用户纠正不正确的`NLS_CHARACTERSET`配置。通过CSscan,用户可以更深入地了解数据库字符集更改对现有数据可能...

    CSscan summary

    CSscan(Character Set Scanner)是一款由Oracle提供的工具,用于分析数据库中的字符集兼容性问题。它可以帮助用户识别数据库中的数据是否与目标字符集兼容,从而为数据库字符集转换提供必要的信息。 #### 二、...

    csscan_12_linux_920.tar.Z

    Oracle9i 9.2.0 Character set scanner for Linux 应用Linux系统

    Oracle数据库10g支持全球化特性的平台Powe.pptx

    Oracle还提供了语言和字符集检测技术,如LCSSCAN和CSSCAN,用于检测文档或字节字符串的字符集编码和语言。这些工具基于统计分析,但其准确性受文本纯度影响,单一语言的书面文本通常能获得更准确的结果。 全球化...

    Oracle数据库10g-支持全球化特性的平台-Powe.pptx

    语言和字符集检测工具LCSSCAN和CSSCAN用于分析文本,但其准确性受文本纯度影响,如单一语言的书面文本检测效果更佳。 GDK是Oracle为中间层提供的全球化开发框架,简化了全球化的Java中间层应用程序的开发。它隐藏了...

    32位 oracle_product_instantclient_11_2_BIN.rar

    32位oracle11.2.0.1 BIN文件夹,数据库管理员版,包含sqlplus,imp,exp,impdp,expdp等完整工具。exe列表:adrci、agtctl、amdu、asmtool、asmtoolg、CreatDep、csscan、dbv、dg4odbc、dg4pwd、dgmgrl、diskmon、...

    vc can通讯案例有源代码

    5. **调试与测试**:为了验证代码的正确性,通常需要一个实际的CAN网络环境,或者使用仿真工具进行模拟测试。确保发送和接收的数据符合预期,并能正确处理不同类型的CAN消息。 6. **文档与注释**:良好的源代码应该...

Global site tag (gtag.js) - Google Analytics