无法连接到 Linux Mint 中的 Oracle 11g XE Apex Web 界面

Not able to connect to Oracle 11g XE Apex Web Interface in Linux Mint

我已经在我的 Linux Mint 17.3 系统上为 Linux x64 安装了 Oracle 数据库快捷版 11g 第 2 版。安装过程成功。我能够使用 sqlplus 连接到数据库、创建新用户、执行命令等。 在安装期间配置数据库时,我使用了默认端口,即 8080 和 1521。 但是我无法从我的系统连接到 APEX url 即 localhost:8080/apex/f?p=4950。在过去的几个小时里,我一直在寻找解决方案,但找不到任何地方。

lsnrctl 命令的输出如下:

LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 06-MAR-2016 10:11:05

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                06-MAR-2016 08:58:41
Uptime                    0 days 1 hr. 12 min. 24 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/iamharish15-HP-15-Notebook-PC/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=iamharish15-HP-15-Notebook-PC)(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

我没有修改任何 tnsnames.ora 或 listener.ora。这些文件的内容如下: listener.ora

# 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)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = iamharish15-HP-15-Notebook-PC)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

tnsnames.ora

# tnsnames.ora Network Configuration File:

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = iamharish15-HP-15-Notebook-PC)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

当我启动 SQL 命令行并使用连接到 XE 登录时,如下所示:

SQL> connect username/password@XE
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

但通常从终端,如果我使用 sqlplus username/password 连接,我连接成功。 我想我必须得到 XEXEXDB 服务到 运行,但到目前为止我还没能做到。在这方面的任何帮助都会非常有帮助。提前致谢。

经过几个小时 "googling" 和一些 "binging",我终于可以解决我的问题了。以下是我为解决问题所做的工作:

  1. alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=iamharish15-HP-15-Notebook-PC)(PORT=1521))' scope = both;

第 1 步解决了 XE 和 XEXDB 服务未显示的问题,之后当我 运行 lsnrctl status XE 和 XEXDB 服务都出现时,我可以使用命令行登录 SQL 工具与 username/password@XE 命令。但是 APEX 网络界面仍然不可用。

  1. 然后我更新了 tnsnames.ora 和 listener.ora 文件以包含 XEXDB 条目和带有 Presentation = HTTP 行的 DESCRIPTION 条目。

tnsnames.ora

# tnsnames.ora Network Configuration File:

XE =
  (DESCRIPTION =
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = iamharish15-HP-15-Notebook-PC)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

XEXDB =
  (DESCRIPTION =
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 8080))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XEXDB)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

listener.ora

# 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)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = iamharish15-HP-15-Notebook-PC)(PORT = 1521))
    )
    (DESCRIPTION = 
      (ADDRESS = (PROTOCOL = tcp)(HOST = 127.0.0.1)(PORT = 8080))(Presentation = HTTP)(Session = RAW)
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

之后,我使用以下命令重新加载了它们的值:

/etc/init.d/oracle-xe force-reload

这解决了问题,我可以连接到 APEX 网络界面并创建新的工作区、用户等。