MacBook M4芯片 Arm64架构 基于docker安装Oracle 19c

前提

在网上找到很多mac安装oracle的版本是amd架构,奈何本人的电脑是arm架构。查看自己的电脑是什么架构可以进入终端

输入uname -m

可以看到本人的是arm架构

安装步骤

1、打开终端,拉取 Oracle 19c 镜像(ARM64 架构),安装的时间可能有点久,需要等待一会

这一步骤参考文章:MacBook M系列芯片基于docker安装Oracle 19c

bash 复制代码
docker pull docker.cnb.cool/kangaroohy/open-source/images/oracle:19.19.0-ee-arm64

安装成功后在终端中输入 docker images,出现以下内容

2、由于我的电脑在docker下创建文件夹的话会报错,所以选择换一种方法

方法一(直接创建):失败

方法二:成功
3、在终端中输入:

bash 复制代码
docker run -d \
  --name oracle \   # (自己设计)容器名称,我这里设置为了oracle
  -p 1521:1521 \    # (不变)Oracle 数据库端口映射(本机可访问)
  -p 5500:5500 \    # (不变)Enterprise Manager 控制台端口
  -e ORACLE_PDB=ORCL \   # 不变
  -e ORACLE_PWD=12345678 \   # (自己设计)设置oracle初始密码
  -e ORACLE_CHARACTERSET=AL32UTF8 \   # 不变
  -e INIT_SGA_SIZE=3000 \             # 不变
  -e INIT_PGA_SIZE=1000 \             # 不变

  # (自己设计)注意这一步,我首先在自己电脑中创建了oracle-data文件夹,然后把本地目录挂载为 Oracle 数据文件存储目录
  -v /自己电脑中oracle-data的文件夹路径/oracle-data:/oracle-data \  
  
  # 刚刚安装的Oracle 19c 镜像
  docker.cnb.cool/kangaroohy/open-source/images/oracle:19.19.0-ee-arm64

4、验证容器是否正常运行

查看日志确认数据库是否启动完成,输入

bash 复制代码
docker logs -f oracle   # oracle是刚刚起的容器名称

如果出现以下内容则证明启动完成,第一次输入需要初始化,可能要等待一段时间:

5、验证挂载是否生效

进入容器,输入

bash 复制代码
docker exec -it oracle /bin/bash   # 注意oracle是刚刚起的容器名字

如果看到了以下提示符,则已经成功进入了 Oracle 容器的 Bash 终端,当前提示符 bash-4.4$ 表示已经在容器内部了

然后执行

bash 复制代码
ls /oracle-data

如果出现空目录,则表示容器成功挂载了你自己电脑中oracle-data的文件夹路径

6、连接oracle数据库

bash-4.4$中输入

bash 复制代码
sqlplus / as sysdba

如果成功,会看到类似下方的内容

在上一步中显示目前已经成功登录了容器内部的 Oracle 数据库,说明数据库服务已正常启动,下面需要确认 Docker 容器是否暴露了1521 端口

7、确认 Docker 容器是否暴露了 1521 端口

先输入exit退出容器,回到自己的macOS终端,然后再执行docker ps命令

如果 1521:1521 存在,说明 Oracle 数据库的监听端口已经映射出来,可以在 Navicat 中使用


8、使用Navicat连接Oracle

在Navicat中新建Oracle,本人的信息填写如下,点击测试链接后却显示未加载oracle数据库。于是开始排错

排错步骤一:确认服务名

输入

bash 复制代码
docker exec -it oracle bash
cat $ORACLE_HOME/network/admin/tnsnames.ora

可以看到文件中同时出现 ORCLCDB ORCL,这是 Oracle 19c 多租户架构下的标准现象

查询之后发现结论如下,还是推荐使用ORCL连接

排错步骤二:测试数据库监听是否开放

在终端上执行

bash 复制代码
telnet localhost 1521

或(Mac 没有 telnet 时)用

bash 复制代码
nc -zv localhost 1521

输出如果类似红框内容,说明监听服务正常。如果失败,说明监听器没启用(容器内部监听未启动)


排错步骤三:容器内检查监听器状态

终端输入

bash 复制代码
docker exec -it oracle bash
lsnrctl status

如果显示类似于下方图片内容,则表示监听器状态成功启动

可以看到本人电脑这两个内容都没有问题,后来查出这不是数据库没连接上,而是我的Navicat 本身缺少 Oracle 客户端库

问题本质:

Navicat 连接 Oracle 时需要调用 Oracle 客户端驱动(OCI 动态库),而 macOS 默认是没有安装这个驱动的,Navicat 会报这个错:


9、现在开始安装 Oracle Instant Client(轻量官方驱动)

进入https://www.oracle.com/database/technologies/instant-client/macos-arm64-downloads.html

下载后解压
instantclient-basic-macos.arm64-19.22.0.0.0dbru.dmg
instantclient-sdk-macos.arm64-19.22.0.0.0dbru.dmg


假设解压在/Users/123/ins路径下,打开终端执行

bash 复制代码
echo 'export DYLD_LIBRARY_PATH=/Users/123/ins' >> ~/.zshrc
source ~/.zshrc

之后重启Navicat,再次连接,发现还是显示测试失败

10、需要在程序简介中勾选Rosetta,勾选完成之后再次重启Navicat

连接成功

相关推荐
百结2142 小时前
Mysql数据库操作
数据库·mysql·oracle
Maverick065 小时前
Oracle Redo 日志操作手册
数据库·oracle
xiaokangzhe6 小时前
MySQL 数据库操作
数据库·oracle
洛阳泰山8 小时前
MaxKB4j Docker Compose 部署指南
java·docker·llm·springboot·rag·maxkb4j
ricky_fan9 小时前
(OpenAI)Codex 安装、部署使用方式
python·macos·conda·vim
Maverick069 小时前
01- Oracle核心架构:理解数据库如何运转
数据库·oracle·架构
一殊酒9 小时前
【Docker】Docker Desktop 安装指南及汉化教程
运维·docker·容器
Drone_xjw10 小时前
【环境搭建】Windows 10上使用Docker搭建本地Git仓库(Gitea)完整教程
windows·git·docker
vpk11212 小时前
【无标题】
运维·elasticsearch·docker
音源部落12 小时前
Cubase15 R2R/VR一键安装完整版本下载安装Nuendo 14最新版本下载安装支持Win/Mac 双系统版本加104G原厂音源Mac系统不关SIP安装编曲软件Cubase 15.0.10下载
macos·vr·cubase·cubase15·nuendo·nuendo14