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

发表于:2007-05-25来源:作者:点击数: 标签:工具移值CSSCAN之前字符集
Oracle DBA 可能试过导入一个完整的 数据库 导出——他们只得到了有关字符集不兼容的警告。这个问题比较杂,因为默认字符集是 ASCII,而国际数据库推荐使用的字符集则是 Unicode 字符集之一,比如说 AL32UTF8。 我们很容易在没有意识到数据库字符集不支持非

  Oracle DBA 可能试过导入一个完整的数据库导出——他们只得到了有关字符集不兼容的警告。这个问题比较杂,因为默认字符集是 ASCII,而国际数据库推荐使用的字符集则是 Unicode 字符集之一,比如说 AL32UTF8。
  
  我们很容易在没有意识到数据库字符集不支持非 ASCII 数据之前已经建立了一个数据库并开始了开发开发人员可以使用字符集扫描(CSSCAN)工具来避免这个问题,该工具自动安装在 Oracle9i中。如果你正在使用其它的数据库版本,那么你可以从Oracle 技术网下载 CSSCAN。
  
  在运行该工具之前,你需要安装属于 CSMIG 用户的一套表和过程。脚本csminst.sql要么在 Oracle Home之下的rdbms/admin 目录下,要么在可下载的发布版本中。运行这个脚本需要 DNA 账户(在 Oracle9i中以 SYSDBA 身份登录)。
  
  在数据库上以 DBA 账户运行 CSSCAN 工具的方法是在命令行提示符下键入 CSSCAN /。该程序提示参数的方式与 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)将数据移值到一个新数据库中了。

原文转自:http://www.ltesting.net