mac 上用 virtualbox + vagrant 安装 oracle 11g 可行但极易失败,主因是官方不支持 macos 主机、旧盒子已停更且存在 gui 缺失、hosts 配置错误、内存不足三大硬伤;须改用 centos 7 iso 自建环境,调高内存至 3072mb,禁用 efi,绑定 host-only 网络,修正 listener.ora 绑定地址,并手动配置开机自启。
mac 上用 virtualbox + vagrant 装 oracle 11g 是可行的,但实际落地会卡在几个关键环节:oracle 11g 官方不支持 macos 主机直接运行其安装程序,vagrant 的 oracle-11g 盒子早已停止维护且多数无法启动,而 virtualbox 的共享文件夹、网络模式和内存分配稍有偏差就会导致安装中途静默失败或监听失败。
为什么 vagrant up oracle-11g 几乎总失败
网上搜到的 vagrant box add oracle-11g 所依赖的盒子(如 geerlingguy/oracle-11g 或旧版 boxcutter/oracle-11g)大多基于 CentOS 6 + Oracle 11.2.0.2,但存在三个硬伤:
- Oracle 11g 的
runInstaller在无 GUI 的 headless 环境下默认跳过图形校验,但 Vagrant 启动时若未预设DISPLAY和 X11 转发,runInstaller会卡在“检测可用内存”阶段,日志里只显示INFO: Waiting for output...却无后续 - 这些盒子的
/etc/hosts通常没配好本地解析,导致oraInst.loc初始化失败,报错PRVF-0002 : could not retrieve local node name - Vagrantfile 中若用
vb.memory = 2048,对 Oracle 11g 来说仍不足——它要求至少 2GB 可用内存,但 Linux 内核实际需预留 512MB 以上,否则dbca创建数据库时直接 OOM kill
VirtualBox 设置必须改的三项
即使换用自己制作的 CentOS 7 镜像,VirtualBox 默认配置也会让 Oracle 11g 启动后无法被 Mac 访问:
-
网络模式必须用
Bridged Adapter或Host-only Adapter,不能用 NAT:NAT 下 Oracle 监听的1521端口不会自动映射,手动配端口转发后仍常因tnsnames.ora里的 HOST 写成localhost导致 Mac 连不上 -
关闭
Enable EFI:CentOS 6/7 安装 Oracle 11g 时若启用 UEFI,oracle用户的环境变量(尤其是ORACLE_HOME)在服务启动时会丢失,表现为lsnrctl start报SP2-1503: unable to initialize Oracle cluster error -
共享文件夹权限要显式挂载为
uid=500,gid=500:Mac 的 Vagrant 默认以 uid=501 挂载,但 Oracle 用户 UID 固定为 500,不匹配会导致$ORACLE_HOME/bin/dbstart找不到oratab
真正能跑通的最小化安装步骤
放弃所有现成盒子,从干净 ISO 开始(推荐 CentOS-7-x86_64-Minimal-2009.iso),Vagrantfile 关键段落如下:
config.vm.box = "centos/7" config.vm.network "private_network", ip: "192.168.56.101" config.vm.provider "virtualbox" do |vb| vb.memory = "3072" vb.cpus = 2 vb.customize ["modifyvm", :id, "--vram", "128"] vb.customize ["modifyvm", :id, "--ioapic", "on"] vb.customize ["modifyvm", :id, "--graphicscontroller", "vmsvga"] end config.vm.synced_folder ".", "/vagrant", mount_options: ["dmode=755,fmode=644,uid=500,gid=500"]
然后在虚拟机内执行(非 root 用户):
- 先跑
sudo /vagrant/scripts/oracle-prereq.sh—— 这个脚本必须包含:禁用 SELinux、关闭防火墙、设置kernel.shmmax=4294967296、创建/u01/app/oracle并 chown oracle:oinstall - 解压
linux.x64_11gR2_database_1of2.zip和2of2.zip到/tmp/database,进目录执行:./runInstaller -ignorePrereq -waitforcompletion -silent -responseFile /vagrant/db_install.rsp -
db_install.rsp里必须显式写死:oracle.install.db.config.starterDB.characterSet=AL32UTF8,否则默认 US7ASCII 会导致中文应用连库时报ORA-12705 - 最后用
su - oracle -c "$ORACLE_HOME/bin/dbca -silent -createDatabase -gdbName orcl -sid orcl -sysPassword oracle -systemPassword oracle -templateName General_Purpose.dbc"建库
最易被忽略的是:Oracle 11g 的 listener.ora 默认绑定 127.0.0.1,Mac 用 sqlplus system/oracle@//192.168.56.101:1521/orcl 连不上,必须手动改成 HOST = 0.0.0.0 并 reload;另外,每次 vagrant reload 后,lsnrctl 和 sqlplus / as sysdba 都得重连一次,因为 Oracle 服务不会随系统自启——这得靠 /etc/rc.d/init.d/oracle 脚本补全,不是 Vagrantfile 能解决的。











