资讯详情

Oracle 19C 在 CentOS 7 上的完整安装指南:从系统配置到监听跑通

📅 2026/10/31 2:32:57 | 华诺云谱 👁 阅读
Oracle 19C 在 CentOS 7 上的完整安装指南:从系统配置到监听跑通
简介面向需要在 CentOS 7 或 Red Hat 7 上部署 Oracle 19C 的数据库运维与实施人员这份文档型资料把安装前的环境准备与系统配置整理成可对照执行的清单覆盖内存、硬盘与 Swap 分区检查防火墙、图形桌面与 selinux 的关闭静态 IP 与主机名初始化以及 dba、asmdba、oinstall 等用户组的创建和 oracle 用户环境变量、limits.conf、sshd_config 的调整适合初中级 DBA 按步骤落地。资源包共 1 个 docx 文件约 2.99MB以图文步骤与命令片段为主便于边看边操作。目前已有 17396 人学习下载说明其步骤组织经过较多实践检验。读者可据此快速完成安装前系统调优与用户权限配置减少因环境不达标或参数遗漏导致的返工并作为后续静默安装与建库的参考底稿。1. 一次装完 Oracle 19C从裸机 CentOS 7 到监听跑通的落地清单拿到一台刚装好的 CentOS 7 或 Red Hat 7 裸机要把它变成一台能连得上的 Oracle 19C 单实例库中间真正卡人的往往不是runInstaller那几步图形界面而是前面一堆系统层的前置条件内存和 Swap 够不够、SELinux 关没关干净、静态 IP 和主机名对不对得上、limits.conf和内核参数有没有生效、RPM 依赖是不是齐的。这份安装步骤资源把整条链路拆成了系统检查、安全项关闭、网络与主机名、用户组、内核与 limits、RPM 依赖、图形化安装、建库建监听八个阶段属于典型的「照着做能复现、漏一步就翻车」的实操型文档。它适合两类人第一次在 Linux 上独立部署 Oracle 19C、需要一份可对照的检查清单的新手以及装过 11g、想快速迁移到 19C 版本、确认参数差异的熟手。下面按真实执行顺序把每一步的参数含义、验证方式和常见坑讲透。2. 系统前置条件与安全项内存、Swap、SELinux 的取舍2.1 三项硬指标怎么查、阈值怎么定安装前先确认三件事物理内存、可用磁盘、Swap 空间。资源里给的阈值是内存不小于 1G、磁盘不小于 8G、Swap 不小于 2G这是 Oracle 19C 官方最低要求的下限。实际生产环境我一般会把内存拉到 4G 以上、Swap 给到内存的 1 到 1.5 倍因为 1G 内存跑 19C 实例建库阶段就可能因为 PGA 分配失败直接中断。# 查看物理内存总量单位 kB grep MemTotal /proc/meminfo # 查看各挂载点磁盘使用与剩余空间 df -h # 查看 Swap 总量 grep SwapTotal /proc/meminfo三条命令的输出要交叉看MemTotal换算成 GB 后确认是否满足最低要求df -h重点看/u01所在分区或根分区剩余空间因为 Oracle 软件本身加上后续数据文件8G 只是起步SwapTotal为 0 说明压根没建 Swap 分区需要补建。参数上/proc/meminfo是内核实时导出的内存视图grep只是过滤不改任何东西属于纯读操作可以放心执行。如果 Swap 不足常见做法是临时补一个 swap 文件而不是重新分区# 创建 2G 的 swap 文件 dd if/dev/zero of/swapfile bs1M count2048 chmod 600 /swapfile mkswap /swapfile swapon /swapfile # 写入 fstab 保证重启后仍生效 echo /swapfile swap swap defaults 0 0 /etc/fstabbs1M count2048就是 2048 个 1M 块合计 2Gmkswap把普通文件格式化成 swap 区swapon立即启用。这一步做完再回头grep SwapTotal确认数值变了否则后面建库时内存不足的报错会很难定位。2.2 防火墙、SELinux、图形桌面的关闭顺序资源里把防火墙、图形桌面、SELinux 放在一起处理顺序上建议先关防火墙和 SELinux图形桌面按需处理。# 查看防火墙状态 systemctl status firewalld.service # 停止并禁止开机自启 systemctl stop firewalld.service systemctl disable firewalld.servicestop是本次运行期停止disable是取消开机自启两条都要执行只做stop的话重启后防火墙又回来了表现为监听端口突然连不上属于典型血泪经验。SELinux 的关闭分临时和永久两层# 查看当前 SELinux 状态 getenforce # 临时关闭立即生效重启失效 setenforce 0 # 永久关闭改配置文件 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/configsetenforce 0只改运行态/etc/selinux/config里的SELINUXdisabled才是重启后生效的持久配置。两者必须都做只改配置文件不setenforce当前会话里 SELinux 仍然拦着 Oracle 的文件访问只setenforce不改配置重启后前功尽弃。改完用getenforce确认输出Permissive或Disabled。图形桌面这块资源里给了systemctl get-default和set-default的切换方法。我的建议是如果服务器只跑数据库保持multi-user.target命令行模式即可图形化安装通过 X11 转发完成不必为了装一次库把整台机器切成图形模式那样会多占几百兆内存和一批无关服务。提示SELinux 配置文件改完后getenforce在未重启前仍显示Enforcing是正常的因为运行态还没切换别以为没改成功。3. 网络、主机名与用户组让实例认得自己3.1 静态 IP 与 hosts 的对应关系Oracle 实例启动时会把主机名解析成 IP 写进监听注册信息如果/etc/hosts和网卡配置对不上监听能起来但客户端连不上报ORA-12514或ORA-12541。所以静态 IP 和主机名要一起改。# 编辑网卡配置文件名以实际为准 vi /etc/sysconfig/network-scripts/ifcfg-ens33关键字段含义如下字段取值说明BOOTPROTOstatic改为静态分配原来是 dhcpIPADDR192.168.199.111固定 IP需与客户端同网段GATEWAY192.168.199.1网关与网段匹配NETMASK255.255.255.0子网掩码ONBOOTyes开机启用该网卡DNS18.8.8.8备用解析按内网实际调整NAME和DEVICE必须与文件名里的网卡名一致写成ens33就三处都写ens33不一致会导致配置不生效。改完执行service network restart让配置落地再用ip addr确认 IP 已挂上。接着改主机名映射# 追加主机名与 IP 的映射 echo 192.168.199.111 oracledb /etc/hosts这一行的作用是让本机把oracledb解析到自己的 IP监听注册和lsnrctl都依赖它。改完ping oracledb能通说明解析链路没问题。3.2 用户组与 oracle 用户的创建逻辑Oracle 安装要求独立的oracle用户和一组职责明确的用户组。资源里给了 8 个组实际单实例部署最核心的是oinstall软件所有者和dba数据库管理权限其余asmdba、backupdba、dgdba、kmdba、racdba、oper属于为后续扩展预留。# 创建核心用户组-g 指定 GID groupadd -g 5001 dba groupadd -g 5008 oinstall # 创建 oracle 用户-u 指定 UID-g 主组-G 附加组 /usr/sbin/useradd -u 54321 -g oinstall -G dba,oper oracle # 设置密码 passwd oracle-g oinstall是主组-G后面跟附加组列表。UID 54321、GID 5001 这类数值不是强制的但固定下来便于多机环境统一。用户建好后创建软件目录并授权# 创建 ORACLE_HOME 目录结构 mkdir -p /u01/app/oracle/product/19.2.0/db_1 # 递归改属主 chown -R oracle:oinstall /u01 # 递归给组读写执行权限 chmod -R 775 /u01chown -R和chmod -R的-R是递归/u01下所有层级都要归oracle:oinstall漏一层后面runInstaller就会报目录不可写。775保证组内可写符合 Oracle 的目录权限惯例。4. 内核参数与 RPM 依赖安装器真正检查的东西4.1 limits.conf、sysctl.conf 与 profile 三处配置Oracle 安装器在预检查阶段会读limits.conf和内核参数不达标直接报PRVF类错误。资源里给了三处配置逐一说明。# 编辑用户资源限制 vi /etc/security/limits.conf追加内容oracle soft nproc 131072 oracle hard nproc 131072 oracle soft nofile 131072 oracle hard nofile 131072nproc是进程数上限nofile是打开文件句柄上限soft是软限制、hard是硬限制软限制不能超过硬限制。131072 这个量级是为了满足 19C 在高并发下的句柄需求数值偏大但安全。# 编辑内核参数 vi /etc/sysctl.conf追加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 1048576kernel.sem四个值依次是信号量集合数、系统级信号量总数、每个 semop 调用操作数、系统级信号量最大值Oracle 对信号量有硬性要求fs.file-max是系统级文件句柄上限要和limits.conf的nofile配合rmem、wmem是网络收发缓冲区影响监听和数据传输性能。改完必须执行# 让 sysctl.conf 立即生效 sysctl -psysctl -p会重新加载配置文件并打印每项结果输出里能看到kernel.sem 250 32000 100 128才算生效。不执行这一步配置文件只是躺在磁盘上安装器读到的还是旧值。/etc/profile里那段if [ $USER oracle ]的作用是给 oracle 用户单独设ulimit属于兜底和limits.conf双保险。改完source /etc/profile或重新登录生效。4.2 preinstall 包与依赖检查的正确姿势CentOS 7 上最省事的做法是先装oracle-database-preinstall-19c它会自动把用户、组、内核参数、依赖包一次性配好很多手工步骤可以省掉。资源里把两个 RPM 上传到/u01后用yum localinstall安装cd /u01 # 先装预安装包自动处理依赖和系统配置 yum localinstall -y oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm # 再装数据库软件包 yum localinstall -y oracle-database-ee-19c-1.0-1.x86_64.rpmyum localinstall相比rpm -ivh的优势是会自动从已配置的源里补齐依赖减少手工找包。装完用一条命令核对依赖是否齐全# 批量查询关键依赖包是否已安装 rpm -q 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输出里凡是package xxx is not installed的就是缺口用rpm -ivh补装版本偏低的用rpm -Uvh升级。这里有个容易忽略的点compat-libstdc在部分最小化安装的系统里默认没有而它又是 19C 预检查的必查项缺了会在图形界面安装到一半才报错提前用上面这条命令扫一遍能省很多时间。Red Hat 7 环境下资源还提到替换自带 yum 源的操作用rpm -aq|grep yum|xargs rpm -e --nodeps卸载再装 CentOS 的 yum 包。这一步风险较高--nodeps强制卸载可能连带破坏依赖我的建议是能配好可用源就不要动系统自带 yum除非确实遇到源不可用且无法通过其他方式解决。注意rpm -Uvh升级内核相关包如kmod后部分改动要重启才完全生效装库前重启一次是稳妥做法。5. 图形化安装与建库runInstaller 到 netca 的完整链路5.1 环境变量与 X11 转发切换到 oracle 用户后配置.bash_profile这是后续所有命令能找到sqlplus、runInstaller的基础。su - oracle vi ~/.bash_profile追加export ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_BASE/product/19.2.0/db_1 export ORACLE_SIDorcl export PATH$ORACLE_HOME/bin:/usr/sbin:$PATH export LD_LIBRARY_PATH$ORACLE_HOME/lib:/lib:/usr/lib export LANGC export NLS_LANGAMERICAN_AMERICA.AL32UTF8ORACLE_BASE是基础目录ORACLE_HOME是软件安装目录ORACLE_SID是实例名三者路径必须和前面mkdir建的目录完全一致。NLS_LANG设成AL32UTF8是为了字符集统一建库时如果这里和数据库字符集不一致中文会变问号。改完source ~/.bash_profile用echo $ORACLE_HOME确认。图形化安装需要把服务器的图形界面转发到本地机器资源里用export DISPLAY192.168.199.129:0.0指向本地装有 X 工具的机器再xhost 放行。DISPLAY的格式是IP:显示号.屏幕号IP 填本地机器而不是数据库服务器xhost 是放开访问控制装完建议改回受限模式。# 上传并解压安装包到 ORACLE_HOME cd /u01/app/oracle/product/19.2.0/db_1 unzip V982063-01.zip # 进入解压出的 database 目录执行安装器 cd database ./runInstallerrunInstaller启动后只选「仅安装软件」实例留到软件装完再建这样出错时能分清是软件层问题还是建库层问题。安装到最后会提示用 root 执行root.sh# 以 root 身份执行路径以安装器提示为准 /u01/app/oracle/product/19.2.0/db_1/root.shroot.sh负责注册一些需要 root 权限的系统级组件不执行的话监听和实例启动会缺东西。5.2 建监听与建库的先后顺序软件装完后先用netca建监听再用dbca建实例。资源里只写到netca这里补全建库环节。# oracle 用户执行图形化配置监听 netca # 图形化创建数据库实例 dbcanetca里选「监听程序配置」→ 新建 → 默认端口 1521 → 完成。建完用lsnrctl status确认监听状态是READY。dbca里选「创建数据库」字符集选AL32UTF8和.bash_profile里的NLS_LANG保持一致。建库完成后验证# 查看监听注册的实例 lsnrctl status # 本地登录验证 sqlplus / as sysdbalsnrctl status输出里能看到Service orcl且状态为READY说明实例已注册到监听sqlplus / as sysdba能进 SQL 提示符说明实例本身正常。两步都过才算真正装完。6. 避坑与排查五条装库现场的真实记录6.1 现象runInstaller 图形界面弹不出来原因DISPLAY指向错误或本地 X 工具没放行或服务器没装 X11 相关库。解决先在服务器上echo $DISPLAY确认指向本地机器 IP再在本地 X 工具里确认已允许该服务器连接最后检查xhost 是否执行。三者缺一runInstaller会静默退出或报Cant connect to X11 window server。6.2 现象预检查报内核参数不达标原因改了sysctl.conf但没执行sysctl -p或者limits.conf改完没重新登录 oracle 用户。解决sysctl -p看输出是否包含改动的项limits.conf的改动对已登录会话不生效必须退出重登或su - oracle重新加载。用ulimit -n和ulimit -u在 oracle 用户下确认实际值。6.3 现象监听起来了但客户端连不上报 ORA-12541原因/etc/hosts里主机名和 IP 对不上或监听只绑了localhost。解决ping 主机名确认解析到正确 IPlsnrctl status看监听绑定的地址如果是127.0.0.1需要改listener.ora的HOST为实际 IP 或主机名再lsnrctl reload。6.4 现象建库到一半报共享内存不足原因/dev/shm太小容器或最小化安装的系统常见默认只有 64M。解决df -h /dev/shm查看临时用mount -o remount,size2G /dev/shm扩大持久化写进/etc/fstab。这个坑在物理机上不常见在虚拟化环境里概率很高。6.5 现象root.sh 执行报权限或路径错误原因ORACLE_HOME路径和实际解压路径不一致或/u01属主不是oracle:oinstall。解决ls -ld /u01/app/oracle/product/19.2.0/db_1核对属主和权限echo $ORACLE_HOME核对路径两者一致后再执行root.sh。7. 装完之后用一条检查脚本把环境状态固化下来装完库只是开始真正省心的是把这次安装的关键状态固化成可重复执行的检查脚本下次换机器或排查问题时直接跑一遍比翻笔记快得多。我一般会在/u01下放一个check_env.sh把内存、Swap、SELinux、监听、实例状态一次性打出来。#!/bin/bash # Oracle 19C 环境自检脚本root 或 oracle 用户均可执行 echo 内存与 Swap grep -E MemTotal|SwapTotal /proc/meminfo echo 磁盘 df -h /u01 echo SELinux getenforce echo 内核信号量 ipcs -ls | head -5 echo 监听状态 su - oracle -c lsnrctl status 2/dev/null | grep -E Service|READY|Instance echo 实例进程 ps -ef | grep -E ora_pmon|ora_smon | grep -v grep脚本里ipcs -ls看的是当前生效的信号量参数和sysctl.conf里写的kernel.sem对照能立刻发现配置没生效的情况lsnrctl status用su - oracle -c切用户执行避免 root 下环境变量缺失ps -ef抓pmon、smon两个核心后台进程有输出说明实例活着。这套检查我每次装完库、每次重启后都会跑一遍比凭记忆逐项确认靠谱。再补一个字符集验证很多人装完能用就以为万事大吉结果插中文变乱码才发现NLS_LANG和数据库字符集不一致-- 登录后查询数据库字符集 SELECT parameter, value FROM nls_database_parameters WHERE parameter IN (NLS_CHARACTERSET,NLS_NCHAR_CHARACTERSET);NLS_CHARACTERSET应该是AL32UTF8和.bash_profile里的NLS_LANGAMERICAN_AMERICA.AL32UTF8对应。不一致的话要么重建库要么在客户端侧统一NLS_LANG后者只能缓解不能根治。从那以后我每次装完 Oracle都会先跑一遍这个自检脚本再交付把内存、SELinux、信号量、监听、字符集五个状态一次性确认避免过几天被一个「连不上」的电话叫回去重查。希望这份清单帮到你少走几趟回头路。本文还有配套的精品资源点击获取
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑