CentOS 7 低配环境安装 Oracle 19C 全流程与避坑指南

发布时间:2026/10/27 2:38:11
CentOS 7 低配环境安装 Oracle 19C 全流程与避坑指南

简介:这份资源面向需要在 CentOS 7 或 Red Hat 7 环境中部署 Oracle 19C 的数据库运维人员与初学者,提供一份可对照执行的安装操作文档,帮助读者理清从系统检查到安装收尾的完整流程。压缩包内共 1 个 docx 文件,约 2.99MB,以图文与命令片段结合的方式组织内容,便于边看边操作。文档围绕物理内存、硬盘与 Swap 分区等系统要求展开,依次覆盖关闭防火墙、图形桌面与 selinux,修改静态 IP、初始化主机名、创建 dba 等用户组与 oracle 用户,以及调整 limits.conf、sshd_config 和环境变量等关键环节,并附有具体命令与配置示例,方便读者按步骤核对与排错。目前已有 17392 人学习下载,适合希望快速搭建 Oracle 19C 实验环境、减少安装踩坑的读者参考使用。

1. 一台 1G 内存的 CentOS 7 怎么把 Oracle 19C 装起来

上周有个做运维的朋友甩过来一台虚拟机,1G 物理内存、8G 系统盘,问我能不能把 Oracle 19C 装上去跑个测试库。我第一反应是“这配置够呛”,但翻完他手里那份安装笔记,发现按步骤走其实能成——前提是你得把系统层该关的关、该调的调,别一上来就闷头跑runInstaller。这份资源就是一套面向 CentOS 7 / Red Hat 7 的 Oracle 19C 安装实操步骤,从内存硬盘 Swap 的硬性检查,到防火墙、SELinux、静态 IP、用户组、内核参数、RPM 依赖,再到图形化安装和建实例,一条线拉到底。它适合两类人:一是第一次在 Linux 上装 Oracle、被各种前置条件绕晕的新手;二是装过但总在 RPM 依赖或图形界面那一步翻车、想找一份能照着抄的清单的老手。下面我按自己复现的顺序拆一遍,重点讲参数为什么这么设、哪几步最容易踩坑。

2. 装之前先把系统底子摸清:内存、Swap 与内核参数

Oracle 19C 对系统资源的要求不算高,但“不算高”不等于“随便给”。这份笔记里写的物理内存不小于 1G、可用硬盘不小于 8G、Swap 不小于 2G,是能跑起来的下限,不是推荐值。我一般会在这三个数上各留一点余量,尤其是 Swap——安装过程中如果内存吃紧触发 OOM,runInstaller会莫名其妙退出,日志里还不一定写得清楚,这种玄学问题排查起来最费时间。

2.1 三条检查命令与它们的判读方式

先别急着改配置,把现状摸清楚。三条命令分别对应内存、磁盘和 Swap:

# 查看物理内存总量,单位 kB grep MemTotal /proc/meminfo # 查看各挂载点磁盘使用情况,重点看 / 和 /u01 所在分区 df -h # 查看 Swap 总量,单位 kB grep SwapTotal /proc/meminfo

MemTotal出来如果是 1000000 kB 左右,那就是接近 1G,刚好卡线;df -h要看的是可用空间(Available 列),不是已用;SwapTotal为 0 说明根本没开 Swap,得先补上。补 Swap 的常见做法是建一个 swap 文件,比如 2G:

# 创建 2G 的 swap 文件 dd if=/dev/zero of=/swapfile bs=1M count=2048 chmod 600 /swapfile mkswap /swapfile swapon /swapfile # 写入 fstab 保证开机自动挂载 echo '/swapfile swap swap defaults 0 0' >> /etc/fstab

bs=1M count=2048就是 2048 个 1M 块,合计 2G;swapon之后再用grep SwapTotal确认一次。这里有个细节:如果系统盘本身只剩 8G 出头,再切 2G 做 Swap,/u01就没多少空间放安装包和数据库文件了,所以磁盘规划要提前想好,别装到一半发现空间不够。

2.2 内核参数与 limits.conf 的对应关系

系统底子摸清后,接着调内核参数。这份笔记里给的sysctl.conf片段是精简版,核心是信号量、文件句柄和网络缓冲区:

# 编辑内核参数 vim /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 = 1048576 # 让配置立即生效 sysctl -p

kernel.sem四个数分别是信号量集合的最大数、系统级信号量最大值、每次 semop 调用最大操作数、系统级信号量最大数,Oracle 的并行进程会用到;fs.file-max是系统级文件句柄上限,配合/etc/security/limits.conf里给 oracle 用户的nofile 131072一起看——前者是天花板,后者是单个用户的配额,两个都得够。net.core.*mem*那四行是网络收发缓冲区,RAC 或大量连接场景下有用,单机测试库影响不大,但加上没坏处。

limits.conf的写法要注意用户和组的匹配:

# 编辑 oracle 用户的资源限制 vim /etc/security/limits.conf # 追加 oracle soft nproc 131072 oracle hard nproc 131072 oracle soft nofile 131072 oracle hard nofile 131072

soft 是软限制、hard 是硬限制,普通用户能把 soft 提到 hard 但超不过 hard,所以两个值设成一样最省心。改完limits.conf要重新登录 oracle 用户才生效,ulimit -n验证一下,别改完就在当前 shell 里跑安装,那样读的还是旧值。

3. 关防火墙、SELinux 与配静态 IP:别让网络层拖后腿

系统参数调完,接下来是环境层。防火墙、SELinux、静态 IP 这三件事看着琐碎,但任何一件没弄对,后面图形化安装或者客户端连接都会出问题。我见过最常见的翻车是 SELinux 没关干净,runInstaller跑到一半报权限错误,日志里一堆Permission denied,查半天才发现是 enforcing 模式在拦。

3.1 防火墙与 SELinux 的关闭顺序

先关防火墙,再处理 SELinux,顺序别反。防火墙用 systemctl 管:

# 查看状态 systemctl status firewalld.service # 停止并禁用开机自启 systemctl stop firewalld.service systemctl disable firewalld.service

stop是当前会话立即停,disable是取消开机自启,两个都要执行,只 stop 不 disable 的话重启又回来了。SELinux 分临时和永久两种关法:

# 查看当前 SELinux 状态 getenforce # 临时关闭(重启失效) setenforce 0 # 永久关闭:改配置文件 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

getenforce返回 Enforcing 说明开着,Permissive 是只记录不拦截,Disabled 是彻底关。sed那行把SELINUX=enforcing替换成SELINUX=disabled,改完必须重启才彻底生效;临时setenforce 0只能撑到下次重启。我的习惯是两步都做,先setenforce 0让当前会话不拦,再改配置文件保证重启后也是关的。

3.2 静态 IP 配置与网卡名对应

静态 IP 是为了让主机名解析稳定,也方便用客户端工具连。配置文件在/etc/sysconfig/network-scripts/下,文件名跟着网卡走,常见是ifcfg-ens33:

# 编辑网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 # 关键项 TYPE="Ethernet" BOOTPROTO="static" NAME="ens33" DEVICE="ens33" ONBOOT="yes" IPADDR="192.168.199.111" GATEWAY="192.168.199.1" NETMASK="255.255.255.0" DNS1="8.8.8.8"

BOOTPROTO从dhcp改成static是核心动作,NAME和DEVICE必须跟文件名里的网卡名一致,不一致网络起不来。IPADDR的网段要和你本地机器同网段,否则客户端工具连不上——这是笔记里特意提醒的点,很多人卡在这。改完重启网络:

service network restart

然后ip addr确认地址生效,ping一下网关通不通。主机名解析在/etc/hosts里补一行192.168.199.111 oracledb,让本机能把主机名解析到自己的 IP,Oracle 监听注册时会用到。

4. 用户组、目录权限与 RPM 依赖:安装前最容易翻车的三块

环境层弄完,进入安装准备的核心区。用户组和目录权限决定runInstaller能不能正常写文件,RPM 依赖决定预检查能不能过。这两块是整份笔记里信息密度最高的部分,也是我复现时花时间最多的地方。

4.1 用户组划分与 oracle 用户的创建

Oracle 的组不是随便建的,每个组对应一类权限。笔记里给了 8 个组,实际单机安装最常用的是oinstall(软件所有者)、dba(数据库管理)、oper(操作员)三个,其余asmdba、backupdba、dgdba、kmdba、racdba是 ASM、备份、Data Guard、RAC 场景才用得上,单机装上不影响,建了也无妨:

# 创建组,-g 指定 GID groupadd -g 5001 dba groupadd -g 5002 asmdba groupadd -g 5003 backupdba groupadd -g 5004 dgdba groupadd -g 5005 kmdba groupadd -g 5006 racdba groupadd -g 5007 oper groupadd -g 5008 oinstall # 创建 oracle 用户,-u 指定 UID,-g 主组,-G 附加组 /usr/sbin/useradd -u 54321 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle # 设置密码 passwd oracle

-g oinstall是主组,-G后面跟一串附加组,注意oinstall不在-G里重复,因为它已经是主组。UID 54321、GID 5001 这些是笔记里给的固定值,实际环境里只要不冲突就行,但多台机器做 Data Guard 时保持一致会省事。

目录创建和授权:

# 创建 Oracle 基目录 mkdir -p /u01/app/oracle/product/19.2.0/db_1 # 把 /u01 整棵树的属主改成 oracle:oinstall chown -R oracle:oinstall /u01 # 权限 775,属主和同组可读写执行 chmod -R 775 /u01

chown -R递归改属主是关键,runInstaller以 oracle 身份跑,目录属主不对就写不进去。775给组写权限,方便同组其他账号维护。

4.2 RPM 依赖的检查与补装策略

CentOS 7 和 Red Hat 7 的依赖处理方式不一样。CentOS 7 可以直接用 Oracle 提供的预安装包,它会自动把依赖拉齐:

# 进入安装包所在目录 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.rpm

yum localinstall比rpm -ivh好在会自动解析依赖,缺什么从源里补。装完用一条rpm -q批量核对:

# 批量检查依赖包是否齐全 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

输出里带not installed的就是缺的,逐个补。Red Hat 7 没有预安装包那么顺,得手动rpm -ivh装缺的、rpm -Uvh升级低版本的,笔记里列了一长串具体包名和版本,照着敲就行。这里有个血泪经验:rpm -ivh遇到依赖冲突会直接失败,别硬--nodeps强装,先把依赖顺序理清楚,否则装完runInstaller预检查照样报错。

4.3 环境变量与图形化安装的衔接

依赖齐了,切到 oracle 用户配环境变量。.bash_profile里的几个变量决定了安装程序找不找得到路径:

# 切换到 oracle 用户 su - oracle # 编辑环境变量 vi .bash_profile # 追加 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/19.2.0/db_1 export ORACLE_SID=orcl export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export LANG=C export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 # 生效 source .bash_profile

ORACLE_HOME必须和前面mkdir的路径完全一致,差一个字符runInstaller就找不到安装文件。NLS_LANG设成AL32UTF8是字符集,建库时如果这里和数据库字符集不一致,中文会乱码。LANG=C是为了让安装界面的英文不乱码,装完可以改回来。

图形化安装靠 X11 转发,DISPLAY指向你本地装了 X 工具的那台机器:

# 设置 DISPLAY,IP 是本地机器的,不是 Oracle 服务器的 export DISPLAY=192.168.199.129:0.0 # 验证 env | grep DIS # 允许远程连接 xhost +

xhost +输出access control disabled就说明通了。然后进安装目录跑runInstaller:

cd /u01/app/oracle/product/19.2.0/db_1/database ./runInstaller

界面里只选“仅安装软件”,实例等软件装完再用dbca建。装完会提示用 root 跑root.sh,路径照抄执行。最后用netca建监听、dbca建实例,整个流程才算闭环。

5. 避坑清单:五个真实翻车点与排查路径

装 Oracle 这件事,步骤本身不难,难的是每一步的失败信号不明显。下面五个坑是我和周围人实际踩过的,按“现象 → 原因 → 解决”记下来,照着对能省不少时间。

坑一:runInstaller启动后闪退,日志无明确报错。现象是敲完命令界面一闪就没了,/tmp/OraInstall*日志里只有一行Can't connect to X11 window server。原因是DISPLAY没设对,或者本地 X 工具没允许远程连接。解决是先env | grep DIS确认变量存在且 IP 是本地机器,再在本地 X 工具里执行xhost +,两边都通了再跑安装。

坑二:预检查报Physical memory不足,但free -h看着够。现象是runInstaller预检查阶段内存项打叉。原因是 Oracle 检查的是MemTotal减去内核占用后的可用值,1G 物理内存卡线时容易不过。解决是临时加 Swap 或者给虚拟机加内存到 1.5G 以上,别在 1G 上硬扛。

坑三:root.sh执行报Failed to create /etc/oraInst.loc。现象是 root 跑脚本时权限错误。原因是/u01或/etc下相关文件属主不对,或者之前装过残留了旧文件。解决是先ls -l /etc/oraInst.loc看属主,有残留就清掉重跑,别直接chmod 777糊弄。

坑四:netca建监听后客户端连不上。现象是监听状态READY,但远程tnsping不通。原因是防火墙没关干净,或者listener.ora里绑的是localhost而不是实际 IP。解决是systemctl status firewalld确认已停,再检查listener.ora的HOST项改成主机名或实际 IP。

坑五:建库时字符集选错,中文存进去变问号。现象是dbca建完实例,插入中文显示乱码。原因是建库时字符集选了默认的WE8MSWIN1252而不是AL32UTF8。解决是建库那一步手动指定字符集为AL32UTF8,和.bash_profile里的NLS_LANG保持一致,已经建错的只能重建实例。

6. 装完之后怎么验证:三条命令确认这套库真能用

装完不等于能用,我习惯用三条命令做收尾验证,分别确认实例、监听和字符集。第一条看实例状态:

# 以 oracle 用户执行,确认实例已启动 sqlplus / as sysdba SQL> select status from v$instance;

返回OPEN才算正常,MOUNTED说明实例没完全起来,得看告警日志。第二条看监听:

# 查看监听状态和注册的服务 lsnrctl status

输出里要能看到orcl这个服务名,READY状态。如果服务没注册上,alter system register;手动注册一次。第三条验证字符集:

# 查数据库字符集 SQL> select value from nls_database_parameters where parameter='NLS_CHARACTERSET';

返回AL32UTF8就对了。三条都过,再拿客户端工具连一次,建张表插条中文数据,能正常读出来才算真正闭环。

这套步骤我前后复现过几次,最大的体会是:Oracle 安装的坑八成不在runInstaller本身,而在它前面的系统准备。内存、Swap、SELinux、依赖包、目录权限,任何一项偷懒,后面都会以看不懂的报错形式还回来。从那以后我每次装库前都强制把第 2 章到第 4 章的检查项走一遍,宁可多花十分钟核对,也不愿在图形界面卡两小时。希望这份拆解帮到你,照着走能少翻几次车。

本文还有配套的精品资源,点击获取