在链接数据库的时候,有时会遇到一个“ORA12514:监听程序当前没法识别链接描述符中请求的服务”的错误,这个错误其实就是数据库动态注册(关于动态注册会在稍后讲解)不生效,致使监听器没法识别客户端链接符中提供的服务名,从而拒绝创建数据库链接时报的错误信息,因此就须要对监听器配置作修改。数据库
在这里,还需对问题进行细化,有时候可能会发现,在刚开启监听器的时候会发生这个错误,但过了一会再进行链接就不会报错,这实际上是由于动态注册须要时间,而刚开启监听器时,数据库还未注册到监听器,致使报错,这种状况不在本文讨论范围内。服务器
listener.ora文件存放在$ORACLE_HOME/network/admin(以个人Oracle11为例就是D:\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN),这个文件存放的就是监听器的配置,监听器在启动时会读取该文件,咱们先来了解一下这个文件。blog
该文件的大概配置以下图配置
上图中,SID_LIST_LISTENER参数就是数据库注册,动态注册或是静态注册(注册就是将数据库做为一个服务注册到监听器。客户端不须要知道数据库名和实例名,只须要知道该数据库对外提供的服务名就能够申请链接到数据库,动态注册就是在监听器配置文件中不明确的声明数据库实例和服务名,而是在数据库启动时才由数据库自动注册到监听器,静态注册就是在监听器配置文件中明确声明数据库实例和服务名。),LISTENER参数就是监听器的配置,其中,PROTOCOL参数是协议名,通常为TCP,HOST参数是地址,能够写IP地址、服务器名、localhost、127.0.0.1,PORT参数是端口号,默认为1521。network
既然是由于动态注册引发的问题,那么最简单的解决方法天然是由动态注册改成静态注册,以下图请求
红线框内的就是静态注册,SID_NAME参数是数据库实例名,GLOBAL_DBNAME参数是全局数据库名(在配置客户端的本地服务名时“服务名”要与全局数据库名一致),配置好后,重启监听器,就可正常链接了。程序
修改成静态注册看起来虽简单,但也有不足之处,首先,要修改成静态注册需对配置文件和参数较为熟悉,不然颇有可能会配置错误,其次当参数的值有所改变时必须从新修改配置才行。方法
还有一种方法就是修改host参数的值,host参数能够有四种值:IP地址、服务器名、localhost、127.0.0.1,因为可取值变多了,致使了解决办法也随着致使出现问题的缘由而多样化了起来,各类状况均可能有不一样的解决办法,能够在这四个值之间尝试修改,须要注意的是,当采用localhost和127.0.0.1时,客户端的本地服务名不能使用IP地址和服务器名进行配置,不然会报“ORA12541:无监听程序”的错误,还有就是修改以后要重启监听器。im
以上的解决办法只是我本身对这个错误的总结,可能尚没法解决全部的状况,欢迎进行讨论。总结