Oracle服务端与客户端字符集

合集下载

Oracle客户端NLS_LANG的设置

Oracle客户端NLS_LANG的设置

Oracle客户端NLS_LANG的设置1、操作系统本⾝有字符集 ---locale -a或者chcp2、oracle数据库软件有字符集3、oracle软件的操作系统本⾝也有字符集AL32UTF8【AL】⽀持所有语⾔(All Language)【32】每字符最多占⽤32位(4字节)【UTF8】编码为UTF-8WE8MSWIN1252【WE】⽀持西欧语⾔(Western Europe)【8】每字符需要占⽤8位(单字节)【MSWIN1252】编码为CP1252US7ASCII【US】表⽰美国(United States)【7】每字符需要占⽤7位【ASCII】编码为ASCII字符集说⽩了是⼀个集合,是⼀张表,这个表有两列,左⾯这列是字符是所有要存储的字符。

字符有很多字符,⽐如我们讲中⽂字符:左⾯这列就是中国⼈常⽤的所有的中⽂字符,有汉字、英⽂字母有数字还有⼀些特殊的符号,在左⾯都出现是我们中⽂要使⽤的所有的字符右边是⼀个编码,从1号2、3、4、5、6 ,将来提到1的时候就对应着⼀个字符所以说字符集就是字符和编码的这么⼀个对应表常⽤字符集:US7ASCIIZHS16CGB231280AL32UTF8AF16UTF16ZHS16GBK数据库字符集SQL> select * from nls_database_parameters;PARAMETER VALUE------------------------------------------------------------ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_CURRENCY $NLS_ISO_CURRENCY AMERICANLS_NUMERIC_CHARACTERS .,NLS_CHARACTERSET AL32UTF8 -------------数据库字符集NLS_CALENDAR GREGORIANNLS_DATE_FORMAT DD-MON-RRNLS_DATE_LANGUAGE AMERICANNLS_SORT BINARYNLS_TIME_FORMAT HH.MI.SSXFF AMNLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AMNLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZRNLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZRNLS_DUAL_CURRENCY $NLS_COMP BINARYNLS_LENGTH_SEMANTICS BYTENLS_NCHAR_CONV_EXCP FALSENLS_NCHAR_CHARACTERSET AL16UTF16 ---------------------国家字符集(⽤的少)NLS_RDBMS_VERSION 11.2.0.1.0客户端字符集SQL> select * from nls_instance_parameters;PARAMETER VALUE------------------------------------------------------------------------------------------------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_SORTNLS_DATE_LANGUAGENLS_DATE_FORMATNLS_CURRENCYNLS_NUMERIC_CHARACTERSNLS_ISO_CURRENCYNLS_CALENDARNLS_TIME_FORMATNLS_TIMESTAMP_FORMATNLS_TIME_TZ_FORMATNLS_TIMESTAMP_TZ_FORMATNLS_DUAL_CURRENCYNLS_COMP BINARYNLS_LENGTH_SEMANTICS BYTENLS_NCHAR_CONV_EXCP FALSE会话字符集SQL> select * from nls_session_parameters;PARAMETER VALUE------------------------------------------------------------------------------------------------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_CURRENCY $NLS_ISO_CURRENCY AMERICANLS_NUMERIC_CHARACTERS .,NLS_CALENDAR GREGORIANNLS_DATE_FORMAT DD-MON-RRNLS_DATE_LANGUAGE AMERICANNLS_SORT BINARYNLS_TIME_FORMAT HH.MI.SSXFF AMNLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AMNLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZRNLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZRNLS_DUAL_CURRENCY $NLS_COMP BINARYNLS_LENGTH_SEMANTICS BYTENLS_NCHAR_CONV_EXCP FALSE修改会话显⽰为中⽂NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" ----------.bash_profile⾥⾯的参数只是在修改会话的字符集,也可以直接export指定NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" -------对应的分别是语⾔、地区、字符集。

5、修改oracle的字符集

5、修改oracle的字符集
#将ZHS16GBK改为AL32UTF8,保存退出; 2、生效配置文件:
[oracle@slave-node2 ~]$ source /home/oracle/.bash_profile 5.3、说明:
以上是一个oracle实例的字符集修改,如果有多个oracle实例,需要进入到实例中按照"5.1"步骤执行即可;
SQL> select userenv('language') from dual; USERENV('LANGUAGE') -------------------------------------------------------------------------------AMERICAN_AMERICA.ZHS16GBK 2、修改字符集,依次执行如下命令:
Processing math: 100%
请求出错错误代码400请尝试刷新பைடு நூலகம்面重试
5、修改oracle的字符集
注意:修改字符集前需要将表空间进行数据泵备份; 5.1、修改server端字符集: 1、登录到oracle实例查看字符集:
[oracle@slave-node2 ~]echoORACLE_SID orcl
[oracle@slave-node2 ~]$ sqlplus sys/123456@orcl as sysdba SQL> show parameter name;
SQL>SHUTDOWN IMMEDIATE; SQL>STARTUP MOUNT; SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0; SQL>ALTER DATABASE OPEN; SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8; SQL>SHUTDOWN IMMEDIATE; SQL>STARTUP; SQL> select userenv('language') from dual; USERENV('LANGUAGE') ---------------------------------------------------AMERICAN_AMERICA.AL32UTF8 5.2、修改client端字符集: 1、设置client端字符集: [oracle@slave-node2 ~]$ cat /home/oracle/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=PATH : HOME/.local/bin:$HOME/bin export PATH export ORACLE_BASE=/application/oracle #oracl安装目录 export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 #oracle路径 export ORACLE_SID=orcl #oracle启动数据库实例名 export ORACLE_TERM=xterm #xterm窗口模式安装 export PATH=ORACLEHOME/bin: /usr/sbin:PATH #添加系统环境变量 export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib #添加系统环境变量 export LANG=en_US.UTF-8 #防止安装过程出现乱码 export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 #设置Oracle客户端字符集,必须和oracle安装时的字符集保持一致

Oracle查看数据库字符集和客户端字符集SQL语句

Oracle查看数据库字符集和客户端字符集SQL语句

Oracle查看数据库字符集和客户端字符集SQL语句
Oracle 数据库分为数据库字符集和客户端字符集两种!
很多刚接触的朋友经常会搞混这两个字符集,数据库字符集是在创建数据库时进行指定的,不建议更改!而客户端字符集是可以随时更改的!
查询数据库字符集:
select * from nls_database_parameters t where t.parameter i n ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
查询客户端字符集:
SELECT USERENV('language') FROM DUAL;
如何修改客户端字符集?
Windows:
set NLS_LANG=american_america.AL32UTF8set NLS_LANG =SIMPLIFIED CHINESE_CHINA.ZHS16GBK
Linux:
export NLS_LANG=american_america.AL32UTF8export NLS_ LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBK
以上为常用客户端字符集,一个是英文,一个是中文!
本次分享到此结束啦~
如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。

Oracle查看字符集

Oracle查看字符集

Oracle查看字符集1.查看字符集1⼀、oracle服务端字符集2 SQL> select userenv('language') from dual ;34 USERENV('LANGUAGE')5 ----------------------------------------------------6 AMERICAN_AMERICA.ZHS16GBK789⼆、oracle客户段字符集10112.1 window环境下,修改注册表ORACLE_HOME⽬录下的环境变量NLS_LANG。

12132.2 unix/linux环境下,就是环境变量$NLS_LANG1415 [oracle@wang ~]$ echo $NLS_LANG16 AMERICAN_AMERICA.ZHS16GBK1718查看数据库字符集1920数据库服务器字符集select * from nls_database_parameters;,其来源于props$,是表⽰数据库的字符集。

2122 客户端字符集环境select * from nls_instance_parameters;,其来源于v$parameter,表⽰客户端的字符集的设置,可能是参数⽂件,环境变量或者是注册表23 24如何查询dmp⽂件的字符集2526⽤oracle的exp⼯具导出的dmp⽂件也包含了字符集信息,dmp⽂件的第2和第3个字节记录了dmp⽂件的字符集。

如果dmp⽂件不⼤,⽐如只有⼏M或⼏⼗M,可以⽤UltraEdit打开(16进制⽅式),看第2第3个字节的内容,如0354,然后⽤以下SQL查2728 SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;2930 ZHS16GBK3132如果dmp⽂件很⼤,⽐如有2G以上(这也是最常见的情况),⽤⽂本编辑器打开很慢或者完全打不开,可以⽤以下命令(在unix主机上):33cat exp.dmp |od -x|head -1|awk'{print $2 $3}'|cut -c 3-634然后⽤上述SQL也可以得到它对应的字符集2.od 命令解释#od命令功能说明:输出⽂件内容。

如何设置Oracle数据库客户端字符集以及系统中的NLS_LANG环境变量

如何设置Oracle数据库客户端字符集以及系统中的NLS_LANG环境变量

如何设置Oracle数据库客户端字符集以及系统中的NLS_LANG环境变量概述:本地化是系统或软件运⾏的语⾔和⽂化环境。

设置NLS_LANG环境参数是规定Oracle数据库软件本地化⾏为最简单的⽅式。

NLS_LANG参数不但指定了客户端应⽤程序和Oracle数据库所使⽤的语⾔和地区;同时也指定了客户端程序输⼊数据和显⽰数据所使⽤的字符集。

本⽂主要包含如下五部分◆ NLS_LANG环境变量的构成◆ NLS_LANG环境变量的格式◆如何查看数据库NLS参数设置◆举例说明如何设置NLS_LANG环境变量◆举例说明⼀些特殊情况⼀,NLS_LANG环境变量的构成NLS_LANG环境变量由如下三部分构成:1,LANGUAGE:客户端系统所使⽤的语⾔。

指定Oracle数据库反馈的消息(例如异常信息,提⽰信息等)、字符数据的排列顺序(当指定ORDER BY时)、⽇(年⽉⽇中的天)名称,⽉名称等所使⽤的语⾔。

每个⽀持的语⾔都有唯⼀的名称。

例如,若操作系统使⽤简体中⽂,则为SIMPLIFIED CHINESE;若操作系统使⽤美式英⽂操作系统,则为AMERICAN。

LANGUAGE参数中隐含地区和字符集参数的信息。

如果没有指定LANGUAGE参数的值,则默认值为AMERICAN。

2,TERRITORY:客户端系统所在的地区。

指定默认的⽇期,货币以及数字格式。

每⼀个⽀持的地区都有唯⼀的名称。

如,CHINA,AMERICA或CANADA。

如果没有指定TERRITORY参数,则此参数的值由LANGUAGE参数推理得出。

3,CHARSET:客户端应⽤程序所使⽤的字符集。

正确地设置NLS_LANG环境变量,则使得字符数据能够在客户端字符集和数据库字符集之间正确地转换。

设置NLS_LANG不会改变客户端系统的字符集,它仅仅是让Oracle数据库知道客户端应⽤程序使⽤的是什么字符集,从⽽进⾏相应的字符集转换。

如果客户端和数据库字符集相同,则Oracle数据库忽略字符集校验,不执⾏字符集转换。

oracle数据库字符集

oracle数据库字符集

oracle数据库字符集Oracle字符集的基本原理1. Oracle服务器字符集oracle以哪种字符编码存储字符,可以通过以下语句查出数据库字符集的设置。

⽅法1SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';PARAMETER VALUE---------------------------------------------------------------- ----------------------------------------------------------------NLS_CHARACTERSET AL32UTF8⽅法2SQL> select userenv('language') from dual;USERENV('LANGUAGE')----------------------------------------------------AMERICAN_AMERICA.AL32UTF82. 客户端操作系统字符集Windows,可以使⽤chcp命令获得代码页(code page)C:\Users\zy>chcp活动代码页: 936到微软的官⽅⽂档《》找到其对应的字符集Linux,字符集在/etc/sysconfig/i18n设置:LANG="zh_CN.GB2312" (指定当前操作系统的字符集)SUPPORTED="zh_CN.GB2312"(指定当前操作系统⽀持的字符集)SYSFONT="lat0-sun16"(指定当前操作系统的字体)3.客户端NLS_LANG参数:该参数⽤于向Oracle指⽰客户端操作系统字符集它的格式如下: NLS_LANG = language_territory.charset它有三个组成部分(语⾔、地域和字符集),每个成分控制了NLS⼦集的特性。

Oracle-字符集转换

Oracle-字符集转换

Oracle-字符集转换字符集是按照⼀定的字符编码⽅案,对⼀组特定的符号,分别赋予不同数值编码的集合。

⽇常使⽤时,服务端与客户端字符集需⼀致。

--服务端select*from nls_database_parameters;--客户端SELECT USERENV('LANGUAGE') FROM DUAL;数据库字符集调整最常⽤的是ALTER命令和完全的导出和导⼊两种。

第⼀种,ALTER DATABASE字符集语句是迁移字符集的最快⽅法,但只能在特殊情况下使⽤。

ALTER DATABASE字符集语句不执⾏任何数据转换,因此,当且仅当新字符集是当前字符集的严格超集时,才可以使⽤它。

--ALTER DATABASE字符集语句的语法如下,db_name为可选项:ALTER DATABASE[db_name]CHARACTER SET new_character_set;第⼆种,数据泵(EXPDP/IMPDP)⽅式代价较⾼,耗时且占⽤资源多,并且需要在迁移时对数据进⾏扫描,确认在迁移时是否会发⽣数据截断和字符集转换错误。

数据库字符集迁移有两个阶段:数据扫描和数据转换。

在更改数据库字符集之前,使⽤字符集扫描⼯具确定在更改数据库字符集之前所需的⼯作量。

使⽤数据泵导⼊导出脚本⽰例,脚本需在数据库服务器执⾏:--查看管理员⽬录确认导出⽂件位置路径SELECT*FROM dba_directories;--expdp导出带有条件expdp ⽤户/密码@服务名 directory=DATA_PUMP_DIR dumpfile=数据⽂件⽂件名.dmp logfile=⽇志⽂件⽂件名.log tables=导出表名 query='" where lsh in (select lsh from table_1 where code !='1' and flag='1')"' CONTENT选项可选导出结构或数据导出格式默认为.dmp--impdp导⼊导⼊时重命名存在表则增加数据主键重复数据忽略导⼊时也可以限定导⼊时所属表空间impdp ⽤户/密码@服务名 directory=DATA_PUMP_DIR dumpfile=数据⽂件⽂件名.dmp REMAP_TABLE =导出⽤户名.导出表名:导⼊表名 TABLE_EXISTS_ACTION=append data_options=skip_constraint_errors 字符集扫描⼯具 Character Set Scanner 适⽤于 Oracle Database 10g 和 Oracle Database 11g 的字符集扫描程序作为数据库软件的⼀个组件提供。

Oracle中汉字的乱码问题

Oracle中汉字的乱码问题

Oracle中汉字的乱码问题ZDNet软件频道时间:2007-10-06作者:中国IT实验室| 中国IT实验室我要评论()本文关键词:开发数据库Oracle在国内外大中型数据库管理系统中,把ORACLE作为数据库管理平台的用户比较多。

ORACLE 不论是数据库管理能力还是安全性都是无可非议的,但是,它在汉字信息的显示方面着实给中国用户带来不少麻烦,笔者多年从事ORACLE数据库管理。

在国内外大中型数据库管理系统中,把Oracle作为数据库管理平台的用户比较多。

Oracle不论是数据库管理能力还是安全性都是无可非议的,但是,它在汉字信息的显示方面着实给中国用户带来不少麻烦,笔者多年从事Oracle数据库管理,经常收到周围用户和外地用户反映有关Oracle数据库汉字显示问题的求援信,主要现象是把汉字显示为不可识别的乱码,造成原来大量信息无法使用。

本文将就这一问题产生的原因和解决办法进行一些探讨,供存在这方面问题的用户朋友参考。

1、原因分析通过对用户反映情况的分析,发现字符集的设置不当是影响Oracle数据库汉字显示的关键问题。

那么字符集是怎么一会事呢?字符集是Oracle为适应不同语言文字显示而设定的。

用于汉字显示的字符集主要有ZHS16CGB231280,US7ASCII,WE8ISO8859P1等。

字符集不仅需在服务器端存在,而且客户端也必须有字符集注册。

服务器端,字符集是在安装Oracle时指定的,字符集登记信息存储在Oracle数据库字典的V$NLS_PARAMETERS表中;客户端,字符集分两种情况,一种情况是sql*net 2.0以下版本,字符集是在windows的系统目录下的Oracle.ini文件中登记的;另一种情况是sql*net 2.0以上(即32位)版本,字符集是在windows的系统注册表中登记的。

要在客户端正确显示Oracle数据库汉字信息,首先必须使服务器端的字符集与客户端的字符集一致;其次是加载到Oracle数据库的数据字符集必须与服务器指定字符集一致。

Oracle数据库字符集的查询

Oracle数据库字符集的查询

Oracle数据库字符集的查询Oracle数据库字符集通俗的讲就是一个字节数据的相关的解释的符号集合,它具有大小的差异,也有互相包容关系。

Oracle是支持国家语言的相关体系结构,它允许你使用本地化语言来存储,处理,检索数据。

它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

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

它的格式如下:NLS_LANG = language_territory.charset 它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。

其中:Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset指定字符集。

如:AMERICAN _ AMERICA. ZHS16GBK。

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

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

如何查询Oracle的字符集很多人都碰到过因为字符集不同而使数据导入失败的情况。

这涉及三方面的字符集,一是Oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。

在做数据导入的时候,需要这三个字符集都一致才能正确导入。

1、查询Oracle Server端的字符集:有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:SQL>select userenv(‘language’) from dual; 结果类似如下:AMERICAN _ AMERICA. ZHS16GBK。

2、如何查询dmp文件的字符集:用Oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2 和第3个字节记录了dmp文件的字符集。

ORA-00911:invalidcharacter错误解决

ORA-00911:invalidcharacter错误解决

ORA-00911:invalidcharacter错误解决多数情况如下:控制⾯板--系统和安全---系统--⾼级系统设置--⾼级--环境变量--系统变量中变量名:NLS_LANG变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK把这个变量添加完成以后,把系统重启⼀下就ok了,重启以后,错误提⽰消失了。

可能还有如下⼀些个情况:1. 应该是错误输⼊了,输⼊半⾓字符就⾏了。

2. 错误信息ORA-00911: invalid character说明了在执⾏的中出现了⽆效字符,所在SQL语句⽆法通过过程导致了错误结果。

3. 可能出现的原因有:错误地输⼊了,⽐如输⼊了全⾓逗号。

4. 如果使⽤C++、Java、C#等编程时,总会习惯在语句最后加分号,⽽这个符号在SQL中是⽆效字符。

5. 实际语句和列类型不匹配,⽐如将数值列赋值为字符串。

6. 与display函数不同,display_cursor显⽰的为真实的执⾏计划。

7. 对于format参数,使⽤与display函数的各个值,同样适⽤于display_cursor函数。

8. 当statistics_level为all或使⽤gather_plan_statistics提⽰可以获得执⾏时的统计信息。

9. 根据真实与预估的统计信息可以初步判断SQL效率低下的原因,如统计信息的准确性、主要的开销位于那些步骤等。

10. 看你的sql语句最后是否有分号,有的话去掉就⾏看你Oracle服务器端字符集是否和Oracle客户端字符集匹配。

11. 查询oracle server端的字符集:SQL>select userenv(‘language’) from dual。

12. 查询oracle client端的字符集。

在windows平台下,就是注册表⾥⾯相应OracleHome的NLS_LANG。

13. 还可以在dos窗⼝⾥⾯⾃⼰设置,⽐如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK。

设置环境变量修改Oracle客户端字符集

设置环境变量修改Oracle客户端字符集
此时, 当数据从数据库中提取出来并在客户端显示时, 必 须 进 行 从 ZHS16GBK 到 US7ASCII 字 符 集 的 转 换 。 如 果 US7ASCII 字符集不包含某些 ZHS16GBK 字符集中的 字 符 ( 例 如汉字) 时, 则使用特定的字符( 一般用“? ”) 代替。因此, 客户 端和数据库服务端字符集不同, 容易发生因字符集转换带来 的数据转换或损耗。
PARAMETER
VALUE
------------------------------
-------------------------
NLS_CHARACTERSET
US7ASCII
影 响 客 户 端 字 符 集 的 是 环 境 变 量 NLS_LANG, 在 Win-
dows 中 , 确 定 客 户 端 字 符 集 首 先 是 本 进 程 定 义 的 环 境 变 量
在前文提到的问题中, 当字符集为 US7ASCII 的数据库数 据传送到字符集为 ZHS16GBK 数据库之前, 必须分别用不同 客户端字符集连接不同的数据库, 否则至少会出现 1 次字符 集转换的问题。同样, 程序至少需要做 1 次修改客户端字符集 的操作。
常见修改客户端字符集方法是 修 改 注 册 表 中 NLS_LANG 的值, 连接数据库后, 再将注册表中的值恢复。此方法存在 2 个问题: ( 1) 某些情况, 操作系统不允许修改注册表; ( 2) 如果 忘记将注册表中 NLS_LANG 的值恢复, 可能会影响其他程序。
nls_database_parameters 获权限, 无需额外授权:
SQL> select PARAMETER, VALUE
2 from nls_database_parameters

ORA03114等错误

ORA03114等错误

措施:如果偶尔出现,可在服务端的协议配置文件PROTOCOL.ORA中增加一行
TCP.NODELAY=YES;
如果经常出现,则为客户端与服务端字符集不一致或网络原因。
客户端的字符集在注册表里定义: HKEY__LOCAL__MACHINE/SOFTWARE/ORACLE/NLS__LANG
在客户端注册表中的TCP参数项中设置 TCPMAXDATARETRANSMITIONS=20。
2、ORA-01000
特征:达到会话允许的最大游标数
原因:达到会话允许的最大游标数
措施:有两种解决方法:
(1)在初始化文件INIT.ORA文件中增加OPEN_CURSORS的数量,一般要求大于200。
特征:当前会话无法读到以前版本的数据
原因:原因很多,主要原因有下列:回滚段太小、太少;回滚段冲突;交叉提交(FETCH_ACROSS)
措施:增加回滚段数量;
6、ORA-04031
特征:共享池内存区内存不够,或产生内存碎片
原因:当试图装载一个大包时或执行一个较大的存储过程时,而共享池没有连续的内存空间。
原因:表空间已满;存储参数不合理,NEXT太小;没有连续的区间
措施:如果表空间已满,则需为表空间增加文件;如果存储参数不合理,则需增加INITIAL和NEXT;如果没有连续的区间,需要合并空闲的表空间。
查看空间碎片用DBA_FREE_SPACE
5、ORA-01555
(2)在应用级,与开发工具有关,例如设置MAXOPEN_CURSORS等。
3、ORA-01545 来自特征:某个回滚段不可用
原因:(1)当使回滚段ONLINE时,但回滚段不可用,例如回滚段所在表空间OFFLINE;

64位oracle数据库安装和初始化字符集设置

64位oracle数据库安装和初始化字符集设置

64位oracle数据库安装和初始化字符集设置以下以安装oracle11g 为例,安装环境为win764位机器,为了减少因浏览器不兼容带来的问题,推荐使用IT。

首先分为四大步骤,一、安装oracle数据库二、安装oracle数据库客户端三、安装sql/plus开发工具四、初始化字符集设置(调试字符集乱码问题)咱们看一下详细情况:一、安装oracle数据库,从网上下载一下oracle数据库,按要求安装。

二、安装oracle数据库客户端1、下载instantclient-basic-win32-11.2.0.1.0.zip (一定得是32位的,不要下错了版本,Oracle官网有下载),将其解压至Oracle安装目录的Product下(本机命名为:instantclient_11_2):C:\oracle11g\product拷贝数据库安装根目录下的一个文件夹:C:\oracle11g\product\11.2.0\dbhome_1\NETWORK到Oracle客户端目录下C:\oracle11g\product\instantclient_11_2(其实只需要NETWORK\ADMIN\tnsnames.ora)2、设置环境变量(修改PATH和TNS_ADMIN环境变量):右击"我的电脑" - "属性" - "高级" - "环境变量" - "系统环境变量":1).选择"Path" - 点击"编辑", 把" C:\oracle11g\product \instantclient_11_2;" 加入;2).点击"新建", 变量名设置为"TNS_ADMIN", 变量值设置为" C:\oracle11g\product \instantclient_11_2;", 点击"确定";3>.点击"新建", 变量名设置为"NLS_LANG", 变量值设置为"SIMPLIFIED CHINESE_CHINA.ZHS16GBK", 点击"确定";三、安装sql/plus开发工具从网上下载PLSQL714开发工具,安装时目录选择在如图(路径不正确可能会安装不成功。

Oracle字符集问题

Oracle字符集问题

使用常用的gbk,utf8以及ascii说明(oracle中对应hs16gbk,al32utf8,us7ascii)。

其中,ascii为经典的单字节编码,采用7位,只能表示128个常用字符以及计算机控制字符,不能显示中文等字符;gbk为中国大陆标准,16位,简体中文字符集标准;utf8为unicode 的一种最常用实现,兼容ascii的字符使用1位,其余字符都采用3位,可以表示任何字符。

Utf8其实已经可以称为国际标准字符集编码,应首先考虑使用utf8。

需要说明的是,虽然gbk跟utf8都能表示中文字符,但每个字符的编码是不一样的,所以不能认为是兼容的。

其实,oracle的字符系统很简单,主要由3部分组成:客户终端字符集,nls_lang环境变量字符集,数据库使用的字符集。

其中,客户终端各种各样,比如windows下cmd,unix/linux下terminal/console,甚至如toad等工具也可以视为一个终端。

我们使用windows cmd举例说明,cmd使用了gbk编码(好像不能修改)nls_lang环境变量决定了终端与服务器连接时,要不要转换字符集,如果nls_lang和服务器端数据库使用的编码不一样,那就要进行转码;如果设为一样,就不会发生转码。

比如一个终端cmd查询一张数据库表,而其nls_lang设为american_america.zhs16gbk,而数据库为american_america.al32utf8,则数据库中的数据传到终端时,首先要进行utf8到gbk的转码。

而转码又有两种情况,a.就是一个字符在两中编码里都有,就是具体的码文不一样;b.转码时发现一个字符在另一种编码里没有,则直接用替代字符代替,而这一般就是…?‟字符了。

这里要注意的是,我们一般所说的乱码有2种,一种就是b所说的…?‟,而另一种出现的奇奇怪怪的字符就是由于nls_lang设置等转码原因造成的。

而数据库使用的字符集就是数据库实际使用的字符集。

oracle 的连接参数

oracle 的连接参数

oracle 的连接参数Oracle的连接参数是在使用Oracle数据库时所需的参数配置,它决定了数据库连接的方式和行为。

正确配置连接参数可以提高数据库的性能和安全性。

以下是一些常见的Oracle连接参数及其作用。

1. 用户名和密码(User ID and Password):在连接Oracle数据库时,需要提供有效的用户名和密码来进行身份验证。

用户名用于标识数据库用户,而密码用于验证用户的身份。

正确的用户名和密码才能成功连接到数据库。

2. 数据库主机地址(Host Address):数据库主机地址指的是Oracle数据库所在的服务器的IP地址或主机名。

通过指定正确的主机地址,客户端才能与服务器建立连接。

3. 端口号(Port Number):端口号是用于标识不同网络服务的数字。

Oracle数据库使用默认的端口号1521。

在连接数据库时,客户端需要指定正确的端口号以与数据库进行通信。

4. 服务名(Service Name):服务名是指Oracle数据库所提供的数据库服务的名称。

每个数据库可以有一个或多个服务名。

客户端可以通过指定正确的服务名来连接到特定的数据库。

5. SID(System Identifier):SID是Oracle数据库的唯一标识符,用于区分不同的数据库实例。

在连接到数据库时,客户端可以通过指定正确的SID来选择要连接的数据库。

6. 连接类型(Connection Type):连接类型指的是客户端与数据库之间建立连接的方式。

常见的连接类型包括本地连接(Local Connection)和远程连接(Remote Connection)。

本地连接是指客户端和数据库在同一台机器上,而远程连接是指客户端和数据库在不同的机器上。

7. 连接超时时间(Connection Timeout):连接超时时间指的是客户端连接数据库时等待的最长时间。

如果在超过超时时间后仍无法建立连接,连接将被终止。

DBCA建库

DBCA建库

ORACLE 安装部分说明一、通过 dbca 创建数据库Oracle9i DBCA 总共提供四种操作模式,进行数据库管理工作,分别是: 总共提供四种操作模式,进行数据库管理工作, 分别是: 1、 创建数据库(Create a database).] 、 创建数据库( ) 2、 配置数据库各项设定(Configuration database options in a database). 、 配置数据库各项设定( ) 3、 删除数据库(Delete a database). 、 删除数据库( ) 4、 模板管理(Manager Templates). 、 模板管理( )个选项, 这里有 4 个选项, Data Warehousing : 这个模版是用来创建数据仓库环境的(DDS) 这个模版是用来创建数据仓库环境的( ) 。

Transaction Processing : 这个模版是用来创建联机事务处理环境的 这个模版是用来创建联机事务处理环境的(OLTP)。

General Purpose: 0G 以下者慎用! 以下者慎用! ) New Database:以自定义方式创建数据库。

以自定义方式创建数据库。

以自定义方式创建数据库 特性。

当然也很巨大! (小硬盘 这个模版创建的数据拥有 DDS 和 OLTP 特性。

当然也很巨大! 小硬盘 8 (设置全域数据库名称(Global Database Name)和 SID。

所谓全域数据库名称目的是希望能够在网络上唯一识别每个 oracle 数据库,格式通常如 下:[Oracle SID 名称].[数据库主机所在网域名称] 我们公司的域名称:,数据库 SID 设定 oracleDB。

那么全域数据库名称就可 以设定为: 下一步选择:No,don’t register the database。

Database Features(数据库属性) : Select the features you want to configure for use in you database(选择建立新数据库时 欲支持的选项配置) 。

修改oracle字符集注意事项

修改oracle字符集注意事项

修改oracle字符集注意事项
修改Oracle字符集是一个非常重要的操作,需要特别小心和谨慎。

在进行字符集修改时,需要注意以下几个方面:
1. 数据备份,在修改字符集之前,务必对数据库进行完整备份。

这是非常重要的,因为字符集修改可能会导致数据损坏或丢失,而
备份可以在出现问题时进行恢复。

2. 数据库状态,在修改字符集之前,需要确保数据库处于正常
的状态,并且没有正在进行的重要操作。

最好在非高峰期进行字符
集修改,以避免影响数据库的正常运行。

3. 系统权限,进行字符集修改需要具有足够的权限,通常需要
使用sysdba权限或者具有ALTER DATABASE权限的用户来执行字符
集修改操作。

4. 系统空间,在进行字符集修改之前,需要确保数据库所在的
表空间有足够的空间来存储修改后的字符集数据。

字符集修改可能
会导致数据存储空间的变化,需要提前做好空间规划。

5. 数据转换,在进行字符集修改时,需要对现有数据进行转换,以确保数据能够正确地映射到新的字符集中。

这可能涉及到对表中
数据的逐个修改,因此需要谨慎对待,避免数据丢失或损坏。

6. 系统测试,在字符集修改完成后,需要对系统进行全面的测试,确保系统的各项功能和性能都没有受到影响。

特别需要测试与
字符集相关的功能,如排序、比较和检索等。

总的来说,修改Oracle字符集是一个复杂而且危险的操作,需
要在充分的准备和谨慎的态度下进行。

务必在专业人士的指导下进
行字符集修改,并且做好充分的备份和风险评估。

希望这些注意事
项能够帮助你更好地进行Oracle字符集的修改。

关于ORACLEa的merican_america.us7ascII字符集问题

关于ORACLEa的merican_america.us7ascII字符集问题

关于ORACLEa的merican_7ascII字符集问题项⽬终于快接近尾声了,但却在快要收尾的时候遇到⼀个棘⼿的问题,因为⼀些使⽤ORACLE作为HIS系统数据库的医院,在安装Oracle 的时候,采⽤的字符集为american_7ascII,⽽us7ascII为单字节字符集,只定义了128个符号,并不⽀持中⽂,但当Oracle客户端与服务器端的字符集设置为⼀致的时候,服务器端不对中⽂进⾏任何转换,直接存取到数据库中,当需要显⽰的时候,由客户端操作系统来识别出这是汉字编码来正确显⽰,但这实际上导致数据库标⽰的字符集与实际存⼊的内容是不相符的。

当⽤.net开发程序的时候使⽤“⽤于oracle的.net framework数据提供程序”时就会出现乱码的情况,在⽹上搜了⼀下,解决办法基本为以下三种:⼀更改服务器端字符集为ZHS16GBK等淘汰,因为有可能会与医院的HIS系统共⽤⼀台服务器,⽽更改现有在使⽤中的的数据库字符集显然不是⼀个合理的办法。

⼆在客户端代码中进⾏转换淘汰,这样⼯作量会⽐较⼤,已经写好的数据访问层⼏乎要相当于重写⼀遍,⽽且运⾏效率影响很⼤。

三使⽤OLE DB⽅式连接数据库采⽤。

但这样做在更改DATASET连接串的时候遇到三个问题,1是不⽀持oracle的|| 连接符号,后来⽤另外⼀种⽅式替代了||,2是OLE DB⽀持的外连接⽅式为标准的LEFT,RIGHT 这种写法,⽽ORACLE 8i采⽤的是很怪的(+)写法,只有数据库升级到9i以上的版本时才⽀持left outer join 这种写法,因此⽣成dataset时,当SQL语句中有(+)这种语句时会提⽰错误,解决办法为不理会提⽰,强⾏⽣成,经测试也可以返回结果,但不能使⽤强类型数据⾏。

3是最不好解决的问题,就是当使⽤聚合SQL语句的时候,如果后⾯带有参数,则OLE DB会⾃动在聚合字段后⾯加上⼀个ROWID,因此⽆法查询出结果,⽐如SELECT COUNT(ID) FROM DEPT WHERE ID = :ID会⾃动提交成SELECT COUNT(ID),ROWID FROM DEPT WHERE ID = :ID⽽这显然是不可能成功的,关于这个问题在国内论坛没有搜索到,在⼀个国外论坛上谈到了这个问题,解决办法是需要设置⼀个参数的值为false,但在中没有搜索到可以设置这个参数的办法,估计那个是⽤来设置ADO的,在中不能设置,最后采⽤的⽅案是在查询聚合函数等不需要Daset⾃动创建INSERTCOMMAND,UPDATECOMMAND,DELETECOMMAN的时候,采⽤Oracle⾃⼰的OLE DB数据源连接串。

Oracle客户端与plsql查询数据乱码修改成中文的快速解决方法

Oracle客户端与plsql查询数据乱码修改成中文的快速解决方法

Oracle客户端与plsql查询数据乱码修改成中⽂的快速解决⽅法1、查询ORACLE服务器的语⾔、地域和字符集select * from nls_database_paameters;查询结果如下图,NLS_LANGUAGE 表⽰“语⾔”,NLS_TERRITORY 表⽰“地域”,NLS_CHARACTSET 表⽰“字符集”,将他们三个按照“语⾔_地域.字符集”的格式拼接起来,就有了“AMERICAN_AMERICA.ZHS16GBK”。

下⾯正式的来操作:2、添加本地环境变量:NLS_LANG,进⼊我的电脑,属性,⾼级,环境变量,有则修改成下⾯数值没有就添加1项:NLS_LANG="AMERICAN_AMERICA.ZHS16GBK" 2、按下WIN+R(WIN就是带微软图标的那个按键),输⼊:regedit 打开注册表。

要修改本地注册表中的“HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->KEY_OraClient11g_home1”-----右击NLS_LANG——点击——修改——数值数据改为:AMERICAN_AMERICA.ZHS16GBK3、可能很多⼩伙伴是绿⾊的进⼊注册表没有ORACLE这个选项这就令⼈⾮常头疼了。

因为可能是32位的原因,你到注册表的下⾯看看HKEY_LOCAL_MACHINE->SOFTWARE->Wow6432Node看看有没有ORACLE选项,如果还没有那咱就添加⼀个;代码如下建⽴⼆个后缀名为AMERICAN_10g.reg和CHINESE_10g.reg的注册表;内容分别为Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1]"NLS_LANG"="AMERICAN_7ASCII"和Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1]"NLS_LANG"="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"4、我的plsql是安装在这⾥ D:\Program Files\PLSQL Developer》你们下载之后把注册表放在plsql⽬录下⾯运⾏之后,按下WIN+R(WIN就是带微软图标的那个按键),输⼊:regedit 打开注册表。

数据库字符集(AL32UTF8)和客户端字符集(2%)是不同的

数据库字符集(AL32UTF8)和客户端字符集(2%)是不同的

ห้องสมุดไป่ตู้
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
数据库字符集( AL32UTF8)和客户端字符集( 2%)是不同的
登录oracle数据库时我们会遇到这样的提示信息:“数据库字符集(AL32UTF8)和客户端字符集(2%)是不同的”。 这是由于数据库服务端和客户端的字符集不一致所造成的,服务端字符集和客户端字符集相同才能正确解析出数据库里的内容。它们俩就相 当于一个编码,一个解码,必须相同才能解码正确 解决方案: 1、打开注册表,‘开始’-‘运行’ 输入‘regedit’-确定。 2、找到HKEY_LOCAL_MACHINE\SOFTWARE 3、找到\Wow6432Node 4、 找到\\KEY_OraClient11g_home1. 5、 找到NLS_LANG键并修改NLS_LANG 6、他原来的值是:SIMPLIFIED CHINESE_CHINA.ZHS16GBK ,用SIMPLIFIED CHINESE_CHINA.AL32UTF8替换原来的值 7、重新打开plsql ,登录,就好了。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle客户端与服务端字符集
Oracle 数据库对字符的处理及表现形式分为三个层面,优先级先后分别是数据库初始化参数字符集、OS操作系统环境变量级、session级。

数据库初始化参数字符集是在建数据库前指定的字符集,使用如下语句查询数据库字符集:
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
完整字符集名称分为三部分:语言_地域.字符集,这里以
AMERICAN_AMERICA.ZHS16GBK 和SIMPLIFIED CHINESE_CHINA.ZHS16GBK 为例说明各部分的含义:
语言决定了提示信息使用的语言,如AMERICAN表示使用英语,SIMPLIFIED CHINESE表示使用简体中文;
地域决定了缺省的日期格式等,如:
AMERICA的时间格式为:
SQL>select sysdate from dual;
SYSDATE
------------
20-AUG-12
CHINA的时间格式为:
SQL>select sysdate from dual;
SYSDATE
--------------
20-8月-12
字符集的格式为<语言><比特位数><编码>比如: ZHS16GBK表示采用GBK 编码格式、16位(两个字节)简体中文字符集。

数据库建立后字符集原则上不要修改,如果修改可以用命令alter database set character set xxx; 不过这样修改有一定的危险,有可能会出现乱码造成数据的丢失,而且修改后的字符集一定是修改前字符集的超集,修改数据库字符集一般采用两种方法:
1.导出数据库数据,重建数据库,再导入数据库数据的方式来转换。

2.通过ALTER DATABASE CHARACTER SET语句修改字符集,具体操作
如下:
1)关闭数据库
SQL>SHUTDOWN IMMEDIATE
2)启动到Mount
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
SQL>ALTER DATABASE NATIONAL CHARACTER SET ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP
注:启动数据库后应将有改动的JOB_QUEUE_PROCESSES、AQ_TM_PROCESSES等参数修改为原有值。

NLS_CHARACTERSET设置服务器的字符集。

NLS_LANG客户端字符集定义了客户端字符数据的编码方式,任何发自或发往客户端的字符数据均使用客户端定义的字符集编码,客户端可以看作是能与数据库直接连接的各种应用。

如:当某客户端的NLS_LANG配置的字符集为:SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280,但Oracle服务端配置的字符
集为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK,这样通过客户端操作的字符数据将ZHS16CGB231280字符集编码,则可能导致一些ZHS16CGB231280字符集中不包含的特殊字符出现乱码。

SQL> select '闫珅豪' from dual;
'闫?豪'
------------
闫?豪
因此在配置客户端字符集时应与Oracle服务端字符集保持一致,但是语言设置却可以不同,语言设置建议用英文。

设置客户端字符集可修改.cshrc或.bash_profile配置文件中的NLS_LANG与Oracle服务端一致的字符集,或使用如下命令:
cshrc:
setenv NLS_LANG "SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
bash_profile:
export NLS_LANG='SIMPLIFIED CHINESE'_CHINA.ZHS16GBK
总之,当业务数据存入数据库后中文字符出现乱码时,我们应当查看对数据库存在DML操作的子系统所在服务器配置的NLS_LANG,如果与数据库的字符集不一致,则需修改服务器的NLS_LANG与数据库字符集保持一致;同时,在创建数据库时选择正确的数据库字符集十分重要,这样可以避免由于修改数据库字符集造成的数据异常问题。

附录:Oracle字符集子集、超集对照表
Oracle字符集子集
、超集对照表.docx。

相关文档
最新文档