VirtualBox NAT模式下主机SQL Developer连接虚拟机ORA数据库失败求助
排查VirtualBox NAT环境下Oracle 11G连接失败问题
我来帮你一步步排查这个Oracle连接问题,结合你受限于VirtualBox NAT网络的情况,咱们从几个核心关键点入手:
确认虚拟机内Oracle监听状态
先登录Ubuntu虚拟机,执行命令lsnrctl status,重点看这几个信息:- 监听是否处于
READY状态 - 监听的端口是不是1521
- 监听地址是否为
0.0.0.0或者虚拟机的内网IP(如果监听只绑定了127.0.0.1,主机转发的请求会被拒绝)
如果监听未启动,执行lsnrctl start启动;如果监听地址不对,修改$ORACLE_HOME/network/admin/listener.ora,把监听地址改成0.0.0.0。
- 监听是否处于
验证VirtualBox NAT转发规则有效性
先在Windows主机上用命令提示符测试端口连通性:telnet localhost 2223。如果能连通,说明转发规则没问题;如果不通:- 检查VirtualBox的NAT转发规则:确保协议是TCP,主机IP留空或填
127.0.0.1,主机端口2223,子系统IP填Ubuntu虚拟机的内网IP(用ip addr在虚拟机里查询),子系统端口1521 - 临时关闭Windows主机的防火墙,测试是否是防火墙拦截了2223端口
- 检查VirtualBox的NAT转发规则:确保协议是TCP,主机IP留空或填
检查tnsnames.ora配置准确性
不管是主机还是虚拟机的tnsnames配置,要对应主机的localhost和转发端口2223,示例配置如下:ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 2223)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )注意
SERVICE_NAME必须和Oracle实例的服务名一致,你可以在虚拟机里执行SQL查询确认:select service_name from v$service;排查Ubuntu虚拟机的网络拦截
- 检查iptables规则:执行
sudo iptables -L,如果有拒绝1521端口的规则,添加允许规则:sudo iptables -A INPUT -p tcp --dport 1521 -j ACCEPT,或者临时关闭iptables测试 - 检查
sqlnet.ora:如果里面有TCP.VALIDNODE_CHECKING=YES配置,需要把虚拟机内网IP或者NAT网关IP加入允许列表,或者直接注释掉该配置,避免Oracle拒绝外部连接请求
- 检查iptables规则:执行
用tnsping定位具体错误
在Windows主机上执行tnsping orcl(替换成你tnsnames里的别名),如果连接失败,返回的错误信息会明确指向问题根源(比如监听无响应、服务名不匹配等),根据错误信息再针对性解决。
内容的提问来源于stack exchange,提问作者Jawor
相关产品推荐
相关产品推荐

