简介:这份文档面向需要在 CentOS 7 或 Red Hat 7 上部署 Oracle 19C 的数据库运维人员与初学者,系统梳理了从环境准备到安装落地的完整流程,涵盖内存、硬盘与 Swap 分区检查,防火墙、图形桌面与 selinux 的关闭,静态 IP 与主机名配置,以及 dba、asmdba、oinstall 等用户组的创建和 oracle 用户环境变量、limits.conf、sshd_config 的调整,帮助读者避开常见配置陷阱。资源包共 1 个 docx 文件,约 2.99MB,以图文步骤与命令示例为主,便于对照终端逐条执行。目前已有 17396 人学习下载,适合作为搭建测试库或生产环境前的操作手册,也可用于排查网络、权限与内核参数相关问题。
1. 装 Oracle 19C 前,先把这台 CentOS 7 的底子摸清楚
上周帮一位同事收拾一台装到一半的数据库服务器,机器上 Oracle 19C 的安装包已经解压,runInstaller也点开了,结果卡在 prerequisite checks 那一屏,红叉一片。翻回去看,内存 1G 刚够、Swap 只有 512M、/u01挂载点压根没建、oracle用户的nofile还是默认的 1024。这种翻车不是安装程序的问题,是前面系统准备没做透。Oracle 19C 在 Linux 上的安装,真正花时间的从来不是图形界面点下一步,而是装之前的系统要求核对、防火墙与 SELinux 处理、用户组和内核参数配置。这篇笔记按 CentOS 7 和 Red Hat 7 两条线走一遍,把版本选择、命令参数、装坏了怎么救都写清楚,适合第一次在 Linux 上落 Oracle 19C 的开发者,也适合想核对一遍自己那套准备脚本有没有漏项的老手。
2. 系统要求核对与基础环境准备:内存、Swap、磁盘三笔账
2.1 三条硬指标怎么查、差一点怎么办
Oracle 19C 对宿主机的最低要求写在官方文档里,但实际部署时我一般会按「最低值再留一点余量」来卡。原文给的三条是物理内存不小于 1G、可用硬盘不小于 8G、Swap 不小于 2G,这三条先用命令确认,别凭感觉。
# 查看物理内存总量,单位 KB grep MemTotal /proc/meminfo # 查看各挂载点磁盘使用与剩余空间 df -h # 查看 Swap 总量 grep SwapTotal /proc/meminfoMemTotal出来如果是 1000000 KB 左右,那就是 1G 刚踩线,能装但跑起来会很紧,我一般会建议加到 2G 以上再动手。df -h重点看准备放 Oracle 的那个分区,/u01后面要装软件加建库,8G 是底线,实际留 15G 以上更稳。SwapTotal不足 2G 时不用重装系统,补一个 swap 文件就行:
# 创建一个 2G 的 swap 文件 dd if=/dev/zero of=/swapfile bs=1M count=2048 # 格式化为 swap mkswap /swapfile # 启用 swapon /swapfile # 写入 fstab 保证开机自动挂载 echo "/swapfile swap swap defaults 0 0" >> /etc/fstabdd的bs=1M count=2048就是 2048 个 1M 块,凑出 2G;mkswap做格式化,swapon立即生效,最后那行 fstab 是后悔药,不加的话重启后 swap 又没了。这里有个容易忽略的点:如果系统本身已经有一个小的 swap 分区,新加的 swap 文件是叠加的,SwapTotal会变成两者之和,够 2G 即可,不必删旧的。
2.2 关防火墙、关 SELinux、图形桌面按需处理
防火墙和 SELinux 是安装阶段最常见的两个拦路虎。防火墙会挡掉后面监听端口和图形化连接,SELinux 则可能在文件权限上制造一堆看不懂的拒绝。
# 查看 firewalld 状态 systemctl status firewalld.service # 停止并禁止开机自启 systemctl stop firewalld.service systemctl disable firewalld.servicestop是当前这次关掉,disable是取消开机自启,两条都要执行,只做前者重启就复活。生产环境如果安全策略不允许彻底关防火墙,那就改成放行 1521 等端口,但安装调试阶段我一般先关,装完再按需收紧。
SELinux 分临时和永久两种关法:
# 查看当前 SELinux 状态 getenforce # 临时关闭,重启失效 setenforce 0 # 永久关闭,改配置文件 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/configgetenforce返回Enforcing就是开着,setenforce 0立刻变Permissive,但重启后按配置文件来,所以必须改/etc/selinux/config里的SELINUX=disabled。注意sed这条只匹配enforcing,如果原文件是permissive就替换不到,改完用grep SELINUX /etc/selinux/config复核一眼。
图形桌面这块原文说「看环境是否需要,一般忽略」,我的做法是:如果服务器本来就跑命令行,保持multi-user.target不动;如果为了跑runInstaller需要图形,那也不是把服务器切成图形模式,而是用 Xmanager 这类工具把图形转发过来,服务器端仍然是命令行。切换运行级别的命令留作备用:
# 查看当前默认运行级别 systemctl get-default # 切到命令行模式 systemctl set-default multi-user.target # 切到图形模式 systemctl set-default graphical.target2.3 静态 IP 与主机名:网卡名对不上是最常见的坑
Oracle 安装和后续客户端连接都依赖一个稳定的 IP 和主机名。改静态 IP 前先确认网卡文件名,ifcfg-ens33只是示例,实际可能是ifcfg-ens32、ifcfg-eth0。
# 编辑网卡配置,文件名按实际来 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选网段时注意和你自己电脑同网段,否则用 Xshell 连不上。改完重启网络:
service network restart主机名初始化改/etc/hosts,把 IP 和主机名绑上:
vi /etc/hosts # 添加一行 192.168.199.111 oracledb这一步看着简单,但后面runInstaller校验主机名、监听配置都会读它,漏了会在安装中途报主机名解析失败。
3. 用户组、内核参数与依赖包:装 Oracle 前必须落地的配置
3.1 创建 oracle 用户与用户组,权限一次给对
Oracle 不允许用 root 跑安装,必须建独立的oracle用户并归到一组 dba 类用户组里。原文给的组和 GID 我照抄,这套编号在单机部署里够用。
# 创建安装 Oracle 所需的用户组 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 用户,主组 oinstall,附加组带上其余 /usr/sbin/useradd -u 54321 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle # 设置密码 passwd oracle-u 54321是 Oracle 惯用的 UID,-g oinstall是主组,-G后面跟附加组。组建完再建目录并授权:
mkdir -p /u01/app/oracle/product/19.2.0/db_1 chown -R oracle:oinstall /u01 chmod -R 775 /u01chown -R把整个/u01归给 oracle,775保证组内可写。这里如果只 chown 了db_1而漏了上层/u01,后面安装程序写 inventory 时会报权限不足。
3.2 limits.conf、sshd_config、profile 与 sysctl 四处修改
这四处是 Oracle 安装的固定动作,改错任何一处都可能在安装校验或运行期出问题。
先改/etc/security/limits.conf,放开 oracle 用户的进程数和文件句柄:
vi /etc/security/limits.conf # 添加 oracle soft nproc 131072 oracle hard nproc 131072 oracle soft nofile 131072 oracle hard nofile 131072soft是软限制、hard是硬限制,nproc是进程数、nofile是打开文件数。131072 这个值对 19C 够用,改完重新登录 oracle 用户才生效,ulimit -n验证。
再改/etc/ssh/sshd_config,关掉 GSSAPI 认证和 DNS 反查,避免安装时连接慢或超时:
vi /etc/ssh/sshd_config # 修改为 GSSAPIAuthentication no UseDNS no然后改/etc/profile,给 oracle 用户加 ulimit:
vi /etc/profile # 添加 if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi这段是登录时按用户判断,ksh和bash分支不同,别写混。最后改内核参数/etc/sysctl.conf:
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 对这几个值有明确要求。改完执行:
sysctl -p-p是重新加载配置文件,输出里能看到每个参数被应用,有报错就说明某行写错了。
3.3 依赖包:CentOS 7 走 preinstall,Red Hat 7 手工补
CentOS 7 上最省事的做法是用 Oracle 官方的 preinstall 包,它会把依赖和用户组、内核参数一并处理掉。把两个 rpm 传到/u01/下:
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 的依赖,比裸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输出里带not installed的就是缺的,补装用rpm -ivh,版本低了用rpm -Uvh升级。Red Hat 7 没有 preinstall 包那么顺,得手工补,原文列的那串 rpm 我按依赖顺序整理成表更清楚:
| 包名 | 作用 | 安装方式 |
|---|---|---|
| kernel-headers | 内核头文件 | rpm -ivh |
| glibc-headers / glibc-devel | C 库开发头文件 | rpm -ivh |
| libmpc / cpp / gcc / gcc-c++ | 编译工具链 | rpm -ivh |
| ksh | Korn Shell | rpm -ivh |
| compat-libcap1 | 兼容库 | rpm -ivh |
| libaio-devel / libstdc++-devel | 异步 IO 与标准库开发包 | rpm -ivh |
| kmod / kmod-libs | 内核模块工具 | rpm -Uvh 升级 |
Red Hat 7 上还有个历史坑:自带 yum 可能因为订阅问题不可用,原文备注里给了替换成 CentOS 7 yum 的做法,但那套--nodeps --force强装风险不小,我一般优先修订阅或配本地源,实在不行才动 yum 本身,动之前先rpm -qa | grep yum记下现有版本,出问题好回退。
4. 安装 Oracle 19C 软件与建库:环境变量、图形化与监听
4.1 oracle 用户环境变量与安装包解压
切到 oracle 用户,改它自己的.bash_profile:
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.AL32UTF8ORACLE_BASE是根目录,ORACLE_HOME是软件目录,ORACLE_SID是实例名,NLS_LANG设成AL32UTF8避免中文乱码。改完source ~/.bash_profile生效,用echo $ORACLE_HOME确认。
安装包以 oracle 用户上传到$ORACLE_HOME下解压:
cd $ORACLE_HOME unzip V982063-01.zip解压后会出现database目录,runInstaller就在里面。
4.2 图形化转发与 runInstaller 执行
服务器没有桌面,靠 Xmanager 把图形转过来。在 oracle 用户下设置 DISPLAY:
export DISPLAY=192.168.199.129:0.0 env | grep DIS192.168.199.129是你本地装了 Xmanager 那台机器的 IP,不是 Oracle 服务器 IP,这点原文特意标了,写反了图形出不来。然后在本地 Xmanager 的 Passive 里执行xhost +,看到access control disabled就通了。接着启动安装:
cd $ORACLE_HOME/database ./runInstaller图形界面里只选「仅安装软件」,实例等软件装完再单独建,这样出问题好定位。安装到最后会提示用 root 执行两个脚本,按提示路径跑:
/u01/app/oracle/product/19.2.0/db_1/root.shroot.sh会配置一些系统级文件和权限,必须 root 跑,跑完回图形界面点 OK 收尾。
4.3 建监听与建实例
软件装完,用 oracle 用户跑netca建监听:
netca图形里选「监听程序配置」→ 新建 → 默认端口 1521 → 完成。监听起来后用lsnrctl status确认。建实例用dbca:
dbca选「创建数据库」,SID 填orcl,字符集选AL32UTF8,其余按向导走。建完用sqlplus / as sysdba登录,select status from v$instance;返回OPEN就算成了。
5. 避坑排查:装 Oracle 19C 最容易翻车的五个地方
5.1 现象:runInstaller 校验报内存或 Swap 不足
原因多半是MemTotal或SwapTotal刚踩线,或者 swap 文件加了没写 fstab 重启丢了。解决:按 2.1 补 swap 文件并写 fstab,内存实在不够就加内存条或调大虚拟机内存,别硬扛。
5.2 现象:图形界面弹不出来,DISPLAY 设置后仍报错
原因通常是DISPLAY写成了服务器自己的 IP,或者本地 Xmanager 没执行xhost +。解决:DISPLAY必须是本地图形机 IP,xhost +在本地执行,两边网络要通,防火墙别挡。
5.3 现象:root.sh 执行报权限或路径错误
原因多是/u01上层目录没 chown 给 oracle,或者ORACLE_HOME路径和环境变量不一致。解决:回 3.1 重新chown -R oracle:oinstall /u01,核对.bash_profile里的ORACLE_HOME和实际解压路径是否一字不差。
5.4 现象:建库时字符集选错,中文存进去乱码
原因是建库时没选AL32UTF8,或者NLS_LANG和库字符集不匹配。解决:建库阶段就定AL32UTF8,环境变量NLS_LANG=AMERICAN_AMERICA.AL32UTF8,已经建错的只能重建库,这个没有后悔药。
5.5 现象:监听起来了但客户端连不上
原因可能是防火墙没关干净、监听没注册服务、或者tnsnames配错。解决:systemctl status firewalld确认关了,lsnrctl status看服务是否注册,客户端tnsping测通断,逐层排。
6. 装完怎么验证:三条命令确认这套 Oracle 19C 真跑起来了
装完不验证等于没装。我一般按「实例状态 → 监听状态 → 实际连一次」三步走,每条都有明确的预期输出,对不上就回对应章节查。
第一步,确认实例是 OPEN 状态:
su - oracle sqlplus / as sysdba SQL> select instance_name, status from v$instance;预期输出ORCL和OPEN。如果是MOUNTED或STARTED,说明库没完全起来,startup一下再看。
第二步,确认监听在跑且服务已注册:
lsnrctl status输出里要能看到LISTENER在READY状态,下面Service "orcl"有实例信息。只有监听没有服务,多半是实例没注册,alter system register;手动注册一次。
第三步,用普通连接实际查一次,别只用as sysdba本地连:
sqlplus system/你的密码@orcl SQL> select sysdate from dual;能返回当前日期,说明监听、实例、认证整条链路都通了。再顺手看一眼字符集:
SQL> select value from nls_database_parameters where parameter='NLS_CHARACTERSET';返回AL32UTF8才算字符集这关过了。
| 验证项 | 命令 | 预期结果 |
|---|---|---|
| 实例状态 | select status from v$instance | OPEN |
| 监听状态 | lsnrctl status | LISTENER READY,服务已注册 |
| 实际连接 | sqlplus system/密码@orcl | 能查 dual 返回日期 |
| 字符集 | 查 nls_database_parameters | AL32UTF8 |
这套验证我吃过亏:有一次实例 OPEN、监听 READY,但客户端连不上,最后发现是tnsnames.ora里主机名写成了localhost而客户端在另一台机器。从那以后我每次装完都强制走一遍「本地 sysdba + 远程普通用户」双连接,两个都通才敢交付。希望这套步骤能帮到你,少在准备阶段返工。
本文还有配套的精品资源,点击获取