在 Ubuntu 上稳定运行 Oracle 的实用方案
一 方案选型与总体建议
- 生产环境优先选择受支持的 Oracle Linux 或 RHEL;在 Ubuntu 上可通过容器化获得更稳定的交付与回滚能力。
- 若必须在 Ubuntu 裸机上运行,建议采用 Oracle 官方预安装包完成系统与内核调优,再按官方文档安装数据库,并配套监控、备份与自动启动。
| 方案 |
适用场景 |
优点 |
注意事项 |
| Docker 容器化 |
快速上线、CI/CD、弹性扩缩 |
镜像标准化、环境一致、易备份与回滚 |
持久化与备份策略需单独设计;资源限制与内核参数仍需关注 |
| 裸机手动安装 |
传统企业环境、深度定制 |
可控性强、与系统深度集成 |
需严格做内核/资源/存储调优与长期维护 |
以上两种方案均已在社区实践中被广泛采用,容器化示例与手动安装步骤均有成熟范例可参考。
二 容器化部署 Oracle(最快落地)
- 安装 Docker
- sudo apt-get update && sudo apt-get install -y docker.io
- 拉取并运行 Oracle 数据库镜像(示例为 19c 企业版)
- docker pull store/oracle/database-enterprise:19.3.0.0
- docker run -d --name oracle-db
-p 1521:1521 -p 5500:5500
-e ORACLE_PWD=YourStrongPassword
store/oracle/database-enterprise:19.3.0.0
- 验证
- ss -lntp | grep 1521
- docker logs -f oracle-db
- sqlplus sys/YourStrongPassword@//localhost:1521/ORCLCDB as sysdba
- 数据持久化与备份
- 将 /opt/oracle/oradata 挂载到宿主机卷,定期做卷级快照或 RMAN 备份
- 使用命名卷或外部备份工具(如企业备份软件)形成可恢复链路
该方式部署周期短、可重复性强,适合作为开发、测试与部分生产场景的基线方案。
三 裸机手动安装的关键要点
- 系统与用户
- 建议使用 Ubuntu Server LTS,安装桌面组件仅用于安装阶段(如需 GUI)
- 创建用户与组:groupadd oinstall;groupadd dba;useradd -g oinstall -G dba -m -s /bin/bash oracle
- 创建目录并授权:mkdir -p /u01/app/oracle;chown -R oracle:oinstall /u01;chmod -R 775 /u01
- 依赖与库
- apt-get update && apt-get install -y alien libaio1 unixodbc build-essential unzip wget
- 如为 Instant Client:apt-get install -y libaio1;设置 LD_LIBRARY_PATH 或配置 /etc/ld.so.conf.d/oracle.conf 并运行 ldconfig
- 内核与资源限制(示例值,需按内存与负载调优)
- /etc/sysctl.conf
- kernel.shmmax = 物理内存的约 1/2(字节)
- kernel.shmall = 共享内存总页数(shmmax/4096)
- kernel.shmmni = 4096
- kernel.sem = 250 32000 100 128
- fs.file-max = 6815744
- fs.aio-max-nr = 1048576
- net.core.rmem_default/wmem_default = 262144
- net.core.rmem_max/wmem_max = 4194304
- net.ipv4.ip_local_port_range = 9000 65500
- /etc/security/limits.conf
- oracle soft nproc 16384
- oracle hard nproc 16384
- oracle soft nofile 65536
- oracle hard nofile 65536
- 安装与建库
- 以 oracle 用户解压安装介质,执行 runInstaller(或静默安装)
- 使用 DBCA 建库或脚本建库,完成后执行 utlrp.sql 编译无效对象
- 自动启动
- 编辑 /etc/oratab:ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y
- 创建 systemd 服务(/etc/systemd/system/oracle.service)
- [Unit] Description=Oracle Auto Start Service;After=network.target
- [Service] Type=simple;User=oracle;Group=oinstall
- ExecStart=/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbstart $ORACLE_HOME
- ExecStop=/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbshut $ORACLE_HOME
- Restart=on-failure;RestartSec=30s
- [Install] WantedBy=multi-user.target
- systemctl daemon-reload && systemctl enable --now oracle.service
以上步骤覆盖了依赖、内核参数、用户资源、安装与自启动的关键环节,适合在 Ubuntu 上构建可维护的 Oracle 实例。
四 运行期稳定性与性能优化
- 内存与 I/O
- 合理设置 SGA_TARGET / PGA_AGGREGATE_TARGET,启用自动内存管理(如 SGA+PGA 自动)
- 使用 SSD/NVMe、条带化/RAID10,关注 I/O 等待与热点文件
- 存储层开启 异步 I/O(filesystemio_options=setall 或 ASM 场景)
- 调度与文件系统
- 数据库磁盘优先使用 deadline/noop(SSD 推荐 noop;机械盘可用 deadline)
- 数据文件与日志分盘,避免日志与数据争用同一物理磁盘
- 网络与连接
- 优化 TCP 缓冲区与本地端口范围,避免连接风暴
- 合理设置 PROCESSES / SESSIONS / OPEN_CURSORS,并启用连接池
- 监控与诊断
- 定期采集 AWR/ASH/ADDM 报告,定位高负载 SQL 与等待事件
- 使用操作系统监控(如 sar、vmstat、iostat)与 Oracle 监控(如 OEM/自研看板)联动
- 维护与可用性
- 建立 RMAN 备份(含归档日志),定期演练恢复
- 按业务窗口执行统计信息收集、索引/空间维护与补丁更新
这些优化项覆盖了 Linux 层与数据库层的关键稳定性杠杆,可显著提升响应速度与稳态表现。
五 备份恢复与常见故障处理
- 备份策略
- 全备 + 归档日志备份,保留多份与异地副本;定期做 恢复演练
- 容器化场景优先备份挂载的数据卷与配置
- 恢复演练
- 日志与排障
- 关注告警日志(如 alert.log)、监听日志与系统日志,结合 AWR/ASH 定位根因
- 常见库/监听问题:环境变量(ORACLE_HOME/SID)、监听未注册、权限/资源限制不足
- 客户端连通性
- 使用 sqlplus user/pass@//host:1521/SID 验证;如报缺少库,检查 LD_LIBRARY_PATH 或 /etc/ld.so.conf.d/oracle.conf 与 ldconfig
以上做法可确保数据可恢复、问题可定位、故障可快速闭环。