<b>关于oracle字符集文档</b>[Oracle防范]
本文“<b>关于oracle字符集文档</b>[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Oracle字符集是一个字节数据的注释的标记调集,有大小之分,有彼此的包涵关系.ORACLE支持国家语言的体系构造答应你利用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期,时间,钱币,数字,和日历自动适应本地化语言和平台.
1、 Oracle字符集相关知识
1 参数阐明
影响oracle数据库字符集最重要的参数是NLS_LANG参数
Oracle的字符集命名遵守以下命名法则:
<Language><bit size><encoding>
即: <语言><比特位数><编码>
比方: ZHS16GBK表示采取GBK编码格局、16位(两个字节)简体中文字符集
它的格局以下:NLS_LANG = language_territory.charset
它有三个构成部份(语言、地域和字符集),每个成份掌握了NLS子集的特点
此中:Language 指定服务器消息的语言,territory 指定服务器的日期和数字格局,charset 指定字符集.如:AMERICAN _ AMERICA. ZHS16GBK
从NLS_LANG的构成我们可以看出,真正影响数据库字符集的其实是第三部份,
所以两个数据库之间的字符集只要第三部份一样便可以彼此导入导出数据,前面影响的只是提醒信息是中文还是英文.
2 查看数据库字符集
这触及三方面的字符集:
一是:oracel server端的字符集;
二是:oracle client端的字符集;
三是:dmp文件的字符集;
在做数据导入的时刻,需求这三个字符集都一致才能精确导入.
2.1查询oracle server端的字符集
有很多种办法可以查出oracle server端的字符集
①对比直观的查询办法
SQL> select userenv('language') from dual;
查询后果以下: SIMPLIFIED CHINESE_CHINA.ZHS32GB18030
②查看有关字符集的全部参数
SELECT * FROM v$nls_parameters;
后果中的NLS_CHARACTERSET ZHS32GB18030
2.2查看dmp文件的字符集
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集.假如dmp文件不大,比方只有几M或几十M,可以用UltraEdit翻开(16进制方法),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;ZHS16GBK
2.3查询oracle client端的字符集
在windows平台下,就是注册表里面呼应OracleHome的NLS_LANG.具体途径:
Win+R àregedit à HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ nls_lang 显示本地的字符集,这样就只影响这个窗口里面的环境变量.
在unix平台下,就是环境变量NLS_LANG.
$echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK
假如查抄的后果发现server端与client端字符集不一致,倡议统一改正成同server端相同的字符集.
2.4倡议
关于字符集客户端的字符集要求与服务器一致,才能精确显示数据库的非Ascii字符.假如多个设置存在的时刻,alter session>环境变量>注册表>参数文件.
客户端的字符集要求与服务器一致,才能精确显示数据库的非Ascii字符.假如多个设置存在的时刻,alter session>环境变量>注册表>参数文件
字符集要求一致,但是语言设置却可以差别,语言设置倡议用英文.如字符集是zhs16gbk,则nls_lang可以是 American_America.zhs16gbk.
2.5增补内容
2.5.1 数据库服务器字符集
SELECT * FROM nls_database_parameters;
根源于props$,是表示数据库的字符集.
2.5.2 客户端字符集环境
SELECT * FROM nls_instance_parameters;
其根源于v$parameter,表示客户端的字符集的设置,大概是参数文件,环境变量大概是注册表
2.5.3 会话字符集环境
SELECT * FROM nls_session_parameters;
根源于v$nls_parameters,表示会话自己的设置,大概是会话的环境变量大概是alter session完成,假如会话没有特别的设置,将与nls_instance_parameters一致.
2、关于oracle字符集改正
一旦数据库成立后,数据库的字符集理论上讲是不能改变的.因此,在计划和安装之初考虑利用哪一种字符集非常重要.按照Oracle的官方阐明,字符集的转换是从子集到超集受支持,反之不行.假如两种字符集之间根本没有子集和超集的关系,那么字符集的转换是不受oracle支持的.对数据库 server而言,错误的改正字符集将会招致很多不可测的后果,大概会严重影响数据库的正常运行,所以在改正之前一定要确认两种字符集能否存在子集和超集的关系.普通来说,除非万不得已,我们不倡议改正oracle数据库server端的字符集.分外阐明,我们最常用的两种字符集ZHS16GBK和 ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的彼此转换不受支持.
下例为把数据库的字符集从ZHS16GBK改正成 ZHS32GB18030.
1、履行脚本
关于每个sql脚本的含义,请见注释①~⑥
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 open;
set linesize 120;
alter database character set INTERNAL_USE ZHS32GB18030;
shutdown immediate ;
startup ;
2、 相关参数注释
查看字符集参数:SELECT * FROM v$nls_parameters;
①SQL_TRACE是Oracle供应的用于举行SQL跟踪的手段,是强有力的帮助诊断工具.在平常的数据库问题诊断和办理中,SQL_TRACE是非常常用的办法.
sql_trace =true
在全局启用SQL_TRACE会招致全部进程的活动被跟踪,包含后台进程及全部用户进程,这普通会招致对比严重的性能问题,所以在生产环境中要谨严利用,这个参数在10g之后是动态参数,可以随时调整,在某些诊断中非常有效.
提醒: 通过在全局启用sql_trace,我们可以跟踪到全部后台进程的活动,很多在文档中的抽象阐明,通过跟踪文件的及时改变,我们可以清楚的看到各个进程之间的精密调和.
②在利用历程中对数据库举行限制
ALTER SYSTEM DISABLE RESTRICTED SESSION来撤消数据库的受限制状况.在数据库受限制的历程中,只有对数据库拥有CREATE SESSION权限的用户才可以衔接到数据库.这种状况有利于对数据库举行备份,恢复,导入,导出等操作.
③首先设置JOB_QUEUE_PROCESSES=0,Oracle会杀掉CJQ0及呼应job进程
④aq_tm_processes值可选在1到10之间,0代表是关闭行列监督
⑤操纵INTERNAL_USE 关键字改正区域设置,目的是让Oracle数据库绕过了子集与超集的校验
⑥STARTUP NOMOUNT
然后可以利用ALTER DATABASE MOUNT 来挂上数据库.可以利用: STARTUP MOUNT来启动数据库,并挂载上数据库,但是保持数据库的关闭状况.稍后可以利用ALTER DATABASE OPEN来翻开数据库.
以上是“<b>关于oracle字符集文档</b>[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |