现在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文件
常见的错误:
客户端
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文件
ORA-12520: TNS: 监听程序无法找到需要的服务器类型的可用句柄:专用服务器选择了共享连接方式,修改tnsnames.ora文件
在tnsnames.ora中的服务命名定义块中存在这样的一段:
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora9i)
)
数据库运行在两种模式下,共享服务器方式和专用服务器方式,同样也有两种连接方式,专用连接还是共享连接。
这里面的server就是你选择的连接方式,如果选择了默认方式,则你的数据库是共享服务器方式,你的连接就是共享方式连接,如果是专用服务器方式,就是专用方式连接。如果像上面一样选择了DEDICATED,这表示你设置了专用方式连接,那么不论是共享服务器方式,还是专用服务器方式,你的连接都是以专用方式连接的。如果设置了shared,那么表示选择了共享方式连接。
在共享服务器方式下,专用连接和共享连接都可以,但是在专用服务器方式下,只允许使用专用连接,这时候如果客户端的服务命名中定义了server=shared,则使用这个服务命名将会产生错误。
[@more@]
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora9i)
)
数据库运行在两种模式下,共享服务器方式和专用服务器方式,同样也有两种连接方式,专用连接还是共享连接。
这里面的server就是你选择的连接方式,如果选择了默认方式,则你的数据库是共享服务器方式,你的连接就是共享方式连接,如果是专用服务器方式,就是专用方式连接。如果像上面一样选择了DEDICATED,这表示你设置了专用方式连接,那么不论是共享服务器方式,还是专用服务器方式,你的连接都是以专用方式连接的。如果设置了shared,那么表示选择了共享方式连接。
在共享服务器方式下,专用连接和共享连接都可以,但是在专用服务器方式下,只允许使用专用连接,这时候如果客户端的服务命名中定义了server=shared,则使用这个服务命名将会产生错误。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12180666/viewspace-1034646/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12180666/viewspace-1034646/