跟单实例多少有点区别
ORACLE 11g RAC 两节点
第一步 查看字符集
PRIMARY-SYS@mydb2>select userenv('language') from dual;shell
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
/*
也能够经过下面几种方式查询当前字符集
SQL> SELECT parameter, value FROM v$nls_parameters WHERE parameter LIKE '%CHARACTERSET';数据库
PARAMETER VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET AL16UTF16服务器
下面2种结果同样
set pagesize 100
col value$ for a30
select name,value$ from props$ where name like '%NLS%';oracle
select * from nls_database_parameters;
*/app
第二步 关闭一个节点
[root@testdb2 ~]# /u01/app/11.2.0/grid/bin/crsctl stop cluster编码
第三步 在另外一个节点修改启动参数
TRUE改成false
PRIMARY-SYS@mydb1>alter system set cluster_database=false scope=spfile;spa
PRIMARY-SYS@mydb1>shutdown immediate;操作系统
/*
show parameter pfile; 若VALUE为空是pfile启动,要修改成SPFILE启动,空的话以下
SQL>CREATE SPFILE FROM PFILE;
SQL>shutdown immediate;
SQL>startup;
SQL>alter system set cluster_database=false scope=spfile;
SQL>shutdown immediate;
*/.net
第四步 修改参数blog
PRIMARY-SYS@mydb1>startup mount;
PRIMARY-SYS@mydb1>ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
PRIMARY-SYS@mydb1>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
System altered.
PRIMARY-SYS@mydb1>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
System altered.
PRIMARY-SYS@mydb1>ALTER DATABASE OPEN;
Database altered.
第五步 修改字符集
PRIMARY-SYS@mydb1>ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
第六步 恢复RAC
PRIMARY-SYS@mydb1>alter system set cluster_database=true scope=spfile;
PRIMARY-SYS@mydb1>shutdown immediate;
PRIMARY-SYS@mydb1>startup mount;
PRIMARY-SYS@mydb1>ALTER SYSTEM DISABLE RESTRICTED SESSION;
PRIMARY-SYS@mydb1>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=1;
PRIMARY-SYS@mydb1>ALTER SYSTEM SET AQ_TM_PROCESSES=1;
PRIMARY-SYS@mydb1>alter database open;
第七步 启动开始中止的RAC节点,并验证
另一个节点
[root@testdb2 ~]# /u01/app/11.2.0/grid/bin/crsctl start cluster
PRIMARY-SYS@mydb2>select userenv('language') from dual;
USERENV('LANGUAGE')
------------------------------------------------------------------------------------------------------------------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
【注意事项】
修改字符集要谨慎,不能回退,有必要的话备份下
DB中有CLOB类型字段不容许字符集转换,能够导出-删除-导入(转换完成后)
超集解:若是s1集合包含s2集合中的每个元素,而且s1集合中有可能包含s2集合中不含有的元素时,那么称s1是s2的超级。说明AL32UTF8包含ZHS16GBK。
三次编码转换
一、执行exp时,数据库中数据的编码会转换为导出客户端编码
二、执行imp时,dmp文件的编码转换为导入客户端编码
三、导入客户端编码转换为目标端数据库的数据库编码
处理办法:经过NLS_LANG灵活设置,减小编码转换的次数,或者使得相互的转换可以兼容,能够最大程度减小乱码的出现。若是已经有了exp导出的dmp文件,而后在导入过程当中出现乱码,通常处理建议nls_lang编码设置和dmp文件一致,让转换发生在导入客户端和数据库服务器间(要求:编码能够相互转换)
结论1.无论是从AL32UTF8 到ZHS16GBK 仍是从ZHS16GBK 到AL32UTF8 ,中文都不会乱码,会自动转换(导出导入过程当中无报错),可是对于其余国家语言会有问题(好比印度,日本等文字)。2.经过数据泵导出或导入的数据,与oracle用户操做系统参数NLS_LANG无关,编码自动与数据库参数NLS_CHARACTERSET相同。3.AL32UTF8 字符集一个中文占用3个字节,ZHS16GBK 字符集一个中文占用2个字节。若是确认应用程序只用到英文和中文,ZHS16GBK会更加节省存储。若是不肯定,建议使用AL32UTF8.4.建表时指定列属性varchar(10),其中的10指的是字节,如果AL32UTF8 字符集,则只能存3个中文,如果ZHS16GBK字符集,则能够存5个中文。这会致使从ZHS16GBK字符集数据库经过数据泵导入到AL32UTF8字符集数据库过程当中,有些列须要扩容。若是须要按字符指定列属性,应该为varchar2(10 char)。5.AL32UTF8是ZHS16GBK的超集,由于AL32UTF8包含了更多国家的文字。6.经过SecureCRT或xshell查看到中文乱码时,只须要查看数据库NLS_DATABSE_PARAMETERS中NLS_CHARACTERSET的字符集是什么,而后保持操做系统用户NLS_LANG的设置和SecureCRT或xshell软件的编码设置与之一致便可。来自 “ ITPUB博客 ” ,连接:http://blog.itpub.net/31441616/viewspace-2145085/,如需转载,请注明出处,不然将追究法律责任。