Oracle远程无法startup,提示"ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 "的解决方法

因为在数据库startup之前,数据库已经关闭,此时如果Listener采用动态注册的方式,则此时listener中已经没有对数据库实例的信息,对比shutdown前和shutdown之后的lsnrctl status信息就可以知道。

shutdown之前:

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 08-9月 -2009 13:5
4:58

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

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期                  08-9月 -2009 13:07:40
正常运行时间              0 天 0 小时 47 分 22 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          C:/oracle/product/10.2.0/db_1/network/admin/listener.o
ra
监听程序日志文件          C:/oracle/product/10.2.0/db_1/network/log/listener.log

监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=//./pipe/EXTPROC1ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dracy-bfc46425a)(PORT=1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl_XPT" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功

 

shutdown之后:

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 08-9月 -2009 15:1
7:09

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

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期                  08-9月 -2009 13:07:40
正常运行时间              0 天 2 小时 9 分 33 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          C:/oracle/product/10.2.0/db_1/network/admin/listener.o
ra
监听程序日志文件          C:/oracle/product/10.2.0/db_1/network/log/listener.log

监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=//./pipe/EXTPROC1ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dracy-bfc46425a)(PORT=1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功

 

所 以如果此时在远程客户端执行startup操作,则listener找不到监听的实例,报ORA-12514错误,解决的方法就是采用静态注册的方法,直 接编辑服务器端ORACLE_HOME/db_1/NETWORK/ADMIN下的listener.ora文件,将以下部分:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
  )

 

替换为:

 SID_LIST_LISTENER =
   (SID_LIST =
     (SID_DESC =
       (SID_NAME = PLSExtProc)
       (ORACLE_HOME = D:/oracle/product/10.2.0/db_1)
       (PROGRAM = extproc)
     )
     (SID_DESC =
       (GLOBAL_DBNAME = ORACLE)
       (ORACLE_HOME = D:/oracle/product/10.2.0/db_1)  
       (SID_NAME = ORACLE)
      )

   )

红色部分为新加内容。。

 

然后重启listener:lsnrctl reload..就可以了。

 

;