当前位置:首页 > 技术 > 正文内容

在 Apple Silicon Mac 上运行 Oracle XE 数据库

访客 技术 2026年6月23日 12

最近入手了一台 Macbook Air M1 用于日常开发。学校课程中需要使用 Oracle XE 11g 数据库,但官方并未提供 macOS 原生版本。经过多次尝试,最终成功在 ARM 架构上运行了该数据库。以下是完整的技术方案。

1. 配置 Homebrew 环境

macOS 默认终端为 zsh,而 Homebrew 官方脚本主要针对 bash 设计,直接使用可能导致 brew 命令不可用。推荐采用以下替代方案进行安装:

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

安装过程中选择中科大镜像源以加速下载,等待脚本自动完成。

2. 部署 Colima 虚拟机

Oracle XE 需运行在 x86_64 架构下,因此需通过 Colima 模拟该环境。执行以下命令安装并启动:

brew install colima qemu
colima start --memory 4 --arch x86_64

参数 --arch x86_64 强制使用 Intel 架构模拟,--memory 4 分配 4GB 内存。

3. 安装 Docker 客户端

使用 brew 安装轻量级 Docker 工具:

brew install docker

若后续需要图形化管理界面,可替换为 Docker Desktop(参考问题解决部分)

4. 运行 Oracle XE 容器

首先登录 Docker Hub:

docker login

随后拉取并启动预配置的 Oracle 11g 镜像:

docker run -h "oraclehost" --name "oracle" -d -p 1521:1521 oracleinanutshell/oracle-xe-11g

该命令将容器的 1521 端口映射到宿主机,供外部工具连接。

5. 验证数据库状态

查看运行中的容器:

docker ps

输出示例:

CONTAINER ID   IMAGE                             COMMAND                  
cdd8e2328ef2   oracleinanutshell/oracle-xe-11g   "/bin/sh -c '/usr/sb…"

进入容器内部 shell:

docker exec -it cdd8e2328ef2 /bin/bash

使用 SQL*Plus 登录测试:

sqlplus system/oracle

成功后将显示如下信息:

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL>

常见问题处理

Q1:启动容器时提示 Docker 守护进程未运行

错误信息:Cannot connect to the Docker daemon at unix:///var/run/docker.sock
解决方案:卸载 brew 安装的 Docker 并改用桌面版:

brew uninstall docker

从 Docker 官网下载并安装 Docker Desktop。

Q2:安装 Docker Desktop 后终端找不到命令

编辑或创建 ~/.zshrc 文件,添加路径:

export PATH="/Applications/Docker.app/Contents/Resources/bin:$PATH"

使配置生效:

source ~/.zshrc

Q3:默认连接凭证与端口

  • 用户名:system
  • 密码:oracle
  • 服务名:XE
  • 端口:1521

Q4:Navicat 连接报错"未加载 Oracle 数据库"

在访达中右键 Navicat → 显示简介 → 勾选"使用 Rosetta 运行",重新启动应用即可。

Q5:SQL*Plus 中方向键显示为转义字符

在容器内安装 readline 工具:

apt update && apt install rlwrap -y

使用增强版命令启动:

rlwrap sqlplus system/oracle

注意事项

避免使用 deepdiver 提供的镜像,因版本过旧可能导致拉取失败。此外,Docker Desktop 可能无法识别通过 Colima 启动的容器环境,这属于正常现象,所有操作都应在命令行完成。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。