虚拟机中访问主机上的Oracle数据库

背景

主机上有Oracle数据库,在虚拟机中的Ubuntu上部署项目,发现虚拟机、主机能互相ping通但是Oracle数据库却连接不上。
Windows查ip:ipconfig
Ubuntu查ip:ifconfig
笔记本连的WiFi
虚拟机中访问主机上的Oracle数据库
虚拟机ip:
虚拟机中访问主机上的Oracle数据库

一、问题排查

1.在虚拟机中ping主机:能ping通
虚拟机中访问主机上的Oracle数据库
主机ping虚拟机同样没问题。
虚拟机中访问主机上的Oracle数据库
2.端口再看一下端口,主机上Oracle数据库的监听端口是1521,这也是Oracle数据库默认的端口,如果你安装Oracle数据库时没有进行自己的设置,那么你的监听端口也应该是1521,在虚拟机中telnet一下主机的这个端口看看是否能访问到:
虚拟机中访问主机上的Oracle数据库
查看Windows运行的端口:
虚拟机中访问主机上的Oracle数据库
看了下主机的防火墙已经关掉,并且telnet 135端口是成功的,说明是oracle的监听程序的问题。

二、修改Oracle数据库监听服务配置

1.配置文件的位置
要先找到Oracle数据库的监听服务的配置文件的位置,无论是哪个Oracle数据库版本,配置文件都叫:listener.ora 。接下来就找到它,我的版本是Oracle 19c。
这是配置文件的路径:
虚拟机中访问主机上的Oracle数据库
2.修改配置文件打开配置文件,里面应该有两大段,下面的LISTENER部分就是配置监听的部分,将原本的(HOST = localhost)改为(HOST = 0.0.0.0)即可。
虚拟机中访问主机上的Oracle数据库

三、重启服务

1.修改完监听配置文件之后需要重启Oracle服务和监听
开始–运行–services.msc
2.找到服务:OracleOraDb19_home1TNSListener 与 OracleServiceMYORCL(我的Oracle服务名字,根据自己选择)
虚拟机中访问主机上的Oracle数据库
3.把两个服务启动即可
右键->重新启动

四、测试

虚拟机中访问主机上的Oracle数据库
成功,之后在这上面的项目可以访问主机的Oracle数据库
虚拟机中访问主机上的Oracle数据库
这和虚拟机上的ubuntu并没有关系,而是和本机上的Oracle数据库的监听配置有关系,即使虚拟机上是其他操作系统,采用本教程的方法也可解决此问题。