如何更改Oracle 11g r2 Express版中的字符集

时间:2012-02-02 17:58:37

标签: oracle plsql oracle11g

我必须在Oracle 11g r2 Express实例中将字符集从AL32UTF8更改为WE8MSWIN1252 ...我尝试使用命令:

ALTER DATABASE CHARACTER SET WE8MSWIN1252;

但它没有说MSWIN1252不是AL32UTF8的超集。然后我发现了一些关于CSSCAN的文章,这个工具似乎在Oracle 11 Express中不可用。

http://www.oracle-base.com/articles/10g/CharacterSetMigration.php

任何人都知道如何做到这一点?提前致谢

修改 澄清一点:真正的问题是我正在尝试将数据导入到一个表中,该表的列定义为VARCHAR(6字节)。导致问题的字符串是'eq.mês',它在MSWIN1252中需要6个字节,在UT8中需要7个字节

3 个答案:

答案 0 :(得分:5)

你不能。

11g的Express Edition仅使用UTF-8字符集。如果你想回到10g的快递版,有一个使用Windows-1252字符集的西欧版本。与其他版本不同,Oracle不支持Express Edition中的所有字符集,也不支持更改现有XE数据库的字符集。

为什么您认为需要更改数据库字符集?除了可能需要更多的存储空间来支持Windows-1252上半部分中的字符(通常没有特别大量使用)之外,UTF-8数据库的缺点并不多。

答案 1 :(得分:1)

当你想要一个只支持原始字符子集的字符集时,我会说你最好的选择,你最好的选择是使用exp和imp back(或expdp和impdp)。

您确定没有单个表格会包含1252代码页中找不到的任何字符吗?

答案 2 :(得分:1)

仅执行ALTER DATABASE命令的问题是数据字典未被转换且可能已损坏。

我遇到了同样的问题。在我的例子中,我们使用的是Oracle 11g Express Edition(11.2.0.2.0),我们确实需要它在WE8MSWIN1252字符集上运行,但我无法在安装时更改字符集(它始终与AL32UTF8一起安装)。

以管理员身份安装Oracle Client 11g并仅运行csscan full=y(请查看此链接https://oracle-base.com/articles/10g/character-set-migration),我们注意到数据库中存在有损和可转换的数据问题。但是,问题在于MDSYS(Oracle Spatial)和APEX_040000(Oracle Application Express)模式。因此,由于我们不需要此产品,我们会将其删除(请查看此链接:http://fast-dba.blogspot.com.br/2014/04/how-to-remove-unwanted-components-from.html)。

然后,我们使用expdp导出用户模式并删除用户(必须在流程结束时重新创建它们)。

使用full=y capture=y再次执行csscan,它会报告:The data dictionary can be safely migrated using the CSALTER script。如果报告没有这个,那么csalter.plb脚本将不起作用,因为有些条件无法满足:

  • 对所有CHAR VARCHAR2和LONG数据(数据字典和应用程序数据)都没有变化
  • 对于所有Application Data CLOB都没有变化
  • 所有数据字典CLOB
  • 无变化和/或可转换

在我们的例子中,这个条件得到满足,我们可以成功运行CSALTER脚本。此外,此脚本执行您尝试运行的ALTER DATABASE命令,并转换可转换的数据字典的CLOB数据。

最后,我们创建了应用程序的用户和表空间,并成功导入了用户数据的转储。