Oracle数据库是网络数据库,我们在学习的时候要有一种思想,就是它是运行在服务器上面的数据库软件,它是基于网络的,它不像access,只是一个数据库文件。有这样一个认识,学起来会容易理解很多。在网络的条件下,要访问oracle数据库,就必须要在服务器端和客户端进行相关的配置,这样客户端就能通过网络访问服务器端的数据信息。当然,服务器端和客户端只是逻辑上的划分,我们在学习过程中,这两个端都是装在我们自己这一台电脑上的,网络的嘛,也就是os的网络虚拟循环来模拟的。但是,对网络的配置还是要的,在逻辑上要满足oracle的要求!下面就来具体的介绍这些配置,并且把一些错误和解决方法也拿出来,做个小结。
由于大部分同学用9i数据库,我也装了9i,所以下面的有关路径是基于9i的,操作系统是windows xp sp2,先从服务器端说起。
1、Oracle服务器端网络配置:
作为服务器端,它必须启动数据库的例程,以使别人能够来连接它。oracle在使用以前,它本身的监听程序必须打开,监听程序是服务器中接收和响应客户机对数据库的连接请求的进程,就像mysql数据库那样,mysql的服务必须打开,这样才能做别的事情。在监听程序打开以后,然后挂载数据库,然后打开数据库,打开例程,这样别人就能够连接了。如果服务器端监听进程没有启动,则出现以下错误信息:
ERROR:ORA-12651:TNS:没有监听器
该信息说明所要连接的服务器没有启动监听进程Listener,该进程为Oracle服务器上操作系统进程,监听进程没有启动时,服务器可以正常进行,但是客户端不能与服务器产生连接。这时可以在服务器使用操作系统命令lsnrctl正常起启动监听进程,具体方法如下:
C:>lsnrctl start
停止监听方法:
C:>lsnrctl stop
当然你也可以去服务里面去,点击打开listener服务。
监听程序的启动,它的作用就是监听客户端的连接,因此在服务器端需要配置监听程序进程配置文件,它的名字是listener.ora,它在“『oracle安装目录主目录』networkadmin”目录下。该文件的配置一般情况下在数据库的创建过程中都已经自动写好了,也就是说一般情况下它都是对的,只是在我们修改的主机名后,则需要修改监听进程中的HOST,否则监听程序会出现以下错误(在sql plus中启动服务的话):
Tns-12545:因目标主机或者对象不存在,连接失败
Tns-12560:tns:协议适配器错误
Tns-00515: 因目标主机或者对象不存在,连接失败
Error:1001:unknow error
如果在操作系统的服务列表中启动listener.ora服务,也会出现同样的错误信息,(对话框)进行意外中止。这时,可以修改listener.ora中的下一列信息中HOST处的主机名:(ADDRESS=(PROTOCOL=TCP)(HOST=water-dragon)(PORT=1521))该名称必须与实际符合,重新启动监听程序即可。附:在listener.ora文件中,HOST处允许使用IP地址,这样修改机器名后就不会引起监听程序启动失败。
此外在服务器与listener.ora文件统一目录中还有一个文件即:tnsnames.ora文件,它也是在“『oracle安装目录主目录』networkadmin”目录下,它的作用是什么呢?请看下面!
2、Oracle客户端网络配置: tnsnames.ora的作用就是描述了,客户端和服务器的连接的信息,这里包括连接的协议、连接的服务名等。oracle服务器通过它里面的信息,来判断一个连接是否合法等,这里面有一个很重要的地方就是和listener.ora很相似的地方,“ADDRESS_LIST=(ADDRESS = (PROTOCOL = TCP)(HOST = water-dragon)(PORT = 1521))”,这里所描述的host表示oracle数据库所在的主机名,也就是说,在服务器中,tnsnames.ora默认是使用服务器名进行配置的,所以如果修改了机器名,则该文件同时需要修改,否则出现如下错误:
Error:
ORA:-12545:因目标主机和对象不存在,连接失败
错误代码ORA-12545表示网络连接串(即tnsnames.ora文件中的HOST处)中使用的机器名和IP地址不存在,重新修改编辑此文件把数据库所在的主机名(ip)改对,再重新连接即可。如果tnsnames.ora文件配置不正确,则错误信息会记录在连接日志信息文件中,其错误信息内容为:
The error strutct:
Nr err code:0
Ns main err code:12560
TNS -12560:TNS: 协议适配器出现错误
ns secondary err code:0
nt main err code:530
tns-00530:协议适配器错误
nt secondary err code:2
nt OS err code:0
3、图形化配置oracle网络连接: 前面介绍的方法,是分别配置服务器端和客户端的文本配置方法,当然,现在oracle公司开发很多有用的图形化界面工具,我们可以利用这些工具来轻松的完成配置。
用Oracle9i Net Service的向导工具(Oracle 9i Net Configuration Assistant):可以用它来创建、修改、删除或重命名监听程序,在客户端,使用配置有相同协议地址的连接描述符的客户机可以向监听程序发送连接请求。当然也可以用它来配置服务名(即tnsname.ora中的内容)。
Oracle9i net Manager:可以定义简单名称来表示服务的位置,例如一个数据库,这些简单名称映射为连接描述符。他们包含服务的网络标识和位置。此时可能会有错误,错误信息ORA-12560表示,在操作系统中找不到所定义的实例,在Oracle9i中,如果出现了此类错误,一般来说出错原因有两个,一是实例名被错误的修改,二是Oracle的服务没有正常启动。
4、Oracle常见错误代码的分析与解决
4.1、ORA-00600:internal error code,arguments:[num],[?],[?],[?],[?] 产生原因:
这种错误通常为ORACLE的内部错误,只对OSS和ORACLE开发有用。ORA-600的错误经常伴随跟踪文件的状态转储(系统状态和进程状态),系统状态存储将包括ORACLE RDBMS持有的当前对象的信息,进程状态转储则将显示特殊进程持有的对象,当进程符合了某错误条件时,经常是由于一些信息取自它持有的一个块,如果我们知道这些错误进程持有的块,就容易跟踪问题的来源。
解决方法:
一般来说出现这个错误我们本身是无法解决的,只有从提高系统本身各方面来解决这个内部问题,如增加硬件设备,调整系统性能,使用OPS(当然OPS从某种意义上说并不是一种好的解决方式)等。ORA-600错误的第一个变量用于标记代码中错误的位置(代码中的每个部分的第一变量都不一样),从第二个到第五个变量显示附加信息,告诉OSS代码在哪里出现了错误。
一个报错例子如下:
ORA-00600: internal error code, arguments: [1237], [], [], [], [], [], [], []
相应的英文如下:
Cause:This is a catchall internal error message for Oracle program exceptions.It indicates that a process has met a low-level,unexpected condition.Various causes of this message include:
Time-outs(超时)
File corruption(文件太老)
Failed data checks in memory(内存检索失败)
Hardware,memory,or I/O errors(硬件、内存或者磁盘错误)
Incorrectly restored files(错误的重建文件)
4.2、ORA-03113:end-of-file on communication channel
产生原因:
通讯不正常结束,从而导致通讯通道终止
解决方法:
1>.检查是否有服进程不正常死机,可从alert.log得知
2>.检查sql*Net Driver是否连接到ORACLE可执行程序
3>.检查服务器网络是否正常,如网络不通或不稳定等
4>.检查同一个网上是否有两个同样名字的节点
5>.检查同一个网上是否有重复的IP地址
相应的英文如下:
Cause:An unexpected end-of-file was processed on the communication channel.The problem could not be handled by the Net8,two task,software.This message could occur if the shadow two-task process associated with a Net8 connect has terminated abnormally,or if there is a physical failure of the interprocess communication vehicle,that is,the network or server machine went down.
Action:If this message occurs during a commection attempt,check the setup files for the appropriate Net8 driver and confirm Net8 software is correctly installed on the server.If the message occurs after a connection is well established,and the error is not due to a physical failure,check if a trace file was generated on the server at failure time.Existence of a trace file may suggest an Oracle internal error that requires the assistance of customer support.
4.3、ORA-00942:table or view does not exist
产生原因:
这是由于装载的表或视图不存在,多半是CATEXP.SQL还没有运行,无法执行Export视图,如果CATEXP.SQL已经运行,则可能是版本错误。
解决方法:
因为Import和Export共享的一些视图是通过运行CATEXP.SQL来装载的(它们具有相同的视图),并不生成单独的CATEXP.SQL,因而造成视图与Export代码不同步,较难保持彼此之间的兼容,用户就必须建立自己的Export应用,从而避免ORA-00942的错误。
相应的英文如下:
Cause:The table or view entered does not exist,a synonym that is jnot allowed here was used,or a view was referenced where a table is required.Existing user tables and views can be listed by querying the data dictionary.Certain privileges may required to access the table.If an application returned this message,the table the application tried to access does not exist in the database,or the application does not have access to it.
Action:Check each of the following:
The spelling of the table or view name.
That a view is not specified where a table is required
That an existing table or view name exists.
Contact the database administrator if the table needs to be created or if user or application priviledes are required to access the table.
Also, if attempting to access a table or view in another schema,make certain thecorrect schema is referenced and that access to the object is granted.
4.4、ORA-12560: TNS:协议适配器错误
1>.检查Terminal Service, 远程桌面是不是起因
2>.环境变量set oracle_sid=需要的服务名
3>.listener.ora, tnsnames.ora等内机器名或者IP地址是否正确
4>.netstat –a检查端口是否被占用
5>.检查注册表HKEY_LOCAL_MACHINESoftwareOracleHome0新增字符串USE_SHARED_SOCKET=TRUE, 重新启动服务ERROR:
4.5、ORA-01031: insufficient privileges
产生原因:权限不足
解决方法:修改相应权限即可