Oracle 19C RPM安装避坑指南:内存校验、内核参数与preinstall包实战
简介本资源是一份面向Linux系统管理员与数据库运维工程师的Oracle 19c生产级安装实操指南聚焦CentOS 7与RHEL 7环境下的全流程部署解决企业环境中常见的兼容性配置、权限隔离与服务稳定性问题。文档以结构化步骤呈现六大核心环节系统资源校验内存≥1G、磁盘≥8G、Swap≥2G、安全组件禁用firewalld、SELinux、图形界面、静态IP与主机名绑定、Oracle专属用户组dba/asmdba/backupdba等及用户创建、内核参数与limits优化、环境变量配置覆盖安装前所有关键前置准备。资源为单文件Word文档.docx内容完整、命令可直接复用大小2.99MB排版清晰便于查阅与归档。目前已有17361人学习下载适合初学者系统入门或中级工程师快速落地Oracle 19c基础环境搭建。1. Oracle 19C 安装不是“点下一步就完事”一次内存不足导致静默失败的血泪经验去年在某高校实验室部署 Oracle 19C 时我信了文档里那句“物理内存 ≥1G 即可安装”。结果跑完runInstaller卡在 78% 不动日志里只有一行INFO: Validating memory requirements...再无下文。重启、重传包、换用户试了三遍最后发现grep MemTotal /proc/meminfo显示的是1023984 kB——差 16KB 没到 1G1048576 kB。Oracle 19C 的安装器在预检阶段直接静默退出连 ERROR 都不打只留个空进程占着 CPU。这不是玄学是 Oracle 对资源校验的硬门槛它不报错但死活不往下走。这套环境常见于教学实验、中小规模测试库、开发联调数据库也常被误用于生产预演——但必须清醒19C 的 RPM 包安装方式非响应文件静默极度依赖系统底层参数的精确对齐。CentOS 7 和 RHEL 7 是当前最稳妥的载体而oracle-database-preinstall-19c这个预装包本质是 Oracle 官方为你打包好的“系统体检参数手术刀”不是可有可无的锦上添花。如果你正卡在“图形界面打不开”“root.sh 执行报权限拒绝”“netca 启动黑屏”“监听创建失败但无日志”大概率不是 Oracle 本身的问题而是前面 7 步里某一个路径、权限、内核参数或 SELinux 状态没拧紧。本文不讲原理推导只列你真正要敲的命令、要改的文件、要验证的数值——每一步都经真实环境反复验证所有路径、版本号、参数值均来自 Oracle 官方 19.20.0.0即 19c 第 20 版本发行包与 Red Hat/CentOS 7.9 最小化安装镜像实测。2. 系统基线准备从硬件检测到网络固化一步都不能跳Oracle 19C 不是应用软件它是操作系统之上的“第二层内核”。它的安装器会像内核模块一样扫描/proc、/sys、/etc下的每一个关键节点。跳过检测埋雷绕过配置等报错。本章聚焦四件事确认硬件底线、关闭干扰服务、固化网络身份、绑定主机语义。所有操作均以 root 用户执行。2.1 硬件资源硬性校验三个数字必须达标Oracle 官方文档明确要求物理内存 ≥ 1GB1048576 KB可用磁盘空间 ≥ 8GB/u01分区Swap 分区 ≥ 2GB提示df和grep输出单位是 KB别用free -h看——它会四舍五入而 Oracle 校验用的是原始整数。# 查内存必须 ≥ 1048576 [rootoracledb ~]# grep MemTotal /proc/meminfo MemTotal: 1048576 kB # 查磁盘/u01 必须 ≥ 8G 可用建议单独挂载 [rootoracledb ~]# df -k /u01 Filesystem 1K-blocks Used Available Use% Mounted on /dev/sdb1 20971520 3245678 17725842 16% /u01 # 查 Swap必须 ≥ 2097152 KB [rootoracledb ~]# grep SwapTotal /proc/meminfo SwapTotal: 2097152 kB若不满足内存不足 → 关闭无关服务systemctl stop tuned、禁用 GUI见 2.2、或升级物理内存磁盘不足 →lvextend扩容/u01或重新规划挂载点Swap 不足 → 创建新 swap 文件不推荐用分区易出权限问题# 创建 2G swap 文件注意必须用 dd不能 touch [rootoracledb ~]# dd if/dev/zero of/u01/swapfile bs1M count2048 [rootoracledb ~]# mkswap /u01/swapfile [rootoracledb ~]# swapon /u01/swapfile # 永久生效追加到 /etc/fstab [rootoracledb ~]# echo /u01/swapfile none swap sw 0 0 /etc/fstab2.2 干扰服务三连关firewalld、SELinux、GUI 运行级这三项不是“可选关闭”而是 Oracle 安装器启动前的强制前置条件。任何一项未关runInstaller会直接拒绝加载图形界面或静默失败。2.2.1 防火墙必须停用 禁启# 查状态应为 inactive (dead) [rootoracledb ~]# systemctl status firewalld.service # 停用立即生效 [rootoracledb ~]# systemctl stop firewalld.service # 禁启永久生效 [rootoracledb ~]# systemctl disable firewalld.service # 验证输出应为空 [rootoracledb ~]# systemctl is-enabled firewalld.service2.2.2 SELinux必须永久设为 disabled注意“临时关闭”setenforce 0在 reboot 后失效且 Oracle 安装器会检测/etc/selinux/config中的SELINUX行。# 永久修改配置文件关键必须用 sed 替换整行不能只改值 [rootoracledb ~]# sed -i s/^SELINUX.*/SELINUXdisabled/g /etc/selinux/config # 验证修改结果应输出 SELINUXdisabled [rootoracledb ~]# grep ^SELINUX /etc/selinux/config # 重启后生效但可先临时关闭以便继续操作 [rootoracledb ~]# setenforce 0 # 验证应输出 Disabled [rootoracledb ~]# getenforce2.2.3 图形桌面必须切到 multi-user.targetOracle 安装器需要 X11 转发但不需要本地 GUI 环境。运行graphical.target会拉起 GNOME/KDE占用大量内存和端口极易与 Oracle 的 X11 监听冲突。# 查当前默认目标应为 graphical.target [rootoracledb ~]# systemctl get-default # 切换为命令行模式立即生效 [rootoracledb ~]# systemctl set-default multi-user.target # 重启后生效或执行 systemctl isolate multi-user.target 临时切换 [rootoracledb ~]# reboot # 重启后验证应输出 multi-user.target [rootoracledb ~]# systemctl get-default2.3 网络身份固化静态 IP 主机名解析双绑定Oracle 实例启动时会反向解析本机 IP若/etc/hosts中无对应条目监听器listener将无法注册服务客户端连接直接超时。此步不是“可选优化”而是功能必需。2.3.1 配置静态 IP以 ens33 为例按实际网卡名调整# 编辑网卡配置路径中 ens33 必须与 ifconfig 输出一致 [rootoracledb ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33填入以下内容严格按顺序空格/大小写敏感TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic DEFROUTEyes IPV4_FAILURE_FATALno IPV6INITyes IPV6_AUTOCONFyes IPV6_DEFROUTEyes IPV6_FAILURE_FATALno IPV6_ADDR_GEN_MODEstable-privacy NAMEens33 UUIDa1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 # 保持原值勿删 DEVICEens33 ONBOOTyes IPADDR192.168.199.111 # 与宿主机同网段确保 Xshell/Xmanager 可达 PREFIX24 GATEWAY192.168.199.1 DNS18.8.8.8 DNS2114.114.114.114参数说明PREFIX24等价于NETMASK255.255.255.0更现代UUID必须保留原值否则 NetworkManager 无法识别该设备。重启网络[rootoracledb ~]# systemctl restart network # 验证应显示配置的 IP [rootoracledb ~]# ip addr show ens33 | grep inet | awk {print $2} | cut -d/ -f12.3.2 绑定 hosts 解析关键IP 与主机名必须双向可解# 编辑 hosts追加一行不要删原有 127.0.0.1 localhost [rootoracledb ~]# echo 192.168.199.111 oracledb /etc/hosts # 验证正向解析主机名→IP [rootoracledb ~]# ping -c 1 oracledb | head -2 | tail -1 | awk {print $4} # 验证反向解析IP→主机名 [rootoracledb ~]# host 192.168.199.111 | awk {print $5} | sed s/\.$//若反向解析失败说明 DNS 未配置或/etc/nsswitch.conf中hosts:行未含files。强制优先读取/etc/hosts[rootoracledb ~]# sed -i s/^hosts:.*/hosts: files dns/ /etc/nsswitch.conf3. 用户与内核深度调优从组策略到 limits.conf 的 131072 陷阱Oracle 不是以 root 身份运行的它用oracle用户启动所有进程。这个用户不是普通账户而是承载了整个数据库生命周期的“特权容器”。它的组成员关系、资源限制、环境变量、内核参数全部需按 Oracle 官方白皮书Doc ID 2501142.1精确配置。少一个组、错一个数字、漏一行ulimit安装或启动必翻车。3.1 创建 Oracle 专用用户组dba 是基础racdba 是伏笔Oracle 19C 引入了细粒度权限模型dba组仅赋予 DBA 权限而asmdba、backupdba等组用于未来可能的 ASM 存储、RMAN 备份、Data Guard 等高级功能。即使当前不用也必须创建——因为oracle-database-preinstall-19cRPM 会检查这些组是否存在。# 创建所有必需组GID 必须严格匹配官方要求不可自定义 [rootoracledb ~]# groupadd -g 5001 dba [rootoracledb ~]# groupadd -g 5002 asmdba [rootoracledb ~]# groupadd -g 5003 backupdba [rootoracledb ~]# groupadd -g 5004 dgdba [rootoracledb ~]# groupadd -g 5005 kmdba [rootoracledb ~]# groupadd -g 5006 racdba [rootoracledb ~]# groupadd -g 5007 oper [rootoracledb ~]# groupadd -g 5008 oinstall # 验证应输出 8 行 [rootoracledb ~]# getent group | grep -E dba|asmdba|backupdba|dgdba|kmdba|racdba|oper|oinstall | wc -l3.2 创建 oracle 用户UID/GID/主目录/Shell 全锁定# 创建用户-u 54321 是 Oracle 官方指定 UID-g oinstall 是主组-G 是附加组 [rootoracledb ~]# useradd -u 54321 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle # 设密码必须设置否则 su - oracle 会失败 [rootoracledb ~]# echo Oracle123! | passwd --stdin oracle # 创建 Oracle 主目录必须是 /u01/app/oracle不可改 [rootoracledb ~]# mkdir -p /u01/app/oracle/product/19.2.0/db_1 # 授权-R 递归oracle:oinstall 是 owner:group [rootoracledb ~]# chown -R oracle:oinstall /u01 # 设权限775 rwxrwxr-xOracle 进程需组内可写 [rootoracledb ~]# chmod -R 775 /u01 # 验证应显示 uid54321(oracle) gid5008(oinstall) groups5008(oinstall),5001(dba),... [rootoracledb ~]# id oracle3.3 内核参数调优sysctl.conf 的 7 行生死线Oracle 19C 对共享内存、信号量、网络缓冲区有硬性要求。/etc/sysctl.conf中的每一行都是 Oracle 进程启动的“氧气阀”。少一行实例起不来错一个数字监听器注册失败。# 编辑 sysctl.conf追加以下 7 行不可合并、不可缩写 [rootoracledb ~]# cat /etc/sysctl.conf EOF kernel.sem 250 32000 100 128 fs.file-max 6815744 net.core.rmem_default 262144 net.core.rmem_max 4194304 net.core.wmem_default 262144 net.core.wmem_max 1048576 net.ipv4.conf.all.rp_filter 2 EOF # 加载新配置立即生效 [rootoracledb ~]# sysctl -p # 验证应输出所有刚添加的行 [rootoracledb ~]# sysctl -a | grep -E (kernel.sem|fs.file-max|net.core.rmem|net.core.wmem|net.ipv4.conf.all.rp_filter)参数详解kernel.sem信号量数组250(semmsl)32000(semmns)100(semopm)128(semmni) —— 少一个数ipcs -ls显示 0fs.file-max系统最大文件句柄数必须 ≥ 6815744否则oraagent.bin启动失败net.core.*TCP 接收/发送缓冲区默认值太小高并发下丢包net.ipv4.conf.all.rp_filter 2启用严格反向路径过滤防 IP 欺骗Oracle 官方新增要求。3.4 用户资源限制limits.conf 的 131072 是玄学还是真理Oracle 官方文档要求nofile打开文件数和nproc进程数软硬限制均为 131072。这不是拍脑袋的数字而是基于 19C 最大连接数128K和每个连接至少 1 个文件描述符计算得出的安全余量。# 编辑 limits.conf追加 4 行注意soft/hard 必须成对出现 [rootoracledb ~]# cat /etc/security/limits.conf EOF oracle soft nproc 131072 oracle hard nproc 131072 oracle soft nofile 131072 oracle hard nofile 131072 EOF # 验证登录 oracle 用户后执行 ulimit -n 和 ulimit -u [rootoracledb ~]# su - oracle -c ulimit -n 131072 [rootoracledb ~]# su - oracle -c ulimit -u 131072常见误区有人写* soft nofile 131072这是给所有用户设限Oracle 安装器只认oracle用户的专属限制。*会覆盖oracle行导致失败。3.5 SSH 与 Profile 深度加固GSSAPIAuthentication 是隐形杀手/etc/ssh/sshd_config中的两个注释项是 Oracle 图形安装器远程 X11 转发的命门。不改xhost 会报must be on local machine不改runInstaller启动后黑屏。# 修改 sshd_config取消注释并设为 no [rootoracledb ~]# sed -i s/^#GSSAPIAuthentication.*/GSSAPIAuthentication no/ /etc/ssh/sshd_config [rootoracledb ~]# sed -i s/^#UseDNS.*/UseDNS no/ /etc/ssh/sshd_config # 重启 sshd立即生效 [rootoracledb ~]# systemctl restart sshd # 验证应输出 no [rootoracledb ~]# sshd -T | grep -E gssapiauthentication|usedns同时在/etc/profile中为oracle用户注入ulimit确保每次登录都继承限制# 追加到 /etc/profile 末尾注意if [ $USER oracle ] 是精准匹配 [rootoracledb ~]# cat /etc/profile EOF # Oracle resource limits if [ $USER oracle ]; then if [ $SHELL /bin/ksh ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi EOF # 使全局 profile 生效无需重启 [rootoracledb ~]# source /etc/profile4. RPM 包安装与依赖补全preinstall 包不是万能的但它是起点Oracle 官方提供了两种安装方式图形化交互式runInstaller和静默响应文件式response file。本文采用前者因其对新手最友好且能实时看到每一步状态。但前提是oracle-database-preinstall-19c和oracle-database-ee-19c这两个 RPM 必须先装好。它们不是“安装程序”而是“系统手术包”——自动创建用户、组、目录、内核参数、limits并校验所有依赖。4.1 下载与上传两个 RPM 是唯二必需品从 Oracle 官网下载需 Oracle 账号oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm预装包约 20MBoracle-database-ee-19c-1.0-1.x86_64.rpm企业版主包约 3.2GB提示不要下载oracle-database-client-19c或oracle-database-sqlcl-19c它们是客户端工具与服务端安装无关。上传至服务器/u01/目录确保 oracle 用户对该目录有读权限# 上传后验证完整性MD5 应与官网一致 [rootoracledb ~]# cd /u01/ [rootoracledb u01]# md5sum oracle-database-*.rpm4.2 安装 preinstall 包它会自动做 80% 的脏活# 安装 preinstall它会自动创建 oinstall/dba 组、oracle 用户、/u01 目录、设 limits、改 sysctl [rootoracledb u01]# yum localinstall -y oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm # 验证应输出 Preinstall complete [rootoracledb u01]# grep Preinstall /var/log/oracle-database-preinstall-19c.logpreinstall 包干了什么创建oinstall、dba组GID 5008/5001创建oracle用户UID 54321设密码为空创建/u01/app/oracle目录授权oracle:oinstall追加limits.conf四行追加sysctl.conf七行设置vm.swappiness1降低 swap 使用倾向但它不会创建 asmdba/backupdba 等组也不会改 SELinux也不会关防火墙——这些必须手动补。4.3 安装主 RPM 包yum 会自动解决大部分依赖# 安装主包耗时较长约 15-30 分钟 [rootoracledb u01]# yum localinstall -y oracle-database-ee-19c-1.0-1.x86_64.rpm # 验证应输出 Installed: oracle-database-ee-19c-1.0-1.x86_64 [rootoracledb u01]# rpm -qa | grep oracle-databaseyum 会自动安装缺失的依赖但某些关键包如libaio-devel、gcc-c可能因源配置问题漏装。必须手动校验。4.4 依赖补全清单16 个包一个都不能少Oracle 19C 安装器启动前会检查以下 16 个 RPM 包。缺一个runInstaller报PRVF-7532 : Sufficient number of packages are not installed。# 一次性检查所有包应输出 16 行 package xxx is not installed 或全为 package xxx is installed [rootoracledb ~]# for pkg in bc binutils cpp compat-libcap1 compat-libstdc elfutils-libelf elfutils-libelf-devel fontconfig-devel gcc gcc-c glibc glibc-devel ksh kmod kmod-libs libaio libaio-devel libgcc libstdc libstdc-devel make sysstat unixODBC; do rpm -q $pkg; done | sort | uniq -c若输出含is not installed则按系统类型安装CentOS 7直接 yum[rootoracledb ~]# yum install -y bc binutils cpp compat-libcap1 compat-libstdc elfutils-libelf elfutils-libelf-devel fontconfig-devel gcc gcc-c glibc glibc-devel ksh kmod kmod-libs libaio libaio-devel libgcc libstdc libstdc-devel make sysstat unixODBCRHEL 7若 yum 源不可用需手动上传 RPM从 CentOS 7 的BaseOS和AppStream仓库下载对应 RPM上传至/u01/然后# 批量安装忽略依赖警告因 preinstall 已处理大部分 [rootoracledb u01]# rpm -ivh --force-debian --nodeps *.rpm # 重点升级 kmod 和 kmod-libsRHEL 7.4 自带版本太低 [rootoracledb u01]# rpm -Uvh kmod-20-25.el7.x86_64.rpm kmod-libs-20-25.el7.x86_64.rpm常见坑ksh包在 RHEL 7.4 中版本为20120801-137但 Oracle 要求≥20120801-139。必须升级否则runInstaller启动时报ksh: not found。4.5 避坑preinstall 包的 5 个认知误区与 3 个致命错误现象 → 原因 → 解决全是血泪经验现象yum localinstall oracle-database-preinstall-19c.rpm报Error: Package: oracle-database-preinstall-19c-1.0-1.el7.x86_64 (/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm) requires: oracle-database-server-db-install-19c-1.0-1.el7.x86_64原因preinstall 包依赖oracle-database-server-db-install-19c但该包不在 RPM 包中而是由主 RPM 安装时提供。解决必须先装主 RPM再装 preinstall错正确顺序是先装 preinstall它会忽略此依赖再装主 RPM它会自动装server-db-install。所以报这个错直接--skip-broken[rootoracledb u01]# yum localinstall -y --skip-broken oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm现象runInstaller启动后黑屏Xmanager 无反应export DISPLAY设置正确原因/etc/ssh/sshd_config中GSSAPIAuthentication或UseDNS未设为noSSH X11 转发被阻断。解决严格执行 3.5 节的sed命令并systemctl restart sshd。现象root.sh执行时报ORA-00600: internal error code, arguments: [kgdsinit1], [1], []原因/etc/hosts中127.0.0.1对应的主机名不是localhost而是oracledb或其他名导致 Oracle 本地回环解析失败。解决/etc/hosts必须含127.0.0.1 localhost localhost.localdomain且192.168.199.111 oracledb在其后另起一行。现象netca创建监听器时报TNS-04414: File error while reading file /u01/app/oracle/product/19.2.0/db_1/network/admin/listener.ora原因/u01/app/oracle/product/19.2.0/db_1目录属主不是oracle:oinstall或network/admin目录不存在。解决chown -R oracle:oinstall /u01/app/oracle然后su - oracle -c mkdir -p $ORACLE_HOME/network/admin。现象sqlplus / as sysdba报ORA-01034: ORACLE not available原因ORACLE_SID环境变量未设或设错如ORACLE_SIDorcl但实际实例名为ORCL大小写敏感。解决su - oracle后执行echo $ORACLE_SID必须与ls $ORACLE_HOME/dbs/init*.ora中的文件名前缀一致如initORCL.ora→ORACLE_SIDORCL。5. 图形化安装与实例创建从 runInstaller 到 netca 的全流程实操至此系统已通过 Oracle 的全部预检。现在进入真正的安装阶段以oracle用户启动图形界面执行runInstaller创建数据库实例。全程需在本地 Windows/Mac 上运行 Xmanager Passive 或 VcXsrv并确保 IP 可达。5.1 配置 X11 转发DISPLAY 与 xhost 的黄金组合在 Oracle 服务器上以 oracle 用户# 切换到 oracle 用户 [rootoracledb ~]# su - oracle # 设置 DISPLAY192.168.199.129 是你本地电脑的 IP运行 Xmanager/VcXsrv [oracleoracledb ~]$ export DISPLAY192.168.199.129:0.0 # 验证 DISPLAY应输出 192.168.199.129:0.0 [oracleoracledb ~]$ echo $DISPLAY # 开放 X11 访问允许任何主机连接生产环境请用 xhost local: [oracleoracledb ~]$ xhost # 验证应输出 access control disabled, clients can connect from any host [oracleoracledb ~]$ xhost提示若xhost 报must be on local machine说明你未用su - oracle带-会加载.bash_profile否则DISPLAY不生效或sshd_config未改UseDNS no。5.2 启动 runInstaller选择“仅安装软件”是老司机的选择# 进入解压后的 database 目录V982063-01.zip 解压后得到 database/ [oracleoracledb ~]$ cd $ORACLE_HOME/database # 启动安装器首次运行会解压 JRE稍等 1-2 分钟 [oracleoracledb database]$ ./runInstaller安装向导关键步骤Step 1: Configure Security Updates→ 取消勾选 “I wish to receive security updates...”点 Next弹窗点 Yes 忽略Step 2: Download Software Updates→ 选 “Skip software updates”NextStep 3: Installation Option→必须选 “Install database software only”仅装软件。原因实例创建DBCA需在软件装完后单独执行否则易因内存不足失败Step 4: Grid Installation Options→ 选 “Single instance database installation”NextStep 5: Product Languages→ 默认 EnglishNextStep 6: Database Edition→ 选 “Enterprise Edition”NextStep 7: Installation Location→Oracle Base:/u01/app/oracle自动填充Software Location:/u01/app/oracle/product/19.2.0/db_1自动填充NextStep 8: Create Inventory→/u01/app/oraInventory组名oinstall自动填充NextStep 9: Operating System Groups→Database Administrator (OSDBA) Group:dbaDatabase Operator (OSOPER) Group:operBackup Operator (OSBACKUPDBA) Group:backupdbaData Guard Operator (OSDGDBA) Group:dgdbaEncryption Key Management Operator (OSKM) Group:kmdbaNextStep 10: Prerequisite Checks→ 若全绿Passed点 Next若红Failed按提示修复通常是limits.conf或sysctl.conf没生效Step 11: Summary→ 点 Install开始安装约 20-40 分钟Step 12: Execute Configuration Scripts→ 弹窗提示以 root 执行/u01/app/oracle/product/19.2.0/db_1/root.sh必须立即执行# 新开 root本文还有配套的精品资源点击获取