在VMware上的FC7中安装Oracle10g

安装Oracle10g:
这两天在我的VMware6.0下成功安装了Fedora7,然后在上面又成功安装了Oracle10g。当然,参考了很多网上资料。在FC7中安装Oracle10g,大致分为:下载缺少库;建立安装用户;建立安装目录;修改全局配置文件;安装等几个步骤,具体方法我在这里就不累述了,有兴趣的可参考我的同学暴民的 博客。

我只是补充几点:
安装时用的是oracle用户,如果用root登录时,也应该设置环境变量(具体方法见安装过程)。
可以将/opt/oracle/product/oracle10.1.0/db_1/bin这个加到PATH变量中。
在root用户时要用sqlplus sys/密码 as sysdba形式连接,不可用sqlplus / as sysdba连接(在oracle用户下可以)。
乱码问题及Oracle的NLS:
用sqlplus连接oracle时,可能会遇到乱码问题,在网上也找了些资料,并且参考了Oracle的文档,将自己了解到的内容,在此总结一下。
Oracle为了支持国际化,设计了NLS(National Language Support)系统。NLS包括的内容较多,在这里只介绍一下其中重要的一个方面----字符集(Character Set)。通过设定数据库及客户端所使用的字符集,可以使数据库系统支持世界上现有的大部分文字字符的存储、提取和显示等。
在Oracle数据库系统中,分为客户端和服务器端。
服务器端主要指数据库,我们建立数据库时就要指定它所使用的字符集(Database Character set)。这样,在数据库中涉及到的字符都是以指定的字符集编码方式来进行编码的。
数据库中涉及字符的地方有: 数据库对象(表、列、视图、索引等)名称,PL/SQL中的变量名,CHAR、VARCHAR、VARCHAR2等数据类型,LP/SQL源程序等。数据库字符集会影响这些内容在数据库中的存储编码方式。对于其它的非字符类型,字符集不会产生影响。
而客户端(主要指我们的应用程序,例如sqlplus),也要设定字符集,以使Oracle知道:①从客户端发来的字符数据如何存储到数据库中;②如何将数据从数据库中提取出来发送给客户端。
如果客户端和数据库的字符集设定的不一致,Oracle会对传送的字符数据进行相应的转换。这样,一方面会造成系统性能的下降,另一方面也有可能造成字符数据的丢失。因此,尽量要使客户端的字符集和数据库的一样。如果不一样,也至少要保证数据库的字符集是客户端字符集的超集,这样才不会造成字符转换的丢失。举例来说,一般可以将数据库的字符集设定为Unicode字符集,如UTF8,这样基本上可以处理任何客户端传过来的字符(不管是英文、中文还是其它文字)。
另外要注意的是,数据库的字符集是在建立时设定的,一般不能再修改(如果要修改会繁琐一些); 客户端的字符集,在Windows系统中是在注册表中设定的,(HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraClient10g_home1中的NLS_LANG键,一般中文Windows系统的键值是“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”);而在Linux系统中是通过设定NLS_LANG环境变量(export NLS_LANG=SIMPLIFIED CHINESE_CHINA.UTF8)来实现。当客户端程序运行时,会读取注册表或环境变量来设定其字符集。
但据我的体会,当我们在Windows的CMD方式下和Linux的SHELL方式下运行SQLPLUS还要注意终端的编码方式。请见下面的示意图:
操作系统终端 (CMD SHELL) 字符集 <-> 客户端字符集 (SQL*PLUS 字符集 )<-> 数据库字符集
我理解,当我们在终端上写入数据时,终端上的字符要先转换为客户端字符集的字符(但是,好像终端和SQLPLUS都不负责这事),然后Oracle再将客户端传来的数据转化为数据库的字符集字符存储起来;查询就是一个相反的过程。因此一般情况下,前两者的字符编码要保持一致,不然输入的字符就不能正确转换。即SHELL用UTF-8编码,SQLPLUS也要用UTF8编码,不然后在更新、插入和查询显示数据时就会发生乱码的情况。后二者的转换是由Oracle来负责的,不用担心,只要保证客户端的字符集是数据库字符集的子集即可。
一般三者可设定如下:
Windows:ZHS16GBK->ZHS16GBK->AL32UTF8
Linux:UTF-8->AL32UTF8->AL32UTF8
这就可保证正确显示中文和英文而不发生乱码。客户端和数据库字符集的设定方法在前面已经说过了。终端字符集的设定在Windows的CMD下一般不用设,Linux的终端有编码菜单可用。
当然如果你不在终端运行sqlplus这样的交互式的客户端程序,那就只涉及到客户端和数据库字符集之间的问题,而不用关心三者之间的转换关系。
补充一点有关Unicode的内容:
Unicode是为了在计算机中统一各国的字符编码方式而制定的国际标准字符编码。随着标准的不断更新,它的版本也是在不断的改进。主要有UTF-8,UTF-16,UCS-2等编码方式。
UTF-8:ASCII码等欧美字符用1-2字节表示,用3个字符表示亚洲(如汉字)等字符,用4个字节表示扩展字符;
UCS-2:用固定的2 个字节长度表示各种字符,它不支持扩展字符;
UTF-16:是在UCS-2的基础上用4个字节表示一个扩展字符。
下表是三种编码方式(16进制)的举例:

Oracle10g支持以下几种Unicode的数据库字符集:
AL32UTF8:支持以UTF-8编码的最新Unicode标准码;
UTF8:支持以UTF-8编码的Unicode码;
UTFE:支持以UTF-EBCDIC编码(这种Unicode编码方式类似于UTF-8,不同的只是用2个4字节表示扩展字符)的Unicode码。
另外AL16UTF16支持用UTF-16编码的Unicode码,但是它用于Oracle的NCHAR这样的数据类型(这里就不再详细讨论)。
有关Oracle的NLS更高级、更详细的参考请阅读Oracle文档。

你可能感兴趣的:(vmware,oracle,windows,数据库,oracle10g,终端)