解决连接Oracle数据库报错TNS:监听程序当前无法识别连接描述符中请求的服务。

连接Oracle数据库时候报错TNS:监听程序当前无法识别连接描述符中请求的服务。

image.png

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


解决方法:修改listener.ora文件

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

image.png

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

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

image.png

    (SID_DESC =
      (SID_NAME = ORCL)
      (ORACLE_HOME = D:\Oracle\product\11.2.0\dbhome_1)
      (GLOBAL_DBNAME = ORCL)
    )

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


image.png


转载请说明出处:原文链接 http://www.nbsite.cn/database/142

相关阅读:

nacicat premium 链接oracle报错connection to server failed,probable Oracle Net admin err

SQL Server日志文件过大 大日志文件清理方法 不分离数据库

服务器迁移-IIS站点怎么快速批量迁移(备份和恢复网站)

服务器禁止运行CMD命令来提升安全