在字符集移值之前使用CSSCAN工具

ZDNet软件频道 时间:2004-03-18 作者:Builder.com |  我要评论()
本文关键词:oracletips
Oracle DBA 可能试过导入一个完整的数据库导出——他们只得到了有关字符集不兼容的警告。这个问题比较杂,因为默认字符集是 ASCII,而国际数据库推荐使用的字符集则是 Unicode 字符集之一。
本文译自Builder.com,未经许可请勿转载Oracle DBA 可能试过导入一个完整的数据库导出——他们只得到了有关字符集不兼容的警告。这个问题比较杂,因为默认字符集是 ASCII,而国际数据库推荐使用的字符集则是 Unicode 字符集之一,比如说 AL32UTF8。

 

我们很容易在没有意识到数据库字符集不支持非 ASCII 数据之前已经建立了一个数据库并开始了开发。开发人员可以使用字符集扫描(CSSCAN)工具来避免这个问题,该工具自动安装在 Oracle9i中。如果你正在使用其它的数据库版本,那么你可以从Oracle 技术网下载 CSSCAN。

在运行该工具之前,你需要安装属于 CSMIG 用户的一套表和过程。脚本csminst.sql要么在 Oracle Home之下的rdbms/admin 目录下,要么在可下载的发布版本中。运行这个脚本需要 DNA 账户(在 Oracle9i中以 SYSDBA 身份登录)。

在数据库上以 DBA 账户运行 CSSCAN 工具的方法是在命令行提示符下键入 CSSCAN <username>/<password>。该程序提示参数的方式与 EXP 类似。你可以在命令行以如下方式输入参数:

CSSCAN SYSTEM/MANAGER FULL=y TOCHAR=AL32UTF8 ARRAY=102400 PROCESS=3

键入 CSSCAN HELP=Y可以查看完整的参数列表。(要保证有要移值的字符集的标示符,比如说 AL32UTF8 或者 Oracle8 的 UTF8。)在运行了该工具之后,在当前的目录下可能创建了三个文件:scan.err、scan.out和 scan.txt。这些文件包含扫描的结果。

例如,我在一个 UTF-8 数据库中插入了chr(169)到一个文本列中。这个字符不是一个有效的 UTF-8 序列;而对于 Web 用户来说这是一个普通的字符。在scan.err中显示的 CSSCAN 的输出为:

User  : SCOTT
Table : TMPTABLE
Column: TEXT
Type  : VARCHAR2(2000)
Number of Exceptions         : 1
Max Post Conversion Data Size: 1

ROWID                                                Exception Type                    Size Cell Data(first 30 bytes)
------------------------------------------      ----------------------                  ------------------------------
AAAHboAABAAAMYyAAA     lossy conversion                        ?
------------------------------------------      ----------------------                  ------------------------------

在纠正了由该工具报告的这些错误之后,你就可以以目标字符集使用数据库移值工具(比如说dbassist)将数据移值到一个新数据库中了。


本文作者:Scott Stephens已经在Oracle工作了13年有余,他曾经在技术支持、电子商务、市场和软件开发等部门工作。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134