ORA-12514:TNS:监听程序当前无法识别链接描述符中请求的服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORA-12514:TNS:监听程序当前无法识别链接描述符中请求的服务相关的知识,希望对你有一定的参考价值。

此问题解决的方法和详细的操作步骤如下:

1、首先,按键盘的组合键“ Win+R”,在运行窗口中输入“ services.msc”,按Enter键确认,如下图所示。

2、其次,完成上述步骤后,转到Orcale并启动与Oracle相关的所有服务,如下图所示。

3、接着,完成上述步骤后,转到oracle11g安装目录并找到侦听文件“ listener.ora”,如下图所示。

4、然后,完成上述步骤后,打开“ listener.ora”文件,添加或修改SID_NAME名称为数据库实例名称,如下图所示。

5、最后,完成上述步骤后,启动数据库并检查状态。 此时,重新连接到PL/SQL将恢复正常,重新运行生产环境并恢复正常,如下图所示。

参考技术A 1,首先你要确认是否配置了监听服务,如果没有那么先去配置;
2,如果你配置了监听服务,只是每次关机再开机后,或者重启服务后有这个问题,那么解决方法是:A,每次开启监听服务和主服务后需要等待一会,然后在去连接数据库,就不会有这个问题,建议关机前先关闭Oracle的服务;B,用批处理程序进行服务的开启关闭管理,批处理文件我这有,如果需要请留下联系方式;
参考技术B RA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
解决办法是手动修改监听配置文件:

# listener.ora Network Configuration File: d:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = d:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = d:\oracle\product\10.2.0\db_1)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
在监听配置文件里加入上面中间的那部分,然后重启监听服务:
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = d:\oracle\product\10.2.0\db_1)
(SID_NAME = ORCL)
)本回答被提问者采纳
参考技术C 你在什么情况下遇到这个问题的?你连接的命令好似什么?用的什么连接符? tnsnames.ora里面的配置是怎么样的?用tnsing能通么?数据库名是什么?看起来像tnsnames.ora配置有错误,你发点详细信息上来看看 参考技术D 用的什么操作系统?

Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务

在连接数据库的时候,有时会遇到一个“ORA12514:监听程序当前无法识别连接描述符中请求的服务”的错误,这个错误其实就是数据库动态注册(关于动态注册会在稍后讲解)不生效,导致监听器无法识别客户端连接符中提供的服务名,从而拒绝建立数据库连接时报的错误信息,所以就需要对监听器配置做修改。

在这里,还需对问题进行细化,有时候可能会发现,在刚开启监听器的时候会发生这个错误,但过了一会再进行连接就不会报错,这其实是因为动态注册需要时间,而刚开启监听器时,数据库还未注册到监听器,导致报错,这种情况不在本文讨论范围内。

listener.ora文件存放在$ORACLE_HOME/network/admin(以我的Oracle11为例就是D:\\Oracle\\product\\11.2.0\\dbhome_1\\NETWORK\\ADMIN),这个文件存放的就是监听器的配置,监听器在启动时会读取该文件,我们先来了解一下这个文件。

该文件的大概配置如下图

上图中,SID_LIST_LISTENER参数就是数据库注册,动态注册或是静态注册(注册就是将数据库作为一个服务注册到监听器。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库,动态注册就是在监听器配置文件中不明确的声明数据库实例和服务名,而是在数据库启动时才由数据库自动注册到监听器,静态注册就是在监听器配置文件中明确声明数据库实例和服务名。),LISTENER参数就是监听器的配置,其中,PROTOCOL参数是协议名,一般为TCP,HOST参数是地址,可以写IP地址、服务器名、localhost、127.0.0.1,PORT参数是端口号,默认为1521。

既然是因为动态注册引起的问题,那么最简单的解决方法自然是由动态注册改为静态注册,如下图

红线框内的就是静态注册,SID_NAME参数是数据库实例名,GLOBAL_DBNAME参数是全局数据库名(在配置客户端的本地服务名时“服务名”要与全局数据库名一致),配置好后,重启监听器,就可正常连接了。

修改为静态注册看起来虽简单,但也有不足之处,首先,要修改为静态注册需对配置文件和参数较为熟悉,否则很有可能会配置错误,其次当参数的值有所改变时必须重新修改配置才行。

还有一种方法就是修改host参数的值,host参数可以有四种值:IP地址、服务器名、localhost、127.0.0.1,由于可取值变多了,导致了解决办法也随着导致出现问题的原因而多样化了起来,各种情况都可能有不同的解决办法,可以在这四个值之间尝试修改,需要注意的是,当采用localhost和127.0.0.1时,客户端的本地服务名不能使用IP地址和服务器名进行配置,否则会报“ORA12541:无监听程序”的错误,还有就是修改之后要重启监听器。

以上的解决办法只是我自己对这个错误的总结,可能尚无法解决所有的情况,欢迎进行讨论。

以上是关于ORA-12514:TNS:监听程序当前无法识别链接描述符中请求的服务的主要内容,如果未能解决你的问题,请参考以下文章

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决

ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务的解决方法

ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务解决办法