Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。一般来说,数据库字符集在安装数据库实例时就指定好了,而且不建议安装完成后修改数据库字符集,理论上是不能改变的。如果确实存在字符兼容性的问题,数据库字符集也是可以修改的。

Oracle的字符集命名遵循以下命名规则: <Language><bit size><encoding> 即: <语言><比特位数><编码>,Language指定服务器消息的语言,territory指定服务器的日期和数字格式,charset指定字符集。如CHINESE_CHINA.ZHS32GB18030。

数据库字符集设计三个方面:(1)server端 (2)client端 (3)dmp文件

  查看server端字符集方法:

1)SELECT * FROM Nls_Database_Parameters;

2)SELECT Userenv('language') FROM Dual;

查看client端字符集方法:

Windows方法:

C:\Users\zhang>SET NLS_LANG
           NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

Unix方法:echo $NLS_LANG

   查看dmp文件字符集:

oracle的exp工具导出的dmp文件也包含了字符集信息。dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:

SQL>SELECT Nls_Charset_Name(To_Number('0354', 'xxxx')) FROM Dual;
NLS_CHARSET_NAME(TO_NUMBER('0354','XXXX'
----------------------------------------
ZHS16GBK

如果dmp文件很大如2G以上,可以用以下命令查看(在unix主机上): cat dbexp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6

一、修改单实例的数据库字符集

接下来以数据库的字符集从ZHS16GBK修改为 ZHS32GB18030为例。

操作步骤如下:

--停监听
lsnrctl stop
--关闭数据库
SQL>shutdown immediate;
--开启数据库到mount状态
SQL>startup mount ;
--SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。
--sql_trace =true在全局启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在生产环境中要谨慎使用,这个参数在10g之后是动态参数,可以随时调整,在某些诊断中非常有效。
--提示: 通过在全局启用sql_trace,我们可以跟踪到所有后台进程的活动,很多在文档中的抽象说明,通过跟踪文件的实时变化,我们可以清晰的看到各个进程之间的紧密协调.
SQL>alter session set sql_trace=true;
--ALTER SYSTEM DISABLE RESTRICTED SESSION来取消数据库的受限制状态。在数据库受限制的过程中,只有对数据库拥有CREATE SESSION权限的用户才能够连接到数据库。这种状态有利于对数据库进行备份,恢复,导入,导出等操作。
SQL>alter system enable restricted session;
--首先设置JOB_QUEUE_PROCESSES=0,Oracle会杀掉CJQ0及相应job进程
SQL>alter system set job_queue_processes=0;
--aq_tm_processes值可选在1到10之间,0代表是关闭队列监视
SQL>alter system set aq_tm_processes=0;
--利用INTERNAL_USE 关键字修改区域设置,目的是让Oracle数据库绕过了子集与超集的校验
SQL>alter database character set INTERNAL_USE ZHS32GB18030;
--打开数据库
SQL>alter database open;
--再次关闭数据库
SQL>shutdown immediate ;
--再次打开数据库
SQL>startup ;
SQL>SET linesize 200
SQL>SELECT *
  FROM Nls_Database_Parameters a
WHERE a.Parameter = 'NLS_CHARACTERSET';
SQL>SELECT '张王李赵' from dual;

二、修改RAC环境下的数据库字符集

Oracle11gR2中RAC环境下修改数据库字符集方法:

(1) 停监听
ps -ef |grep pmon
lsnrctl stop
(2) 停所有实例
cd $ORACLE_HOME/crs_1/bin
./srvctl stop database -d testdb
或者使用
./srvctl stop instance -d testdb -i rac1
./srvctl stop instance -d testdb -i rac2
(3) 查看集群状态
crs_stat -t
(4) 只能在一个节点上操作,如rac1,否则会报ORA-12720错误,意为此操作只能在单实例下操作。
startup
(5) 先将数据库置于非集群状态
alter system set cluster_database=false scope=spfile sid='testdb';
(6) 修改数据库字符集
shutdown immediate;
startup mount;
alter session set sql_trace=true;
alter system enable restricted session;
alter system set job_queue_processes=0;
alter system set aq_tm_processes=0;
alter database character set INTERNAL_USE ZHS32GB18030;
(7) 再将数据库置于集群状态
alter system set cluster_database=true scope=spfile;
(8) 关闭数据库
shutdown immediate;
(9) 先启动一个节点进行验证,各节点都需要进行验证。
startup
sqlplus / as sysdba
SELECT '张王李赵' FROM Dual;
(10) 恢复集群状态
./srvctl start database -d testdb
(11) 查看集群状态
crs_stat –t

在数据库安装部署时需要考虑数据库字符集的问题,最好在安装实例时就设置好,不建议后续对数据库字符集进行修改。

Oracle数据库字符集修改的更多相关文章

  1. linux下oracle数据库字符集修改

    linux下oracle数据库字符集修改 0.RHEL6.7.oracle11gr2 1.登录oracle.在安装oracle的用户下进入数据库. $ sqlplus / as sysdba 2.查询 ...

  2. oracle数据库字符集的修改

    本文摘自:http://blog.csdn.net/nsj820/article/details/65711051.改客户端字符集:通过WINDOWS的运行菜单运行Regedit,修改注册表 Star ...

  3. Oracle数据库字符集问题解析

    Oracle数据库字符集问题解析 经常看到一些朋友问ORACLE字符集方面的问题,我想以迭代的方式来介绍一下.第一次迭代:掌握字符集方面的基本概念.有些朋友可能会认为这是多此一举,但实际上正是由于对相 ...

  4. ORACLE数据库字符集处理

    简介: ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储.处理和检索数据.利用全球化支持,OR ...

  5. Oracle数据库字符集问题

    Oracle数据库的字符集问题,也涉及作为服务器操作系统的CentOS或者Windows的字符集与Oracle字符集之间的关联关系Oracle的字符集,这个问题的提出是因为两个原因:一是遇到一个DMP ...

  6. 选择ORACLE数据库字符集

    如何选择数据库的字符集是一个有争议的话题,字符集本身涉及的范围很广,它与应用程序.客户的本地环境.操作系统.服务器等关系很密切,因此要做出合适的 选择,需要明白这些因素之间的关系.另外对字符集的基本概 ...

  7. Linux下修改Oracle数据库字符集命令

    常见情形:从服务器备份Oracle数据库后再到本地机器上还原Oracle数据库的时候经常会碰见数据库字符编码不一致的情况,可以用以下命令来修改本地的Oracle数据库字符编码,然后顺利还原Oracle ...

  8. oracle_修改Oracle数据库字符集 AL32UTF8;

    修改数据库字符集 以支持维文等  utf8 停掉库 进入装载模式 ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM SET JOB_QUEUE_ ...

  9. oracle数据库字符集

    Oracle字符集的基本原理 1. Oracle服务器字符集 oracle以哪种字符编码存储字符,可以通过以下语句查出数据库字符集的设置. 方法1 SQL> select * from v$nl ...

随机推荐

  1. brew安装

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #454545 } span.s1 { font: 12. ...

  2. java学习第三天

    关于上次的数据转换,如果定义的是 short 是,那么s=s+1,这样是错误的,会损失精度,但如果是s+=1.确实正确的,因为它包含了一个强制转化在里面.相当于 s=(int)(s+1);  然后特地 ...

  3. Ubuntu上安装MongoDB(译)

    add by zhj:直接从第四步开始就可以了,而且安装好MongoDB后会自动启动的,不必自己去执行启动命令 原文:https://docs.mongodb.com/manual/tutorial/ ...

  4. nginx的一些介绍和使用

    nginx 的安装 我们首先进行下载安装:http://nginx.org/download/nginx-1.4.2.tar.gz 安装准备: nginx依赖于pcre库,要先安装pcre 1 yum ...

  5. highcharts 统计的样式

    highcharts 官网:http://www.hcharts.cn/

  6. css兼容tooltip提示框方法

    最终效果图: 基本原理 先设定一个背景色的普通div盒子,然后使用上篇post得到的三角型图标,把div盒子设置为相对定位模式,三角型图标设置为绝对定位,位置相对于div盒子,调整到合适的位置.这样就 ...

  7. JS常见问题

    语法错误 由于编程语言中的语法比自然语言的语法要严格得多,因此在编写脚本时对细节应倍加关注.例如,如果您本意是将字符串作为某个参数,但是在键入时忘了使用引号引起来,就会产生问题. 脚本解释顺序 对 J ...

  8. PHP魔法方法的使用

    1.__get / __set 当类没有要存取的属性时,就调用这两个函数 $obj = new IMooc\Object();$obj->title = "hello";ec ...

  9. andorid 远程存储中JDK和Volley的GET和POST方法

    在操作Volley的时候先添加volley.jar(包) <uses-permission android:name="android.permission.INTERNET" ...

  10. vb.net加密解密方法

    1.vb.net加密解密方法 Private Function getLicenseDate() As String Dim b() As Byte Dim path As String = Serv ...