ORA-12514: TNS:listener does not currently know of service requested in connect

博客围绕数据库登录报错展开,先查看lsnrctl状态,发现监听正常但不识别service_name,查看参数发现db_name等不一致。在listener.ora文件添加配置并重启服务,解决部分错误。再次登录仍报错,通过修改服务端和客户端配置文件,最终验证登录成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,登录报错如下:

[oracle@oracle_yueworld admin]$ rlwrap sqlplus system/system51@st1

SQL*Plus: Release 11.2.0.1.0 Production on Thu Dec 3 16:33:26 2015

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

ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

2,查看下lsnrctl状态,看是否是lsnrctl监听的问题

[oracle@oracle_yueworld admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 03-DEC-2015 17:03:07

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.121.51)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                03-DEC-2015 17:02:55
Uptime                    0 days 0 hr. 0 min. 11 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /oracle/app/oracle/diag/tnslsnr/oracle_yueworld/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.121.51)(PORT=1521)))
The listener supports no services
The command completed successfully
[oracle@oracle_yueworld admin]$ 
[oracle@oracle_yueworld admin]$ 

从中可以看出监听正常,但是The listener supports no services这个貌似是不识别service_name啊

原blog地址:http://blog.csdn.net/mchdba/article/details/50166153
,未经过运行,不得转载


3,去查看下参数

SQL> show parameter name;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert		     string	 /oracle/app/oracle/oradata/pow
						 erdes, /oracle/app/oracle/orad
						 ata/orcl
db_name 			     string	 orcl
db_unique_name			     string	 stunq
global_names			     boolean	 FALSE
instance_name			     string	 orcl
lock_name_space 		     string
log_file_name_convert		     string
service_names			     string	 stunq
SQL> 

看到db_name和db_unique_name以及service_names不一样


4,解决方案

在listener.ora文件里面添加SID_LIST_LISTENER,如下所示:


[oracle@oracle_yueworld admin]$ more listener.ora 
# listener.ora Network Configuration File: /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = stunq)
      (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = stunq)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.121.51)(PORT = 1521))
  )

ADR_BASE_LISTENER = /oracle/app/oracle

[oracle@oracle_yueworld admin]$ 

再重启lsnrctl服务:

[oracle@oracle_yueworld admin]$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 03-DEC-2015 18:00:09

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

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

TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /oracle/app/oracle/diag/tnslsnr/oracle_yueworld/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.121.51)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.121.51)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                03-DEC-2015 18:00:09
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /oracle/app/oracle/diag/tnslsnr/oracle_yueworld/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.121.51)(PORT=1521)))
Services Summary...
Service "stunq" has 1 instance(s).
  Instance "stunq", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@oracle_yueworld admin]$ 

看到The listener supports no services错误已经没有了,可以去试试登录


5,再次登录报错

[oracle@oracle_yueworld admin]$ rlwrap sqlplus  orclk/st141118@st1

SQL*Plus: Release 11.2.0.1.0 Production on Thu Dec 3 18:03:55 2015

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

ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0


Enter user-name: 

6,去修改服务端和客户端的配置文件

google了很多资料,大部分都说是listener.ora配置错误导致listener找不到你要请求的sid。这有两种可能,一种是client端的tnsnames.ora中配置了错误的SID,一种是server端的listener.ora中配置错了SID。仔细检查,然后开始修改服务器listener.ora listener.ora,将SID_NAME修改成正确的instance_name为orcl

[oracle@oracle_yueworld admin]$ more listener.ora 
# listener.ora Network Configuration File: /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = stunq)
      (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = orcl)
    )
  )
  #PS: 这里面的SID_NAME是oracle实例名,GLOBAL_DBNAME是全局的dbname,是db_unique_name
 
LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.121.51)(PORT = 1521))
  )

ADR_BASE_LISTENER = /oracle/app/oracle

[oracle@oracle_yueworld admin]$ 

修改客户端tnsnames.ora

[oracle@oracle_yueworld admin]$ vim tnsnames.ora 

# tnsnames.ora Network Configuration File: /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

st1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.121.51)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = stunq)
    )
  )
  # PS:这里的service_name就是可以从执行 show parameter name;中显示的service_names参数值。

7,然后验证登录,成功了,如下所示:

[oracle@oracle_yueworld admin]$ 
[oracle@oracle_yueworld admin]$  rlwrap sqlplus orclk/st141118@st1

SQL*Plus: Release 11.2.0.1.0 Production on Thu Dec 3 19:43:10 2015

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


Connected to:
Oracle Database 11g Release 11.2.0.1.0 - 64bit Production

SQL> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值