优先用云市场镜像或Docker;手动部署必须选CentOS 7.6+Oracle 19c,且提前禁用透明大页、配足swap(≥2GB)、正确挂载数据盘并赋权,否则root.sh卡死、ASM盘不可见。

直接上结论:别从零手动装,优先用云市场镜像或 Docker;真要手动部署,CentOS 7.6 + Oracle 19c 是当前最稳的组合,但必须提前禁用透明大页、配好 swap、挂对数据盘,否则 root.sh 卡死、ASM 看不见盘是大概率事件。
用云市场镜像一键部署最省事
阿里云控制台 → 云市场 → 搜索“Oracle 19c” → 选带“CentOS 7.6”和“静默安装完成”标签的镜像(如“Oracle Database 19c Enterprise Edition for CentOS 7”)。这种镜像已预装 Oracle 软件、配置好内核参数、创建好 oracle 用户、初始化好监听和数据库实例,启动后直接就能连。
- 适合场景:测试环境快速验证、POC、非核心业务系统
- 注意点:镜像里默认数据库名通常是
orcl,密码多为固定值(如Oracle123),首次登录后必须立刻改密 - 不推荐用于生产:无法自定义字符集(常为
ZHS16GBK)、归档模式默认关闭、FRA(快速恢复区)未单独挂盘,后续扩容或调优会受限
Docker 方式适合开发/CI 流水线
官方支持的 container-registry.oracle.com/database/free:latest 镜像能秒级拉起一个 Oracle Free 版本(12c 兼容语法,但功能受限),适合本地开发或自动化测试。
- 关键命令就三行:
docker pull container-registry.oracle.com/database/free:latest→docker run -d -p 1521:1521 --name oracledb container-registry.oracle.com/database/free:latest→docker logs -f oracledb等它打印出DATABASE IS READY TO USE! - 限制很明确:最大 12GB 数据库大小、最多 2 核 CPU、不支持 RAC、无企业级备份工具(如 RMAN 完整功能)
- 别在 ECS 上用它跑生产:Free 版本未通过 Oracle 官方生产环境认证,且阿里云安全组默认不放行 1521 端口,需手动添加入方向规则
手动安装必须绕开三个硬坑
如果你必须手动装(比如要配 RAC、用特定补丁、或合规要求),CentOS 7.6 上装 Oracle 19c 的致命陷阱不在安装过程本身,而在前置检查环节。
-
swap不够或没启用:Oracle 19c 要求至少 2GB swap,阿里云 ECS 默认不配 swap。执行swapon --show必须有输出,否则gridSetup.sh直接报错退出 - 透明大页(THP)未禁用:CentOS 7 默认开启,会导致 Oracle 后台进程频繁 hang,现象是
sqlplus / as sysdba连不上、ps -ef | grep pmon看不到进程。必须在/etc/default/grub里加transparent_hugepage=never,再grub2-mkconfig -o /boot/grub2/grub.cfg && reboot - 数据盘没挂载到
/u01或权限不对:Oracle 安装目录建议挂 SSD 云盘到/u01,且chown -R oracle:oinstall /u01后还得chmod -R 775 /u01;少一步,runInstaller就提示 “Permission denied”
静默安装响应文件不能照抄模板
网上流传的 responsefile.rsp 多数是 Oracle 12c 的,直接套用到 19c 会因参数名变更失败。最关键的三个字段必须手改:
-
oracle.install.db.config.starterdb.characterSet=AL32UTF8(别用 ZHS16GBK,否则中文应用连不上) -
oracle.install.db.config.starterdb.memoryOption=true且oracle.install.db.config.starterdb.memoryLimit=4096(单位 MB,低于 3072 容易 OOM) -
oracle.install.db.config.starterdb.password.ALL=YourStrongPass123(必须含大小写字母+数字+特殊符号,否则校验失败)
执行时用 ./runInstaller -ignorePrereq -waitforcompletion -silent -responseFile /path/to/responsefile.rsp,其中 -ignorePrereq 是临时绕过部分检查的必要开关,但仅限确认前置项(swap、THP、磁盘)已搞定之后才加。
真正麻烦的从来不是敲哪条命令,而是每块 SSD 云盘挂载后要不要做 mkfs.ext4 -b 4096、/etc/fstab 里该不该加 noatime,nobarrier、还有 OCR 磁盘组到底用外部冗余还是正常冗余——这些细节没对齐,集群第二天就可能起不来。











