监听器不支持任何服务

时间:2014-07-21 04:41:53

标签: oracle oracle11g

我在Linux机器上安装了Oracle Database 11gR2以及Oracle Grid Infrastructure,然后创建了orcl数据库。

我一直能够使用SQL * Plus或OEM连接到我的数据库。但是最近,我在输入命令lsnrctl status时遇到了问题,因此我无法连接到数据库。

我的listener.ora文件:

# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/grid/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = pc.company.com)(PORT = 1521))
    )
  )
ADR_BASE_LISTENER = /u01/app/oracle

我的tnsnames.ora文件:

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

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = pc.company.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl.example.com)
    )
  )

输入lsnrctl status时,我会收到以下信息:

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 21-JUL-2014 03:35:48

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

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                21-JUL-2014 03:25:58
Uptime                    0 days 0 hr. 9 min. 50 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/app/oracle/diag/tnslsnr/pc151/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=pc.company.com)(PORT=1521)))
The listener supports no services
The command completed successfully

在输入sqlplus / as sysdba然后startup时,我明白了:

ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '+DATA/orcl/spfileorcl.ora'
ORA-17503: ksfdopn:2 Failed to open file +DATA/orcl/spfileorcl.ora
ORA-29701: unable to connect to Cluster Synchronization Service

srvctl start database命令也无法启动数据库。

我的oratab文件如下:

#Backup file is  /u01/app/oracle/product/11.2.0/dbhome_1/srvm/admin/oratab.bak.pc150 line added by Agent
#

# This file is used by ORACLE utilities.  It is created by root.sh
# and updated by the Database Configuration Assistant when creating
# a database.

# A colon, ':', is used as the field terminator.  A new line terminates
# the entry.  Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
#
# The first and second fields are the system identifier and home
# directory of the database respectively.  The third filed indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
+ASM:/u01/app/oracle/product/11.2.0/grid:N
orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N          # line added by Agent

5 个答案:

答案 0 :(得分:16)

数据库在启动时向侦听器注册其服务名称。如果它无法这样做,那么它会定期再次尝试 - 所以如果监听器在数据库之后启动,那么在识别服务之前可能会有一段延迟。

如果数据库没有运行,则没有任何内容会注册该服务,因此您不应期望听众了解它 - lsnrctl statuslsnrctl services赢了&# 39; t报告尚未注册的服务。

您可以在没有监听器的情况下启动数据库;从Oracle帐户开始,您可以使用ORACLE_HOMEORACLE_SIDPATH设置:

sqlplus /nolog

然后从SQL * Plus提示符:

connect / as sysdba
startup

或者通过网格基础架构,从网格帐户中使用srvctl start database command

srvctl start database -d db_unique_name [-o start_options] [-n node_name]

您可能希望查看数据库是否设置为oratab文件中的自动启动,具体取决于您使用的是否应该自动启动。如果您期望它正在运行而且它不是,或者您尝试启动它并且它不会出现,那么这是一个完全不同的场景 - 您是需要查看错误消息,警报日志,可能跟踪文件等,以确切了解它为什么不能启动,如果您无法弄清楚,可能会询问数据库管理员而不是堆栈溢出


如果数据库看不到+DATA,那么ASM可能没有运行;你可以see how to start that here;或使用srvctl start asm。正如文档所述,请确保从网格主页而不是数据库主页执行此操作。

答案 1 :(得分:0)

您需要重新配置tnsnames.ora,以便它可以指向您的主机名 之后,监听器将能够选择新的主机名。之后检查监听器lsnrctl状态的状态并启动监听器lsnrctl start 然后注册你的听众。改变系统寄存器

答案 2 :(得分:0)

检查spfile或pfile中的local_listener定义。在我的情况下,问题出在pfile上,我已经从类似的环境中移动了pfile,它将LISTENER_sid视为LISTENER而不仅仅是LISTENER。

答案 3 :(得分:0)

您需要在listener.ora文件中添加ORACLE_HOME定义。目前,它尚未在任何ORACLE_HOME中注册。

样本listener.ora

abc =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = abc.kma.com)(PORT = 1521))
    )
  )

SID_LIST_abc =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME= /abc/DbTier/11.2.0)
      (SID_NAME = abc)
    )
  )

答案 4 :(得分:0)

对于不支持监听器的服务,您可以使用以下命令在spfile中使用监听器端口和服务器ip地址设置local_listener参数

更改系统设置local_listener ='(DESCRIPTION = {ADDRESS = {PROTOCOL = tcp)(HOST = 192.168.1.101)(PORT = 1520)))'sid ='testdb'scope = spfile;