Mac安装Oracle数据库(M芯片)

适用场景:

  • Mac 芯片:本机M4pro(Apple Silicon / arm64)
  • Navicat:Navicat Premium 17.2.5
  • Oracle:通过 OCI / Instant Client 连接

1. 确认 Mac 芯片架构(可选)

打开终端执行:

bash 复制代码
uname -m
  • 输出 arm64:Apple Silicon(M1/M2/M3/M4)

2. 安装 Rosetta(强烈推荐)

因为你可能会选择 Intel x86 版本的 Instant Client(兼容性最稳),因此需要 Rosetta:

bash 复制代码
softwareupdate --install-rosetta --agree-to-license

3. 下载 Oracle Instant Client(Intel x86 版)

打开 Oracle 官方下载页:

text 复制代码
https://www.oracle.com/database/technologies/instant-client/downloads.html

选择:

  • Instant Client for macOS (Intel x86)

下载这两个包(DMG):

  • Basic (dmg)
  • SDK (dmg)(建议安装,兼容性更好)

下载后的文件通常类似:

  • instantclient-basic-macos.dmg
  • instantclient-sdk-macos.dmg

4. 安装 Instant Client(拖拽/复制到固定目录)

4.1 创建安装目录(推荐放在用户目录)

例如放到:

text 复制代码
/Users/你的目录

/Users/***/software/Java/oracle/

你可以先在 Finder 创建好该目录。


4.2 安装 Basic(必须)

  1. 双击打开 instantclient-basic-macos.dmg
  2. 会出现一个挂载盘,例如 instantclient-basic-macos.x64-19.16...
  3. 里面能看到大量 .dylib 文件(如 libclntsh.dyliblibnnz19.dyliblibocci.dylib
  4. 将该挂载盘里的所有内容复制到目标目录,例如:
text 复制代码
/Users/***/software/Java/oracle/instantclient_19_16/

⚠️ 注意:最终目录里必须能看到 libclntsh.dylib,否则说明还没安装成功。


4.3 安装 SDK(建议)

  1. 双击打开 instantclient-sdk-macos.dmg
  2. 将里面的内容复制到同一个目录:
text 复制代码
/Users/***/software/Java/oracle/instantclient_19_16/

当系统提示"文件已存在,是否替换"时:

  • 勾选 全部应用
  • 选择 替换

4.4 验证是否安装成功

进入目标目录,确认存在:

  • libclntsh.dylib
  • libclntsh.dylib.19.1
  • libclntshcore.dylib.19.1
  • libnnz19.dylib
  • libocci.dylib.19.1

5. 配置 Oracle 环境变量(zsh)

编辑 ~/.zshrc(如果你是 bash 则是 ~/.bash_profile):

bash 复制代码
nano ~/.zshrc

在文件末尾追加(路径换成你的实际目录):

bash 复制代码
# Oracle Instant Client
export ORACLE_HOME=/Users/***/software/Java/oracle/instantclient_19_16
export DYLD_LIBRARY_PATH=$ORACLE_HOME
export PATH=$ORACLE_HOME:$PATH

使其生效:

bash 复制代码
source ~/.zshrc

验证:

bash 复制代码
echo $ORACLE_HOME
ls "$ORACLE_HOME" | grep clntsh

6.(可选)修复 libclntsh.dylib 软链接

有些环境/程序对软链接更敏感,可以强制重建:

bash 复制代码
cd "$ORACLE_HOME"
rm -f libclntsh.dylib
ln -s libclntsh.dylib.19.1 libclntsh.dylib

因为你安装的是 Intel x86 版本 Instant Client,Navicat 必须运行在 Rosetta 模式,否则架构不一致加载失败。

步骤:

  1. Finder → 应用程序 → 找到 Navicat Premium
  2. 右键 → 显示简介
  3. 勾选 ✅ 使用 Rosetta 打开
  4. Cmd + Q 完全退出 Navicat
  5. 重新打开 Navicat

Navicat 里填:

  • 主机:``
  • 端口:1521
  • 选择:(Service Name)
  • 服务名称:``
  • 用户名:``
  • 密码:``

8.1 避免 ORA-01005(密码为空)

如果出现:

  • ORA-01005: null password given; logon denied

解决方法:

  • 先取消勾选 保存密码
  • 手动重新输入密码
  • 如果依然出现,去 钥匙串访问(Keychain Access) 删除 Navicat 相关条目

9. 解决 ORA-24454(client host name is not set)

在 macOS 上 Oracle 可能报:

  • ORA-24454: client host name is not set

原因:Oracle 客户端获取不到本机 HostName,或 .local 解析问题。

9.1 设置系统 HostName

bash 复制代码
sudo scutil --set HostName TylerMacPro
sudo scutil --set LocalHostName TylerMacPro
sudo scutil --set ComputerName TylerMacPro

9.2 修改 /etc/hosts(关键)

bash 复制代码
sudo nano /etc/hosts

在末尾添加两行:

text 复制代码
127.0.0.1   TylerMacPro
127.0.0.1   TylerMacPro.local
bash 复制代码
保存并退出:

Ctrl + O → 回车

Ctrl + X

保存退出。

9.3 刷新 DNS 缓存

bash 复制代码
dscacheutil -flushcache
sudo killall -HUP mDNSResponder
  • 重新打开 → 测试连接

10. 最终验证:连接成功

当左侧能看到大量 Schema(如 CHENGMINSUPCONLMS_TEST 等)时,说明已经连接成功。


常见问题汇总(FAQ)

Q1:Navicat 仍提示"未加载 Oracle 库"

  • 说明 Instant Client 没装对(目录里没有 libclntsh.dylib
  • 或 Navicat 没用 Rosetta 打开(Intel 库无法被 arm 进程加载)

Q2:ORA-01005(null password)

  • Navicat 没从钥匙串读到密码,传了空值
  • 解决:取消保存密码、重新输入、清理 Keychain

Q3:ORA-24454(client host name is not set)

  • Oracle 获取不到 HostName(.local / DNS / scutil 空值)
  • 解决:设置 HostName + 修改 /etc/hosts + 刷新缓存

完整一键检查清单

✅ Rosetta 已安装

✅ Instant Client(Basic + SDK)已安装到固定目录

✅ 目录中存在 libclntsh.dylib

.zshrc 配置 ORACLE_HOME / DYLD_LIBRARY_PATH / PATH

✅ Navicat 勾选 Rosetta 打开

/etc/hosts 添加 TylerMacPro 映射

✅ Navicat 测试连接成功


相关推荐
砚边数影1 小时前
从文档型数据库到企业级数据平台:一次架构演进的思考与实践
数据库·mongodb·架构·kingbase·数据库平替用金仓·金仓数据库
SQL必知必会2 小时前
SQL 删除重复行完全指南
数据库·sql
工业甲酰苯胺2 小时前
spring-事务管理
数据库·sql·spring
全栈前端老曹2 小时前
【Redis】Redis 持久化机制 RDB 与 AOF
前端·javascript·数据库·redis·缓存·node.js·全栈
李慕婉学姐3 小时前
Springboot平安超市商品管理系统6sytj3w6(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
Elastic 中国社区官方博客3 小时前
易捷问数(NewmindExAI)平台解决 ES 升级后 AI 助手与 Attack Discovery 不正常问题
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·ai
瀚高PG实验室3 小时前
数据库意外中止,无法启动
数据库·瀚高数据库
开开心心就好3 小时前
一键加密隐藏视频,专属格式播放工具
java·linux·开发语言·网络·人工智能·macos
Amarantine、沐风倩✨3 小时前
列表接口严禁嵌套 LISTAGG + REGEXP:一次 mission_label 性能事故复盘
java·数据库·sql