修改Oracle字符集的实际操作方案

数据库 Oracle
以下的文章就是对如何修改Oracle字符集的实际应用的相关介绍,本文还涉及到修改Oracle字符集时的一些相关的 代码的描述。

我们大家都知道Oracle字符集是具有互相包容性的。例如,us7ascii是zhs16gbk的子集,us7ascii到zhs16gbk不会有相关的数据解释上的一些问题,是不会出现数据丢失的。在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。

一旦数据库创建后,数据库的字符集理论上讲是不能改变的。因此,在设计和安装之初考虑使用哪一种字符集十分重要。根据Oracle的官方说明,字符集的转换是从子集到超集受支持,反之不行。如果两种字符集之间根本没有子集和超集的关系,那么Oracle字符集的转换是不受Oracle支持的。

对数据库server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所以在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来说,除非万不得已,我们不建议修改Oracle数据库server端的字符集。

特别说明,我们最常用的两种字符集ZHS16GBK和ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种Oracle字符集之间的相互转换不受支持。

修改server端字符集(不建议使用)

在Oracle 8之前,可以用直接修改数据字典表props$来改变数据库的Oracle字符集。但Oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:

 

  1. $sqlplus /nolog  
  2. SQL>conn / as sysdba;    

若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:

 

  1. SQL>STARTUP MOUNT;  
  2. SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;  
  3. SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;  
  4. SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;  
  5. SQL>ALTER DATABASE OPEN;  
  6. SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;  
  7. SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;  
  8. SQL>SHUTDOWN IMMEDIATE;  
  9. SQL>STARTUP  

 

注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的Oracle字符集必须是Oracle支持,不然不能start) 按上面的做法就可以,但是可能会出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists’ 这样的提示信息

要解决这个问题有两种方法

一个是,利用INTERNAL_USE 关键字修改区域设置,

还有一个是利用re-create,但是re-create有点复杂,所以请用internal_use,

 

  1. SQL>SHUTDOWN IMMEDIATE;  
  2. SQL>STARTUP MOUNT EXCLUSIVE;  
  3. SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;  
  4. SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;  
  5. SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;  
  6. SQL>ALTER DATABASE OPEN;  
  7. SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;  
  8. SQL>SHUTDOWN immediate;  
  9. SQL>startup;  

 

如果按上面的做法做,National charset的区域设置就没有问题上述的相关内容就是对修改Oracle字符集的描述,希望会给你带来一些帮助在此方面。

【编辑推荐】

  1. Oracle merge into的实操示例
  2. Oracle查询分页的存储过程实际代码示例
  3. Oracle数据库的安全,PL/SQL的SQL注入
  4. Oracle应用顾问发展计划 着力培养实用型软件人才
  5. Oracle 字符串split的相关实际应用代码介绍

 

责任编辑:佚名 来源: 互联网
相关推荐

2010-05-25 13:57:28

MySQL字符集

2011-04-11 10:59:33

Oracle字符集

2010-04-12 14:44:06

Oracle Impd

2010-04-01 16:06:08

Oracle修改表ow

2010-04-15 16:47:46

Oracle字段

2010-04-16 09:52:40

Oracle JOB

2010-04-12 13:05:56

Oracle软件

2010-03-29 10:55:38

Oracle优化

2010-04-28 10:13:37

Oracle删除重复数

2010-04-29 15:09:42

Oracle密码文件

2010-04-13 12:42:59

Oracle连接

2010-04-13 12:23:34

Oracle数据库

2010-05-10 10:19:28

Oracle实战RMA

2010-04-20 11:06:33

Oracle索引

2010-04-01 14:06:13

Oracle Name

2010-05-06 14:40:59

Oracle字符集

2010-05-06 18:01:07

Oracle Expr

2010-04-01 13:39:43

Oracle Name

2010-03-31 16:11:00

Oracle启动

2010-04-16 13:59:40

Oracle数据
点赞
收藏

51CTO技术栈公众号