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

最近有项目使用了Oracle   g11进行操作,项目一开始部署运行正常,但是跑了几天就挂了,查看了原因是Oracle的监听服务没有启动。于是用工具连接了以下数据库,发现链接报错。错误具体如下:ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务。

于是根据了网上大多数人的方法,查看了自己的监听文件:

文件内容如下:

#listener.oraNetworkConfigurationFile: D:\app\Administrator\product\11.1.0\db_1\network\admin\listener.ora

# Generated by Oracle configuration tools.

 

 

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = CLRExtProc)

      (ORACLE_HOME =D:\app\Administrator\product\11.1.0\db_1)

      (PROGRAM = extproc)

      (ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.1.0\db_1\bin\oraclr11.dll")

    )

  )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = LLL))

      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))

    )

  )

 

 

修改以后文件如下

# listener.ora Network Configuration File: D:\app\Administrator\product\11.1.0\db_1\network\admin\listener.ora

# Generated by Oracle configuration tools.

 

 

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = CLRExtProc)

      (ORACLE_HOME =D:\app\Administrator\product\11.1.0\db_1)

      (PROGRAM = extproc)

      (ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.1.0\db_1\bin\oraclr11.dll")

    )

    (SID_DESC =

    (GLOBAL_DBNAME = ORCL)

    (ORACLE_HOME = D:\app\Administrator\product\11.1.0\db_1)

    (SID_NAME = ORCL)

    )

  )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))

    )

  )

 

 

修改以后,重启以下监听器就可以了。

 

一波未平,一波又起。隔天又有同事遇到相同问题,本以为按照同样的方法进行解决应该就可以。可是却修改了多次配置文件,却依旧不行。后来询问以下,才知道这货自己进行了环境变量的配置,所有导致我修改错了配置文件文件。。。

 

该环境变量就是:TNS_ADMIN

 

具体作用如下:很多oracle产品都有自己的TNS文件,如果你的系统里装了多个Oracle的产品的话,那么客户端连instance的时候,到底是使用那个tnsnames.ora呢?这个时候就需要看TNS_ADMIN这个参数了。——也就是所,如果你不配置这个参数的话,系统自动读取的是你安装目录下的listener.ora文件,就如我第一次遇到的配置文件是再这个路劲:D:\app\Administrator\product\11.1.0\db_1\network\admin\listener.ora

但是如果你一旦配置了这个参数的话,系统就会根据你这个配置的路径去读取该路径下的配置文件了,所以就导致我原来修改的那个文件就算我怎么修改也不起作用

 

下面补充以下这个文件的相关知识点:

  1. 什么是数据库的SID

SID

是一个数据库的唯一标识符!是建立一个数据库时系统自动赋予的一个初始ID,

SID主要用于在一些DBA操作以及与操作系统交互,从操作系统的角度访问实例名,必 须通过ORACLE_SID,且它在注册表中也是存在的.

2.listener.ora------listener监听器进程的配置文件,对于listener进程其作用是接受远程对数据库的接入申请并转交给oracle的服务器进程。所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接

LISTENER :监听名称,可以配置多个监听,多个监听的端口号要区分开来。

GLOBAL_DBNAME :全局数据库名。通过select * from global_name; 查询得出

ORACLE_HOME :oracle软件的跟目录

SID_NAME :服务器端(本机)的SID

PROTOCOL:监听协议,一般都使用TCP

HOST:本机IP地址,双机时候使用浮动IP

PORT:监听的端口号,使用netstat –an 检查该端口不被占用。

3.

Oracle Database Extensions for .NET uses CLRExtProc as the SID

即Oracle 的.net扩展使用CLRExtProc作为SID, Program=extproc 说明是 外部调用 例程

这个SID的监听使用了IPC。

4.对于配置文件,SID_LIST_LISTENER中的SID和LISTENER中的ADDRESS均一一搭配 。

 

好文章分享:https://blog.csdn.net/kaiwii/article/details/6825509

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值