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

1、TNS连接错误

同事跟我说连接oracle数据库报错ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务,如下所示:

 

 

 

2、查看本地TNSPING

查看本地的tns配置:

WXX =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

)

 

 

 

查看本地的tnsping是ok的

C:\Users\Administrator>tnsping WXX

 

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 26-10月-2016 11:31:04

 

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

 

已使用的参数文件:

D:\app\Administrator\product\11.2.0\client_2\network\admin\sqlnet.ora

 

 

已使用 TNSNAMES 适配器来解析别名

尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.121.58)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))

OK (30 毫秒)

 

C:\Users\Administrator>

 

 

本地的tnsping暂时看来是正常的,是ok的。

 

 

 

3、查看网络连接

telnet  192.168.121.58 1521,也是能进去的,证明网络ok

 

oracle服务器的iptables也是关闭的

 

 

文章来源地址:http://blog.csdn.net/mchdba/article/details/52949382 ,博主mchdba(黄杉)谢绝转载。

4、查看服务器的lsnrctl服务

 

去服务器看lsnrctl状态:

[oracle@iZ23vluqpmmZ admin]$ lsnrctl status

 

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26-OCT-2016 11:33:32

 

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

 

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                26-OCT-2016 11:09:33

Uptime                    0 days 0 hr. 23 min. 59 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /usr/oracle/app/product/11.2.0/dbhome_1/network/admin/listener.ora

Listener Log File         /usr/oracle/app/diag/tnslsnr/iZ23vluqpmmZ/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.121.58)(PORT=1521)))

The listener supports no services

The command completed successfully

[oracle@iZ23vluqpmmZ admin]$

 

看到no services,也就是说lsnrctl监听服务启动起来,没有任何oracle实例的,所以问题就来了,没有oracle实例,客户端通过lsnrctl监听的话,就连接不到实例信息。所以这里我们需要添加实例信息,添加实例信息,就在listener.ora配置文件里面。

 

 

 

5、在listener.ora里面添加实例信息

完善listener.ora配置:

[oracle@iZ23vluqpmmZ admin]$ cp listener.ora z_listener.ora.bak

[oracle@iZ23vluqpmmZ admin]$ vim listener.ora

[oracle@iZ23vluqpmmZ admin]$

[oracle@iZ23vluqpmmZ admin]$ more listener.ora

# listener.ora Network Configuration File: /usr/oracle/app/product/11.2.0/dbhome_1/network/admin/listener.ora

# Generated by Oracle configuration tools.

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

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

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

    )

  ) # 下面就是添加的新实例信息

SID_LIST_LISTENER = 

(SID_LIST = 

  (SID_DESC = 

  (GLOBAL_DBNAME = orcl)

  (SID_NAME = orcl)

  )

)

 

ADR_BASE_LISTENER = /usr/oracle/app

 

[oracle@iZ23vluqpmmZ admin]$

 

 

设置完后,重启监听lsnrctl服务,可以看到会有一个instance服务启动起来了:

[oracle@iZ23vluqpmmZ admin]$ lsnrctl stop

 

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26-OCT-2016 11:38:29

 

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

 

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))

The command completed successfully

[oracle@iZ23vluqpmmZ admin]$ lsnrctl start

 

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26-OCT-2016 11:38:33

 

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

 

Starting /usr/oracle/app/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...

 

TNSLSNR for Linux: Version 11.2.0.1.0 - Production

System parameter file is /usr/oracle/app/product/11.2.0/dbhome_1/network/admin/listener.ora

Log messages written to /usr/oracle/app/diag/tnslsnr/iZ23vluqpmmZ/listener/alert/log.xml

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.75.58)(PORT=1521)))

 

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                26-OCT-2016 11:38:33

Uptime                    0 days 0 hr. 1 min. 3 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /usr/oracle/app/product/11.2.0/dbhome_1/network/admin/listener.ora

Listener Log File         /usr/oracle/app/diag/tnslsnr/iZ23vluqpmmZ/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.75.58)(PORT=1521)))

Services Summary...

Service "orcl" has 1 instance(s).

  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully

[oracle@iZ23vluqpmmZ admin]$

 

 

OK,在问下同事,同事说能连接上了,问题解决。

### 解决 Oracle 19c 中 ORA-12514 错误的方法 当遇到 `ORA-12514` 错误时,通常意味着 TNS 监听器未能找到与连接描述符匹配的服务名称。这可能是由于配置文件中的设置不正确或监听器未正确注册服务。 #### 检查并修改 `listener.ora` 确保 `listener.ora` 文件中定义了正确的监听地址和服务名称。此文件位于 Oracle 安装目录下网络配置文件夹中。对于某些工具如 Navicat,可能会读取解压目录而非安装目录下的 `listener.ora`[^2]: ```plaintext LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name_or_ip)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orclpdb) (ORACLE_HOME = /path/to/oracle_home) (SID_NAME = orcl) ) ) ``` #### 修改 `tnsnames.ora` 同样重要的是确认 `tnsnames.ora` 的内容指向有效的数据库实例和服务名。该文件也应放置于相同的路径下,并且应当包含如下条目来指定目标数据库的连接字符串[^4]: ```plaintext ORCLPDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name_or_ip)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orclpdb.your_domain.com) ) ) ``` #### 验证服务状态并重启监听器 完成上述更改后,验证监听器的状态以及它是否已成功加载新的配置。如果必要的话,在 Windows 上可以通过任务管理器内的服务选项卡停止再启动名为 `Oracle<sid>_Listener` 的进程;而在 Linux/Unix 平台上则通过命令行执行相应操作[^3]。 #### 使用 PL/SQL 开发者或其他客户端测试连接 最后一步是在应用程序或者像 PL/SQL Developer 这样的专用 IDE 中尝试建立到数据库的新会话,以检验问题是否得到解决[^1]。 ```python import cx_Oracle connection = None try: connection = cx_Oracle.connect( user="your_username", password="your_password", dsn="localhost:1521/ORCLPDB" ) except Exception as e: print(e) if connection is not None: cursor = connection.cursor() cursor.execute('SELECT * FROM dual') result = cursor.fetchone() print(result) cursor.close() connection.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值