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

连接成功

相关推荐
weixin_4624462331 分钟前
【原创实践】Docker 镜像批量导出镜像与导入镜像
运维·docker·容器
qq7590353661 小时前
Docker快速部署一款堡垒机系统
运维·docker·容器
玩转数据库管理工具FOR DBLENS1 小时前
企业数据架构选型指南:关系型与非关系型数据库的实战抉择
数据库·测试工具·mysql·oracle·架构·nosql
专业开发者2 小时前
调试 iOS 蓝牙应用的新方法
物联网·macos·ios·cocoa
天下不喵3 小时前
python项目部署之pytandic与.env的使用教程
python·docker
芥子沫4 小时前
Docker安装Blossom笔记
笔记·docker·容器
TH_14 小时前
20、误删oracle数据
数据库·oracle
qq7590353665 小时前
docker一键部署网页版Win11系统
运维·docker·容器
Joren的学习记录5 小时前
【Linux运维大神系列】docker详解(三)
linux·运维·docker
米有哥6 小时前
[Embodied AI] Mac上安装ROS2
人工智能·macos·ros2