【问题标题】:ORA-12505 for Oracle XE 11g on UbuntuUbuntu 上 Oracle XE 11g 的 ORA-12505
【发布时间】:2013-11-29 19:46:02
【问题描述】:

我在连接到本地 Oracle 数据库时遇到了一些问题。

我已根据本指南完成安装:installing-oracle-11g-r2-express

教程运行良好,但安装后我无法使用 SQLDeveloper 或 'sqlplus system/password@XE' 连接到数据库

sqlplus system/password@XE
SQL*Plus: Release 11.2.0.2.0 Production on Sat Nov 16 11:57:06 2013
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

在不使用 XE 的情况下进行连接工作:

:~$ sqlplus sys as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Sat Nov 16 11:54:54 2013
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Enter password: 
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> 

当我尝试使用 SQLDeveloper 进行连接时,出现以下错误:

ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

我错过了什么?


@Mihai 要求的listener.ora: 更改于 20.11.2012 12:06

# listener.ora Network Configuration File:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)
      (PROGRAM = extproc)
    )
     (SID_DESC =
       (SID_NAME = XE)
       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)
     )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = <name_of_my_computer>)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

@BjarteBrandt 要求的$ lsnrctl 状态:

$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 18-NOV-2013 12:52:26

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.2.0 - Production
Start Date                18-NOV-2013 12:48:06
Uptime                    0 days 0 hr. 4 min. 20 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Default Service           XE
Listener Parameter File   /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/<name_of_my_computer>/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<name_of_my_computer>)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

【问题讨论】:

  • 如上以sys连接,不使用XE,输入ALTER SYSTEM REGISTER然后退出SQL*Plus会有帮助吗?
  • @LukeWoodward 我尝试了 alter system register 命令,但没有帮助

标签: sql database oracle oracle11g


【解决方案1】:

拳头,请确保 XE 数据库确实注册到监听器。

我的听众的输出:

$ lsnrctl 状态

Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "XE" has 1 instance(s).
  Instance "XE", status READY, has 1 handler(s) for this service...
Service "XEXDB" has 1 instance(s).
  Instance "XE", status READY, has 1 handler(s) for this service...
The command completed successfully

如果您的列表中没有服务,请退回监听器

$ lsnrctl stop
$ lsnrctl start

以 sys 用户身份通过​​ IPC 登录数据库。 (不联系听众)

$ sqlplus / as sysdba
SQL>-- tell the listener to pick up this particular database service.
SQL>alter system register;

如果您的数据库服务仍未列出,请为您的 listener.ora 文件配置 STATIC 服务。

Static service

【讨论】:

  • 我更新了我的原始帖子,不确定我应该从状态中读取什么。 lsnrctl 停止失败,说我没有被授权。以 root 身份运行没有帮助。
  • 您的状态表明没有向侦听器注册名为“XE”的服务。请向 SID_LIST 添加静态条目。
  • 那行不通。但我不确定我是否正确更改了它。我已经用我尝试过的内容编辑了我的原始帖子。请看一下。
  • 做了更多的实验——它成功了!非常感谢您的帮助。我不太确定我对 tnsnames.ora 所做的是否是一个好主意,但您的提示成功了。尽管它现在可以工作,你能快速看一下文件吗:)?更新了我的操作
  • 不要将 tnsnames.ora(查找 TNS-ALIAS)与 listener.ora(侦听器配置文件)混淆。您的 listener.ora 看起来不错。我仍然不确定为什么我们必须进行静态条目。从 10g 开始,数据库应该是动态注册的。在我的 Fedora 盒子上,我没有这个问题。我很高兴它终于奏效了!
【解决方案2】:

查看您的 Oracle 主页中的 tnsnames.ora。您应该有这样的内容:

XE=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =somehost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = XE)
    )
  )

编辑

在 SQLDeveloper 中,该错误表示您正在尝试连接 SID,请将其更改为 service_name。

或者,在 tsanames 中将 SERVICE_NAME = XE 更改为 SID = XE

【讨论】:

  • @Vegard 编辑了我的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 2012-01-10
  • 2015-03-02
  • 2017-09-01
  • 2013-10-23
  • 1970-01-01
  • 2016-04-26
相关资源
最近更新 更多