Oracle DBA 可能试过导入一个完整的数据库导出——他们只得到了有关字符集不兼容的警告这个问题比较杂因为默认字符集是 ASCII而国际数据库推荐使用的字符集则是 Unicode 字符集之一比如说 ALUTF
我们很容易在没有意识到数据库字符集不支持非 ASCII 数据之前已经建立了一个数据库并开始了开发开发人员可以使用字符集扫描(CSSCAN)工具来避免这个问题该工具自动安装在 Oraclei中如果你正在使用其它的数据库版本那么你可以从Oracle 技术网下载 CSSCAN
在运行该工具之前你需要安装属于 CSMIG 用户的一套表和过程脚本csminstsql要么在 Oracle Home之下的rdbms/admin 目录下要么在可下载的发布版本中运行这个脚本需要 DNA 账户(在 Oraclei中以 SYSDBA 身份登录)
在数据库上以 DBA 账户运行 CSSCAN 工具的方法是在命令行提示符下键入 CSSCAN /该程序提示参数的方式与 EXP 类似你可以在命令行以如下方式输入参数
CSSCAN SYSTEM/MANAGER FULL=y TOCHAR=ALUTF ARRAY= PROCESS=
键入 CSSCAN HELP=Y可以查看完整的参数列表(要保证有要移值的字符集的标示符比如说 ALUTF 或者 Oracle 的 UTF)在运行了该工具之后在当前的目录下可能创建了三个文件scanerrscanout和 scantxt这些文件包含扫描的结果
例如我在一个 UTF 数据库中插入了chr()到一个文本列中这个字符不是一个有效的 UTF 序列而对于 Web 用户来说这是一个普通的字符在scanerr中显示的 CSSCAN 的输出为
User: SCOTT
Table : TMPTABLE
Column: TEXT
Type: VARCHAR()
Number of Exceptions :
Max Post Conversion Data Size:
ROWIDException TypeSize Cell Data(first bytes)
AAAHboAABAAAMYyAAA lossy conversion?
在纠正了由该工具报告的这些错误之后你就可以以目标字符集使用数据库移值工具(比如说dbassist)将数据移值到一个新数据库中了