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

摘要:
连接到数据库时,有时会遇到错误“ORA12514:侦听器当前无法识别连接描述符中请求的服务”。此错误实际上是数据库动态注册未生效,这导致侦听器无法识别客户端连接器中提供的服务名称,从而拒绝在数据库连接中建立错误消息。因此,您需要修改侦听器配置。

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

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

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

该文件的大概配置如下图

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

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

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

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

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

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

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

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

免责声明:文章转载自《Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux安装loadrunner负载机【转】ASP.NET CORE3.0 API Swagger+IdentityServer4授权验证下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

分库分表的几种常见玩法及如何解决跨库查询等问题

分库分表的几种常见玩法及如何解决跨库查询等问题 在谈论数据库架构和数据库优化的时候,我们经常会听到“分库分表”、“分片”、“Sharding”…这样的关键词。让人感到高兴的是,这些朋友所服务的公司业务量正在(或者即将面临)高速增长,技术方面也面临着一些挑战。让人感到担忧的是,他们系统真的就需要“分库分表”了吗?“分库分表”有那么容易实践吗?为此,笔者整理...

SQL Server2012如何导出sql脚本并且还原数据库

上次介绍过如何通过bak文件来还原数据库文件,今天来介绍一下如何通过导出sql脚本的方式来备份并且还原新的数据库,不过这种方式比较适合数据库数据不太多的中小型数据表,下面通过SQL Server2012为例来进行说明。 一 备份数据库 1 选择某一个数据库,右键依次选择:任务==》生成脚本; 2 选择要编写脚本的数据库对象,注意此处可以选择特定的数据库对象...

Python3 连接各类数据库

Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。Python 数据库接口支持非常多的数据库,MySQL 、 PostgreSQL、Microsoft SQL Se...

DDD:策略模式如何结合动态表达式

企业应用中我们经常会遇到各种业务规则,针对这种规则,我们多数情况会采用策略模式,每种策略对应一个具体类和一个具体的配置界面。但是企业业务的规则经常变化,现有的策略随着时间的推移而不能满足要求,针对这种情况我们可以用动态表达式来解决。 动态表达式:在静态语言中动态的执行代码,目前可选的技术有:动态编译、Iron、Roslyn、内嵌小语言。 今天来测试一下内嵌...

SQLSERVER如何查看索引缺失

当大家发现数据库查询性能很慢的时候,大家都会想到加索引来优化数据库查询性能, 但是面对一个复杂的SQL语句,找到一个优化的索引组合对人脑来讲,真的不是一件很简单的事。 好在SQLSERVER提供了两种“自动”功能,给你建议,该怎么调整索引 第一种是使用DMV 第二种是使用DTA (database engine tuning advisor) 数据库引擎优...

HP11.31安装11.2.0.3实施手册

1 前言 此文档详细描述了Oracle 11gR2 数据库在HP11.31上的安装RAC的检查及安装步骤。文档中#表示root用户执行,$表示grid或oracle用户执行。 2 系统环境 操作系统环境 说明项 节点1 节点2 硬件型号 ia64 hp Integrity BL860c i2 ia64 hp Integrity BL860c i2...