我试图从 OSX 上的 VMWare Fusion 托管的 Windows XP VM 中连接到 Oracle 10g 服务器(LAN 上的远程主机)。虽然我可以使用 Oracle Net Manager 连接到该服务,但无法使用 SQL Plus 进行连接。
我错过了什么?
我目前正在使用NAT模式。
答案1
假设您的数据库位于主机名为“dbhost”的节点上
首先,你能 ping 通 dbhost 吗?如果不能,那么问题出在网络而不是 Oracle 上。
如果可以,您能否远程登录到该主机上的端口 1521。如果不行,则可能是防火墙类型问题,或者远程节点上没有运行 Oracle 侦听器(或者端口不同)。
假设它正在运行,您需要从 DBA 那里获得 SID 或 SERVICE_NAME。它们通常是相同的,如果是 *nix 系统,执行“ ps -ef | grep smon
”将显示正在运行的实例的 SID。免费的 Express Edition 数据库通常具有 XE 的 SID
如果 1521 正在接收流量,请尝试
sqlplus user/pass@dbhost:1521/XE
将 XE 替换为您的 SID。
=== ...
在数据库服务器端,监听器应该监听端口 1521。sqlnet 中有一些设置(我认为是 tcp_invited_nodes)可以充当防火墙,告诉监听器只接受来自白名单 IP 地址的连接(或排除来自黑名单 IP 的连接)。
如果侦听器接受连接,它会尝试查找连接请求的 SID 或 SERVICE。如果不存在这样的服务,它会返回错误。
如果服务确实存在,侦听器将尝试将连接传递到数据库,并返回不同的端口,连接将通过该端口与数据库进行实际通信(即端口 1521 仅在初始连接期间使用)。[共享服务器连接有例外,但并不常见。]
数据库可能处于不接受连接的模式(RESTRICTED 模式或处于 STARTUP 或 SHUTDOWN 过程中)。数据库还会执行身份验证(例如检查用户名和密码)。
我猜要么是侦听器根据某些设置拒绝连接,要么(更可能)是它无法通过 NAT 传递新的网络连接。尝试使用OSX 即时客户端从主机查看是否能通过。即时客户端基本上就是解压并运行,因此安装不大,也不需要管理员权限或任何东西。
如果主机可以工作而虚拟机不工作,则尝试使用 Bridged 而不是 NAT。这意味着虚拟机客户机拥有自己的 IP 地址,并且在网络上看起来像一个独立的设备,而不是像在 NAT 中那样隐藏在虚拟机主机后面。
PS. 创建了一个社区 wiki,以便其他人可以做出贡献