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

连接成功

相关推荐
Curvatureflight10 小时前
MySQL 深分页越来越慢?从 LIMIT OFFSET 改成游标分页
数据库·oracle
tiancaijiben10 小时前
阿里云函数计算FC如何实现网站的定时任务与自动化
数据库·oracle·dba
xfhuangfu10 小时前
Oracle 19c 多租户体系架构介绍
数据库·oracle·架构
CodeStats11 小时前
【虚拟机】 从 CPU 指令到虚拟机隔离:虚拟机就是一个“模拟了完整硬件的普通进程”
java·docker
ai产品老杨11 小时前
突破安防碎片化:基于 Docker 与边缘计算的 AI 视频智能化中台,如何通过 GB28181/RTSP 统一接入与全套源码交付实现二次开发自由?
人工智能·docker·边缘计算
“码”力全开12 小时前
解耦异构设备:基于 Docker 与边缘计算的 GB28181/RTSP 统一流媒体平台架构演进(全源码交付)
docker·架构·边缘计算
日取其半万世不竭12 小时前
Memos 私人碎片笔记怎么搭?Docker 加 Caddy 一小时跑起来
笔记·docker·容器
gc_229912 小时前
学习在Windows中基于Docker部署Dify的步骤
windows·docker·dify
写代码的学渣12 小时前
docker部署开源实时观测系统hertzbeat
docker·容器·开源
lichong95112 小时前
让AI自己用电脑!Cua:后台操作鼠标键盘,Mac/Windows/Linux全支持
人工智能·macos·ai·计算机外设·agent·提示词