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

  正常启动数据库后,用plsql dep连接出现“ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务”的错误。解决办法如下:

修改listener.ora (E:\app\ailen\product\11.1.0\db_1\NETWORK\ADMIN 下)

默认listener.ora

LISTENER =
(DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
)

修改为(直接加上后面一段)

LISTENER =
(DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
)

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

)

  上面是传为传抄的一种解决方案。

  黑体部分如果没有,加上就可以了。注意SID_NAME设置为实际SID名称,GLOBAL_DBNAME是注册的用于对外提供服务的服务名。

  其实仔细分析静态注册与动态注册的原来更容易解决问题。
  SID_LIST_LISTENER块中,前一段是用于动态注册,如果监听先于实例启动,会动态注册服务名,如果监听后启动,可以在sqlplus中使用alter system register命令实现注册。
  SID_LIST_LISTENER块中,后一段是用于静态注册。监听启动的时候,并不在意Oracle的服务是否合法,只管注册。实例与监听无启动顺序要求。


你可能感兴趣的:(ORA-12514)