ITPub博客

首页 > 数据库 > Oracle > 关于修改oracle11g数据库字符集问题

关于修改oracle11g数据库字符集问题

Oracle 作者:swq618 时间:2016-12-03 20:00:20 0 删除 编辑
这次客户因为是请的野路子工程师,给客户装RAC,由于实现沟通问题,在字符集上没有按照客户要求来,所以现在想要更改字符集。
原字符集为:
查看字符集命令如下


现客户要求改为zhs16gbk中文简体字符集。

理论知识:

一、什么是Oracle字符集

       Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

 

影响Oracle数据库字符集最重要的参数是NLS_LANG参数。

它的格式如下: NLS_LANG = language_territory.charset

它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。

其中:

Language: 指定服务器消息的语言, 影响提示信息是中文还是英文

Territory: 指定服务器的日期和数字格式,

Charset:  指定字符集。

如:AMERICAN _ AMERICA. ZHS16GBK

从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。

所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

字符集超集与子集关系:
    当一种字符集(字符集A)的编码数值包含所有另一种字符集(字符集B)的编码数值,并且两种字符集相同编码数值代表相同的字符时,则字符集A是字符集B的超级,或称字符集B是字符集A的子集。
    Oracle8i和oracle9i官方文档资料中备有子集-超级对照表(subset-superset pairs),例如:WE8ISO8859P1是WE8MSWIN1252的子集。由于US7ASCII是最早的Oracle数据库编码格式,因此有许多字符集是US7ASCII的超集,例如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是US7ASCII的超集。 

RAC环境下修改数据库字符集与单机环境修改步骤有所不同。而且官方不推荐轻易修改字符集,最好是重建数据库。

修改字符集有2种方法可行。

1. 通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换。

2. 通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER DATABASE CHARACTER SET UTF8。

由于AL32UTF8 其中AL代表ALL,指适用于所有语言,所以猜想该字符集是zhs16gbk的超集(后来操作也验证了猜想),所以大胆的进行了操作。


注意,我是在新装的数据库中操作的,也就是说里面没有数据文件,如果已经存放了数据,请慎重考虑!
还有,两边节点都需要重启数据库,所以不能有业务进行!


sql> alter system set cluster_database=false scope=spfile sid='rac1';   --------注意sid根据不同环境要修改

在rac两节点都要关闭数据库:
sql>shutdown immediate;

在rac1节点将数据库启动到nomount状态:
sql>startup nomount;

SQL> Alter database mount exclusive;

Database altered.

SQL> Alter system enable restricted session;

System altered.

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

System altered.
SQL> Alter database open;

Database altered.

4、修改字符集
SQL> ALTER DATABASE character set INTERNAL_USE zhs16gbk;
sql> alter system set cluster_database=true scope=spfile sid='rac1';


5、验证(两个节点都要测)

Database altered.
SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.

Total System Global Area 1577058304 bytes
Fixed Size                  2084264 bytes
Variable Size             436208216 bytes
Database Buffers         1124073472 bytes
Redo Buffers               14692352 bytes
Database mounted.
Database opened.
SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
--------------------------------------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK


6、启动rac2,验证rac2的字符集

参考引用:http://blog.csdn.net/rulev5/article/details/7020134
http://blog.itpub.net/8475224/viewspace-692675/


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

上一篇: sqlnet.ora
请登录后发表评论 登录
全部评论

注册时间:2014-05-24

  • 博文量
    108
  • 访问量
    289809