Oracle数据库字符集修改
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数据库字符集修改的更多相关文章
- linux下oracle数据库字符集修改
linux下oracle数据库字符集修改 0.RHEL6.7.oracle11gr2 1.登录oracle.在安装oracle的用户下进入数据库. $ sqlplus / as sysdba 2.查询 ...
- oracle数据库字符集的修改
本文摘自:http://blog.csdn.net/nsj820/article/details/65711051.改客户端字符集:通过WINDOWS的运行菜单运行Regedit,修改注册表 Star ...
- Oracle数据库字符集问题解析
Oracle数据库字符集问题解析 经常看到一些朋友问ORACLE字符集方面的问题,我想以迭代的方式来介绍一下.第一次迭代:掌握字符集方面的基本概念.有些朋友可能会认为这是多此一举,但实际上正是由于对相 ...
- ORACLE数据库字符集处理
简介: ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储.处理和检索数据.利用全球化支持,OR ...
- Oracle数据库字符集问题
Oracle数据库的字符集问题,也涉及作为服务器操作系统的CentOS或者Windows的字符集与Oracle字符集之间的关联关系Oracle的字符集,这个问题的提出是因为两个原因:一是遇到一个DMP ...
- 选择ORACLE数据库字符集
如何选择数据库的字符集是一个有争议的话题,字符集本身涉及的范围很广,它与应用程序.客户的本地环境.操作系统.服务器等关系很密切,因此要做出合适的 选择,需要明白这些因素之间的关系.另外对字符集的基本概 ...
- Linux下修改Oracle数据库字符集命令
常见情形:从服务器备份Oracle数据库后再到本地机器上还原Oracle数据库的时候经常会碰见数据库字符编码不一致的情况,可以用以下命令来修改本地的Oracle数据库字符编码,然后顺利还原Oracle ...
- oracle_修改Oracle数据库字符集 AL32UTF8;
修改数据库字符集 以支持维文等 utf8 停掉库 进入装载模式 ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM SET JOB_QUEUE_ ...
- oracle数据库字符集
Oracle字符集的基本原理 1. Oracle服务器字符集 oracle以哪种字符编码存储字符,可以通过以下语句查出数据库字符集的设置. 方法1 SQL> select * from v$nl ...
随机推荐
- mysql的时间转化
1.1 获得当前日期+时间(date + time)函数:now() 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数: current_timestamp() curr ...
- 移动手机专题rem布局实践+主要代码
HTML开头部分 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" / ...
- SqlDataReader的使用
1.建立数据库连接: 2.设置数据库指令: 3.数据拾取器接收输出的数据: 4.遍历打印数据: using System; using System.Collections.Generic; usin ...
- 如何防止ElasticSearch集群出现脑裂现象(转)
原文:http://xingxiudong.com/2015/01/05/resolve-elasticsearch-split-brain/ 什么是“脑裂”现象? 由于某些节点的失效,部分节点的网络 ...
- UVM的factory机制
在UVM中使用工厂模式基本上分为三个步骤: 1. 注册 当定义一个类的时候,它的类型必须要注册,UVM已经提供了专用的宏. `uvm_component_utils(class_type_name) ...
- vc++ basic chapt1
______API 和SDK _像c程序可以调用各种函数库一样, windows操作系统提供应用程序编程的接口application programming interface简称API函数. 所以主 ...
- SQL Server 查询处理中的各个阶段(SQL执行顺序)
SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后 ...
- if条件里比较浮点数
晚上看会儿书,基础的东西,很多都不熟练,不得不佩服那些人真的很厉害,为啥会想到那些,我这傻脑袋是想不到,暂时...... 比较3.3333与3 #!/bin/bash var1=`echo " ...
- 1.Java内存区域
Java虚拟机在执行java程序的过程中会把他管理的内存划分为若干个不同的数据区域各自用途.创建以及销毁时间各不相同.有的随着虚拟机进行的启动而存在,有的区域依赖于线程的启动和结束而建立以及销毁.如图 ...
- HDU 1540 Tunnel Warfare(线段树+区间合并)
http://acm.hdu.edu.cn/showproblem.php?pid=1540 题目大意:抗日战争期间进行地道战,存在n个村庄用地道连接,输入D表示破坏某个村庄(摧毁与其相连的地道, 包 ...