在 Linux VM 中安装 Oracle DB

在 Linux VM 中安装 Oracle DB

我正在尝试在虚拟机中设置 Oracle 数据库服务器(目前仅用于测试目的)。

我正在使用的设置:

  • 虚拟盒
  • NAT模式的网络适配器(重定向端口22->22、80->80、1521->1521、8080->8080)
    • 如果可能的话,我宁愿避免使用桥接网络
    • 如果数据库可以被外界访问,而不仅仅是主机操作系统,那就太好了
  • CentOS 6.4 64 位
  • Oracle XE,版本 11.2.0.2.0“生产”,使用默认端口(1521 和 8080)安装和配置
  • 客户操作系统和主机操作系统中的防火墙均已禁用
  • 主机操作系统位于代理之后

问题

我无法从主机访问数据库(通过端口 1521,使用 sqlplus 或 SQL developer)。但我可以从虚拟机本身访问它(使用 sqlplus)。

我还可以通过 SSH 从主机进入虚拟机,并且可以通过以下方式从主机访问 Web 界面:

http://127.0.0.1:8080/apex

因此,VirtualBox 的 NAT 设置似乎在某种程度上起作用。

当我执行时,监听器似乎已经启动lsnctrl 状态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 = localhost.localdomain)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

当我尝试从主机连接时,出现以下错误(在 CentOS 中执行时相同的命令有效):

PS C:\Users\winuser> sqlplus system/[email protected]

SQL*Plus: Release 11.2.0.3.0 Production on Fr Jul 12 16:56:25 2013

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

ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified

端口 1521 似乎在虚拟机中也处于活动状态,并且在 VirtualBox 中正确设置了端口转发:

[root@localhost admin]# nmap 127.0.0.1

Starting Nmap 5.51 ( http://nmap.org ) at 2013-07-12 17:02 CEST
Nmap scan report for localhost.localdomain (127.0.0.1)
Host is up (0.0000050s latency).
Not shown: 994 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
111/tcp  open  rpcbind
631/tcp  open  ipp
1521/tcp open  oracle
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds

感谢您的任何提示或建议。

答案1

您无法仅使用 IP 地址连接到数据库。

跑步

lsnrctl status

在客户机上找出服务名称和实例名称(例如 ORCL)。然后在主机上编辑 tnsnames.ora,如下所示:

ORCL=
(DESCRIPTION=
 (ADDRESS=
   (PROTOCOL=TCP)
   (HOST=127.0.0.1)
   (PORT=1521)
 )
 (CONNECT_DATA=
   (SERVER=dedicated)
   (SERVICE_NAME=your_service_name_here)
 )
)

然后尝试 TNSPING 一下:

tnsping ORCL

它应该会说类似“Ok(20 毫秒)”的内容。最后运行 sqlplus:

sqlplus user/password@ORCL

有关详细信息,请阅读 Oracle 文档: http://www.oracle.com/pls/db112/portal.portal_db?selected=4&frame=#network_management

答案2

这听起来像是您的 Oracle 网络配置有问题。请使用网络管理器或手动编辑 $ORACLE_HOME/network/admin 中的 sqlnet.ora 和 tnsnames.ora。

相关内容