关于ORACLE NET的一篇文章(转)

本文详细列举了Oracle数据库连接过程中常见的错误及解决方法,包括客户端和服务端的各种配置问题、网络问题和其他可能导致连接失败的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在Oracle数据库用的地方是越来越多了,越来越多的应用被部署在oracle数据库中,作为大型的数据库,网络的连接需求肯定是少不了的,但是在实际的使用中,很多人都曾遇到各种各样的数据库连接错误,通常用户都是在客户端连接数据库时发现的,所以简单的认为是客户端的问题,但是实际上出现连接错误的原因是很多的,在这里主要把常见的错误和自己曾经遇到的错误列举出来,也把以前自己的一些处理方法也提供给大家分享,因为有些是以前遇到过的,现在也只是一些印象,所以有不对之处,希望谅解和指出,共同讨论。[@more@]

现在Oracle数据库用的地方是越来越多了,越来越多的应用被部署在oracle数据库中,作为大型的数据库,网络的连接需求肯定是少不了的,但是在实际的使用中,很多人都曾遇到各种各样的数据库连接错误,通常用户都是在客户端连接数据库时发现的,所以简单的认为是客户端的问题,但是实际上出现连接错误的原因是很多的,在这里主要把常见的错误和自己曾经遇到的错误列举出来,也把以前自己的一些处理方法也提供给大家分享,因为有些是以前遇到过的,现在也只是一些印象,所以有不对之处,希望谅解和指出,共同讨论。

常见的错误:
客户端
ORA-12154 “TNS:无法解析服务名名”
ORA-12198 “TNS:无法找到通向目标的路径径”
ORA-12203 “TNS:不能与目标连接接”
ORA-12533 “TNS:非法ADDRESS 参数数”
ORA-12545 “TNS:名称查找失败”

服务端
ORA-12154: 没有监听程序
ORA-12224: TNS: 没有监听程序
ORA-12500: TNS: 监听程序启动专用服务器进程失败
ORA-12545: TNS: 名称查找失败
TNS-01169: 监听程序不识别口令


错误原因:
1、listener服务的问题
a.在windows环境中,监听器服务没有启动
察看服务中的监听器服务,看是否启动,很多人设置为手动后忘记启动

b.windows环境,服务已经启动,但是仍然报错
在lsnrctl中看status,发现并未启动,通常是由于监听器配置有问题造成,需要修改监听器的配置文件,与c相同
经验感觉,最好还是使用lsnrctl启动监听器比较好,可以直接看到启动的状况

c、启动监听器错误
不论在任何平台,lsnrctl的status报错,都说明没有启动成功,执行start启动监听器
如果仍然抱错,通常原因为监听器配置问题,主要包括了:
ip地址或者主机名称改变:修改listener.ora和tnsnames.ora文件中的主机地址信息
监听的配置文件语法或参数错误:修改监听器配置文件的语法
当然,也可能是一些软件破坏了监听器的相关文件,或者产生了进程冲突,另外,一些防病毒软件可能会阻断监听器甚至关闭监听器

2、监听器正常启动,但是监听信息有问题
监听端口改动:正常的1521端口被占用,改为其他端口,客户端也应该作相应修改
监听的数据库设置有问题:设置了错误的数据库SID,在9i这个错误被数据库修正,真正的数据库信息可以动态注册,所以一般不会出错


3、服务器配置问题
安装了防火墙:有些防火墙默认会阻挡客户端发出的连接包请求,另外防火墙可能会禁用一些端口,其中可能会包括监听端口
安装了杀毒软件:有些杀毒软件也会阻挡连接请求,曾经用过瑞星遇到过这种问题
服务器禁用了监听的端口或者被其他软件占用监听端口
没有安装相关的网络协议:客户端和服务端通常情况下需要相同的网络协议(除非使用连接管理器)

4、客户端配置问题
配置了不正确的tnsnames.ora文件,包括了监听器主机名或ip地址错误,监听端口错误,连接的数据库没有被监听器监听或者不存在
安装了多个Oracle软件,存在多个主目录:因为有多个主目录,所以出现多个tnsnames.ora文件,为不同的软件配置相应的tnsnames.ora文件。这种情况也多见,在安装了数据库和oracle的developer后,出现两个主目录,每个主目录中都有network目录,需要分别进行配置,用户最好确定当前使用的主目录是不是存放了正确连接服务命名的目录,当然,一种简单的方法是干脆让这些tnsnames.ora文件都一样的内容,就没那么多麻烦了


5、系统问题
没有做域名解析:用户配置的文件中使用了主机名称,但是没有相应的域名解析,无法解析成正确的ip地址
使用连接管理器进行了访问控制:察看是否在连接管理器中设置了访问控制
在protocol.ora(9i在sqlnet.ora)中设置了访问控制:是否设置了访问控制
连接的数据库未启动:在服务器端检查连接的数据库是否已经启动

6、网络问题
网络硬件问题,例如网线、交换机、路由器、网卡等网络设备故障:最简单的方法ping
网络设置问题,存在硬件防火墙,交换机或者路由设置问题:同样,测试是否能够连通

7、其他
连接过于频繁:同时的并发连接太频繁造成,可以设置较大的QUEUESIZE,或者创建连个监听器同时监听,当然了,使用了两个端口
监听器参数设置有误:这个就自己看吧
配置了命名服务器或者ldap:因为需要在命名服务器或者ldap服务器上解析服务命名,所以如果这些部分出问题也一样表现为连接出错
不能启动专用连接进程:在客户端是否选择了专用连接方式,另外,也可能设置的进程数、会话数或者环路被共享连接耗尽也会产生类似的这种错误
ORA-12520: TNS: 监听程序无法找到需要的服务器类型的可用句柄:专用服务器选择了共享连接方式,修改tnsnames.ora文件


补充一点。在安装了oracle的机器上,应尽量避免使用“windows优化大师”、“魔法兔子”等优化工具。
有时会将oracle监听的注册表信息删除,解决方法是修改注册表。

在HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/下的Services和CurrentControlSet/Services下找到OracleOraHome92TNSListener项,在右边窗口按右键,新建/字符串,取名ImagePath。

双击新见的建,在“数值数据”项输入D:oracleora92binTNSLSNR.EXE(根据你自己的实际情况进行修改),确定完成。

再次在服务中双击打开OracleOraHome92TNSListener的服务看到其“可执行文件的路径”一栏已经显示了其正确的值。这时你可以启动监听了。

同样也可以对OracleServiceSID进行操作,不过将ImagePath的值改为D:oracleora92binoracle.exe SID即可。

有一个案例看一下。

看看listener.log吧。

TNSLSNR for 32-bit Windows: Version 9.2.0.7.0 - Production on 08-10月-2006 18:02:35

Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.

系统参数文件为E:oracleora92networkadminlistener.ora
写入E:oracleora92networkloglistener.log的日志信息
写入E:oracleora92networktracelistener.trc的跟踪信息
跟踪级别当前为0

以 pid=2444 开始
监听:(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=server10)(PORT=1521)))

TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT [* SID] * RETURN CODE
08-10月-2006 18:02:35 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=Administrator))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=153093888)) * status * 0
08-10月-2006 18:02:35 * (CONNECT_DATA=(SID=ghdssdb)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.13.51.248)(PORT=3935)) * establish * ghdssdb * 12500
TNS-12500: TNS:监听器未能启动专用的服务器进程
TNS-12560: TNS: 协议适配器错误
TNS-00530: 协议适配器错误
32-bit Windows Error: 233: Unknown error
08-10月-2006 18:02:35 * (CONNECT_DATA=(SID=ghdssdb)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.13.51.248)(PORT=3938)) * establish * ghdssdb * 12500
TNS-12500: TNS:监听器未能启动专用的服务器进程
TNS-12560: TNS: 协议适配器错误
TNS-00530: 协议适配器错误
32-bit Windows Error: 233: Unknown error
08-10月-2006 18:02:35 * (CONNECT_DATA=(SID=ghdssdb)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.13.51.248)(PORT=3942)) * establish * ghdssdb * 12500
TNS-12500: TNS:监听器未能启动专用的服务器进程
TNS-12560: TNS: 协议适配器错误
TNS-00530: 协议适配器错误
32-bit Windows Error: 233: Unknown error
...重复

这是网上的一个贴子,当时贴子说上面的文章里没有适合他的这个问题的解决方法。

好多人回贴,都没有有找一以解决方法。最后发贴的人说是这样的:

唉,丢人了,原来是另外一个程序有问题了,几秒钟产生一个新的Session,把session数给撑爆了,问题似乎太简单了,以后一定引以为戒。”

看来同样的故障现象,引起的原因可以有好多种,一定不要有思维定势啊,不过光知道有什么用呢?当你在思维定势里的时候,你是不知道你在定势里的。有时做人也是这样啊!!无奈中。。。。。。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/330796/viewspace-871106/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/330796/viewspace-871106/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值