先展示一下最终效果

写在开始:

本教程所需硬件及软件:

  1. mac silicon机型(mac intel机型也可以参考使用)
  2. VMware Workstation Pro或者Parallels Desktop虚拟机软件
  3. Windows 10/11 arm64 安装镜像。
  4. navicat或者其他数据库访问软件(非必需)

本次使用硬件及软件:

  1. MacBook Pro M1Pro 14‘
  2. macOS 14.0 Sonoma
  3. Parallels Desktop 19
  4. Windows 11 pro 22H2 arm64
  5. Oracle 11g 桌面级数据库
  6. navicat 16

教程正文

  1. 打开正常安装的Windows虚拟机 parallels也好 vmware也好(这个安装过程建议百度)
    (这里我用parallels desktop + Windows 11 Pro 作为例子)

2.按照正常流程安装好Oracle 11g


3. 网络模式选择与主机共享网络

4. 然后记下实体机ip计作ip1 虚拟机ip计作ip2(以下ip1,ip2请根据实际情况设置)

IP1: 10.211.55.2

IP2: 10.211.55.4

注:作为一台现代电脑,可能会有多个网络,会有多个ip地址,记得选择和虚拟机一致的ip,因为这是虚拟机和实体机共有的网络。
具体查找办法:
虚拟机:pd的同学直接按照上面第三步那样即可查看,vm的同学就在虚拟机里搜索里输入cmd,唤出Windows命令提示符之后输入ipconfig并回车即可查看虚拟机所在ip地址。

实体机:mac下按住command + space(空格)唤出搜索 输入 terminal 启动终端,
​ 输入 ifconfig 回车 在返回结果里寻找和上面截图基本一致的那个

5. 虚拟机下关闭防火墙,三个模式(域配置文件,专用配置文件,公用配置文件)的防火墙都要关掉

1)搜索里输入防火墙,选择并打开圈中项

2)点击查看其属性

3) 将下面几个模式的防火墙全部完全关闭



6. 然后服务里将Oracle开头倒数第一个正在运行的listener服务重启

7. 在Windows里ping ip1 在mac里 ping ip2 通的话去往下一步

8. 在Mac实体机里打开navicat
9. 新建oracle 连接 主机填ip2。服务名填ORCL或者orcl(当然具体看你自己 不确定的可以在Windows虚拟机中sqlplus下使用select global_name from global_name; 来查找)角色无论默认或者sysdba 密码都是你设置好的那个。



10. 如果navicat报一个ORA-12514:TNS:listener does not currently know of service requested in connect descriptor错误的话 , 将你的虚拟机重启一下 即可。如果重启后还是报这个错误,检查您的连接服务名是否填写正确。
11. 至此教程结束
12. 当然有些小伙伴可能会问说如果我想用终端直接访问SQLPLUS怎么办呢?
这个可以参考以下步骤:
1)在Windows 可选功能里搜索OPEN SSH,安装Open SSH 服务器

2)在Windows里设置openssh服务端默认启动
以管理员身份打开PowerShell,然后运行以下命令来启动 sshd service

 ```bash启动sshd服务Start-Service sshd将sshd服务设置为自动启动,若不设置需要在每次重启后重新开启sshdSet-Service -Name sshd -StartupType 'Automatic'```


3) 之后我们在mac 终端里输入 ssh ”虚拟机用户名“@“虚拟机ip地址

这里有一个问题就是默认需要使用有密码账户登录,而我虚拟机里未设置密码,
让我们返回虚拟机,给我们的账户创建一个密码(建议使用和数据库相同密码,单纯好记)
4)再次尝试从本地登录虚拟机


登录成功
输入sqlplus,进入SQLPLUS 界面,测试数据库访问,完成。

5)顺便说一个解决远程访问oracle数据库中文显示乱码的解决办法(我这种办法估计遇不到乱码但是也不一定,所以放在这里)。「可选」
进入SqlPLUS界面,进入所要使用的用户模式下,
输入 select userenv(‘language’) from dual;
显示返回结果:

然后退出SQL环境给终端加入环境变量(推荐使用临时加入办法以免使用其他文字显示再次乱码)
临时加入办法 终端里输入 export NLS_LANG=“上面截图里查询到的结果”
13. ps: 实际上我感觉这种办法的原理跟Ubuntu虚拟机 + Docker + MySQL区别不大,还是感谢Windows Arm64的强大的兼容性(感谢微软屎山(划掉)),毕竟这可爱的oracle不给arm出client。