现在Oracle数据库用的地方是越来越多了,越来越多的应用被部署在oracle数据库中,作为大型的数据库,网络的连接需求肯定是少不了的,但是在实际的使用中,很多人都曾遇到各种各样的数据库连接错误,通常用户都是在客户端连接数据库时发现的,所以简单的认为是客户端的问题,但是实际上出现连接错误的原因是很多的,在这里主要把常见的错误和自己曾经遇到的错误列举出来,也把以前自己的一些处理方法也提供给大家分享,因为有些是以前遇到过的,现在也只是一些印象,所以有不对之处,希望谅解和指出,共同讨论。
常见的错误:
客户端
ORA-12154 “TNS:无法解析服务名名”
ORA-12198 “TNS:无法找到通向目标的路径径”
ORA-12203 “TNS:不能与目标连接接”
ORA-12533 “TNS:非法ADDRESS 参数数”
ORA-12545 “TNS:名称查找失败”
服务端
ORA-12154: 没有监听程序
ORA-12224: TNS: 没有监听程序
IXDBA.NET社区论坛
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)中设置了访问控制:是否设置了访问控制