ITPub博客

首页 > 数据库 > Oracle > Oracle 12C 修改字符集为AL32UTF8研究

Oracle 12C 修改字符集为AL32UTF8研究

原创 Oracle 作者:studywell 时间:2019-09-08 22:48:58 0 删除 编辑

有这样一个问题:PDB字符集能否从ZHS16GBK修改为AL32UTF8?

答案:由于CDB为ZHS16GBK,导致PDB不能修改。


针对这个问题作了一下学习,记录一下。


1、迁移转换字符集方法:

12C :只有DMU这个工具

10g/11g :csscan/ csalter /部分 exp/imp

8i/9i :Alter Database Character Set () / 部分 exp/imp 


2、AL32UTF8 是一个变宽度的字符集,表示为 1 个字符的代码可以是 1,2,3 或 4 个字节长。

这 与 WE8ISO8859P1 或 WE8MSWIN1252 字符集中 1 字符始终是 1 个字节有很大的区别。


3、使用 AL32UTF8数据库会增长,最大的扩展将会发生在 CLOB 类型上(或者 XMLtype – 该类型后台使用 CLOB),

如果源数据 库是 8 bit 字符集(WE8ISO8859P1,WE8MSWIN1252 等),那么转换后的 Clob 列会在磁盘 大小上变成原来的两倍。 


4、CDB不能转换字符集,只能重新创建CDB。DMU 是PDB转换字符集的唯一工具;


5、截至2019.9.8,DMU最新版本为19.1,使用过程图形界面有卡死现象。DMU用于转换数据的过程是:

将数据库置于受限模式。

禁用各种作业队列进程。

删除或禁用所选索引。

禁用选定的触发器和约束。

将用户表和选定数据字典表中的数据转换为Unicode。

转换CLOB数据字典中的列。

发表ALTER DATABASE CHARACTER SET声明。

启用触发器和约束; 并重新创建索引和约束。

恢复数据库实例参数。


6、使用9i 传统方法alter database character set INTERNAL_USE AL32UTF8;  修改CDB测试成功,但oracle官方不推荐。该方法并未执行两个步骤:将用户表和选定数据字典表中的数据转换为Unicode  和 转换CLOB数据字典中的列。这两关键步骤只能通过DMU实行。

测试:使用该方法切换CDB字符集从ZHS16GBK到AL32UTF8成功,同时PDB$SEED也自动变化;但按官方说法切换不完整,不赞成这样做。


7、NLS_NCHAR_CHARACTERSET("国家字符集")定义了 NCHAR,NVARCHAR2 和 NCLOB 列 的编码并且在 9i 及以上版本已经是 Unicode了(参见 Note 276914.1 The National Character Set in Oracle 9i 10g and 11g)。 


8、NLS_CHARACTERSET("字符集")定义了"普通的" CHAR,VARCHAR2,LONG 和 CLOB列编 码,这些也可以被用于存放 Unicode。在这样的情况下需要 AL32UTF8 或者 UTF8 NLS_CHARACTERSET 数据库。


参考文档:

AL32UTF8/UTF8(Unicode)数据库字符集含义 (文档 ID 1946289.1)

如何选择或更改数据库字符集 (NLS_CHARACTERSET) (文档 ID 1525394.1)

The Database Migration Assistant for Unicode (DMU) Tool (文档 ID 1272374.1)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29519108/viewspace-2656416/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-03-04

  • 博文量
    305
  • 访问量
    429590