简介:面向需要在 CentOS 7 或 Red Hat 7 上部署 Oracle 19C 的数据库运维与实施人员,这份文档型资料把安装前的环境准备与系统调优整理成可对照执行的清单,覆盖内存、硬盘与 Swap 分区检查,防火墙、图形桌面与 selinux 的关闭,静态 IP 与主机名配置,以及 dba、asmdba、oinstall 等用户组的创建和 oracle 用户环境变量、limits.conf、sshd_config 的修改,适合初中级 DBA 按步骤落地。资源包共 1 个 docx 文件,约 2.99MB,以图文与命令片段结合的方式呈现,便于边看边操作。目前已有 17396 人学习下载,可作为搭建 Oracle 19C 实验环境、排查安装前置问题的参考手册,帮助读者减少因系统参数遗漏导致的安装失败,快速完成从裸机到可安装状态的准备。
1. 装 Oracle 19C 前,先把这台机器“驯服”
很多人第一次在 Linux 上装 Oracle 19C,卡住的地方往往不是runInstaller那一步,而是前面一堆“看起来无关”的系统配置:内存不够、Swap 太小、SELinux 没关、静态 IP 配错网段、/etc/hosts和主机名对不上。等到图形界面弹出来,才发现环境根本没准备好,只能重装系统再来一遍。这份步骤文档的价值就在这儿——它把 CentOS 7 / Red Hat 7 上装 Oracle 19C 的前置条件、用户组、内核参数、RPM 依赖和图形化安装串成了一条能照着走的线。适合谁?适合手里有一台干净 Linux 虚拟机、需要把 Oracle 19C 单实例跑起来做开发或测试的从业者;也适合刚接触 Oracle 安装、想先跑通一遍完整流程的新手。下面按“先立环境、再装软件、最后建库”的顺序拆开讲,参数和坑都落到具体命令上。
2. 系统底座:内存、Swap、SELinux 与静态 IP 的硬性门槛
装 Oracle 19C 之前,系统底座必须先过一遍。这一步不是走形式,后面runInstaller报的很多错,根子都在这里。常见做法是先把内存、Swap、磁盘、防火墙、SELinux、静态 IP、主机名这几项一次性处理干净,再往下走用户和组。
2.1 资源检查:三条命令先摸清家底
文档给的门槛是物理内存不小于 1G、可用硬盘不小于 8G、Swap 不小于 2G。实际做的时候,1G 内存只是“能启动安装程序”的底线,图形化安装加建库,1G 会非常吃力,我一般会直接给到 4G 以上,Swap 给 4G 到 8G,省得后面被 OOM 打断。先跑这三条命令确认现状:
# 查看物理内存总量,单位 kB grep MemTotal /proc/meminfo # 查看各分区可用空间,重点看 / 和 /u01 所在盘 df -h # 查看 Swap 总量 grep SwapTotal /proc/meminfoMemTotal换算成 GB 就是物理内存;df -h里看Avail列,/u01规划的那块盘至少留 8G 以上,实际装完软件加建库,20G 起步更稳;SwapTotal小于 2G 就要补 Swap 分区或 Swap 文件。参数上不用纠结文档里的最小值,那是下限不是推荐值,内存和 Swap 给足,后面建库阶段少一次翻车。
2.2 防火墙、SELinux 与运行级别:该关的关干净
防火墙和 SELinux 是安装阶段最常见的“玄学”来源。文档的做法是先看状态再关服务,SELinux 用sed改配置文件做永久关闭。照着做:
# 查看 firewalld 状态 systemctl status firewalld.service # 停止并禁止开机启动 systemctl stop firewalld.service systemctl disable firewalld.service # 临时关闭 SELinux(当前会话生效) setenforce 0 # 永久关闭 SELinux,改配置文件 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 确认 SELinux 当前状态 getenforcesetenforce 0只对当前运行状态生效,重启后如果配置文件还是enforcing,SELinux 会回来,所以sed改/etc/selinux/config这一步不能省。改完用getenforce确认输出Permissive或Disabled。运行级别这块文档说“看环境是否需要”,如果服务器不需要图形桌面,可以切到multi-user.target;但注意,Oracle 图形化安装需要图形环境,要么本机有桌面,要么用 X11 转发把安装界面投到本地机器上,别把图形能力关没了又回头找原因。
2.3 静态 IP 与 hosts:网段对不上,后面全白搭
静态 IP 配置直接决定你后面能不能用工具连上这台机器、图形化安装能不能正常回显。文档里特别提醒IPADDR的网段最好和自己电脑网段一致,否则远程连接工具可能连不上。编辑网卡配置文件:
# 网卡文件名以实际为准,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必须和文件名里的网卡名一致,不一致会出现“配置写了但不生效”的情况;ONBOOT="yes"保证开机拉起网卡。改完保存,接着配主机名映射:
# 把 IP 和主机名绑定,主机名要和后面 Oracle 环境里的保持一致 vi /etc/hosts加入一行192.168.199.111 oracledb,然后重启网络服务:
service network restart/etc/hosts里这条记录不是可有可无,Oracle 安装和监听配置都会解析主机名,主机名和 IP 对不上,后面netca建监听时容易出解析类报错。网段这件事属于血泪经验:虚拟机网卡模式、宿主机网段、IPADDR三者要对齐,别配完发现远程工具连不上,又回头怀疑防火墙。
3. 用户、内核参数与 RPM 依赖:安装前的“地基工程”
系统底座过了,接下来是 Oracle 安装真正的地基:专用用户和组、目录权限、limits.conf、内核参数、RPM 依赖。这一层做不扎实,runInstaller的预检查会一条条给你亮红灯。
3.1 建组建用户:ID 和目录权限一次到位
文档给的组 ID 从 5001 到 5008,用户oracle的 UID 是 54321,主组oinstall,附加组把dba、asmdba、backupdba、dgdba、kmdba、racdba、oper都带上。照着执行:
# 创建 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 用户,指定 UID、主组和附加组 /usr/sbin/useradd -u 54321 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle # 设置 oracle 用户密码 passwd oracle组 ID 和用户 ID 不是随便写的,固定 ID 在多台机器做一致性管理时有用;单机测试照抄即可。接着建 Oracle 基础目录并授权:
# 创建 ORACLE_HOME 对应目录 mkdir -p /u01/app/oracle/product/19.2.0/db_1 # 把 /u01 归属给 oracle:oinstall chown -R oracle:oinstall /u01 # 给足目录权限 chmod -R 775 /u01chown和chmod这两步别漏,runInstaller以oracle用户运行,目录属主不对会在安装早期就报权限错误。775是文档给的权限,实际单机环境够用;如果后面要加其他运维账号进oinstall组,组权限这一层就体现出来了。
3.2 limits、sshd 与内核参数:预检查的重点区域
/etc/security/limits.conf控制用户级资源限制,Oracle 安装预检查会看nproc和nofile。文档给的是 131072,直接追加:
# 编辑 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是硬限制,软限制不能超过硬限制,两行都写 131072 是常见做法。接着改sshd_config,把GSSAPIAuthentication改成no、UseDNS改成no,减少远程连接时的解析等待。然后改/etc/profile里的ulimit段,文档给的是按$USER判断、按$SHELL分支设置,照抄即可。内核参数在/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 -psysctl -p的输出会逐条回显加载的参数,有报错会直接打出来,别跳过这步直接装。
3.3 RPM 依赖:preinstall 包能省一半事
文档把 RPM 依赖分成 CentOS 7 和 Red Hat 7 两条线。CentOS 7 上先上传oracle-database-preinstall-19c和oracle-database-ee-19c两个包到/u01/,用yum localinstall安装:
cd /u01/ # 先装 preinstall 包,它会自动拉齐大部分依赖 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.rpmpreinstall包的作用就是替你装依赖、建用户组、调部分内核参数,能省掉大量手工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的就是缺的,缺什么补什么,用rpm -ivh装、低版本用rpm -Uvh升。Red Hat 7 那条线文档给了更细的逐个包安装命令,包括kernel-headers、glibc-headers、glibc-devel、libmpc、cpp、gcc、ksh、compat-libcap1、libaio-devel、libstdc++-devel、gcc-c++,以及kmod、kmod-libs的升级。这里有个容易忽略的点:rpm -ivh和rpm -Uvh别混用,已经装了低版本还硬-ivh会冲突,该升级就用-Uvh。文档里还附了一段替换 yum 源的操作,属于特定环境下的补救手段,不是必做项,环境里 yum 正常就别动它。
4. 安装 Oracle 软件与建库:环境变量、图形化与监听
地基打完,进入安装主体。这一段的顺序是:配oracle用户环境变量、解压安装包、配图形化回显、跑runInstaller、执行root.sh、最后用netca建监听、建实例。
4.1 环境变量与安装包解压
切到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设成AMERICAN_AMERICA.AL32UTF8是常见做法,避免中文环境下的字符集问题。改完source ~/.bash_profile生效。然后以oracle用户把安装包上传到$ORACLE_HOME下解压:
cd /u01/app/oracle/product/19.2.0/db_1 unzip V982063-01.zip解压后会出现database目录,runInstaller就在里面。
4.2 图形化回显与 runInstaller
图形化安装的关键是DISPLAY指向你本地装了 X 工具的机器,不是 Oracle 服务器自己的 IP。文档里写得很直白:export DISPLAY=192.168.199.129:0.0里的 IP 是本地机器的地址。设置后验证:
export DISPLAY=192.168.199.129:0.0 env | grep DIS xhost +xhost +出现access control disabled, clients can connect from any host说明图形回显通了。然后进database目录执行安装:
cd /u01/app/oracle/product/19.2.0/db_1/database ./runInstaller安装界面里文档建议只选“安装软件”,实例等软件装完再单独建,这样出问题好定位。软件装到最后会提示以root执行root.sh:
/u01/app/oracle/product/19.2.0/db_1/root.shroot.sh负责配置一些需要 root 权限的组件,路径按安装界面提示的复制,别手敲错。
4.3 netca 建监听与实例创建
软件装完,以oracle用户跑netca建监听:
netca图形界面里按默认下一步即可,监听端口默认 1521。监听建好后,再用dbca建实例,实例名和ORACLE_SID保持一致。这一步文档只写到netca界面,实际建库用dbca图形化走一遍,字符集选AL32UTF8,和前面NLS_LANG对齐。建完用lsnrctl status看监听状态、用sqlplus / as sysdba连进去确认实例起来了,整条链路才算闭环。
5. 避坑排查:装 Oracle 19C 最容易翻车的五处
5.1 预检查报内存或 Swap 不足
现象:runInstaller预检查阶段直接亮红,提示物理内存或 Swap 不满足。原因:文档给的是 1G 内存、2G Swap 的下限,图形化安装加建库实际消耗远高于此。解决:装之前就把内存加到 4G 以上、Swap 补到 4G 到 8G,别等预检查报错再回头改虚拟机配置。
5.2 图形界面弹不出来
现象:./runInstaller执行后没反应,或者报Can't connect to X11 window server。原因:DISPLAY指向了服务器自己的 IP,或者本地 X 工具没放行。解决:DISPLAY必须指向你本地机器的 IP,先xhost +放行,再用env | grep DIS确认变量生效;本地防火墙也要允许 X11 回连。
5.3 主机名解析失败导致监听异常
现象:netca建监听时报主机名解析错误,或者监听起来了但连不上。原因:/etc/hosts里没有 IP 和主机名的映射,或者主机名和ORACLE_SID环境不一致。解决:确认/etc/hosts有IP 主机名这一行,hostname命令输出和这行一致,改完重启网络服务再建监听。
5.4 RPM 依赖装不全反复报缺包
现象:预检查反复提示缺某个libaio或compat-libcap1包。原因:只装了preinstall包但没核对,或者 Red Hat 环境下包版本不匹配。解决:用rpm -q批量核对文档给的包列表,缺的用rpm -ivh补、低版本用rpm -Uvh升,别用--nodeps硬绕,绕过去后面运行期还会出问题。
5.5 root.sh 执行报错或路径不对
现象:软件装完提示执行root.sh,执行后报错或部分组件没配好。原因:路径复制错,或者用oracle用户执行了。解决:root.sh必须用root执行,路径从安装界面提示里原样复制,执行完回安装界面点 OK 继续,别提前关窗口。
6. 装完别急着建库:用一条查询验证字符集和监听闭环
软件装完、监听建好,很多人直接开dbca建库,建完发现字符集不对或者监听连不上,又得删库重来。我的习惯是建库前先把环境验证一遍,建库后再用一条查询确认字符集落地。先看监听:
# 确认监听已启动,端口 1521 在听 lsnrctl status输出里能看到监听进程和服务名,Service "orcl" has 1 instance(s)这类信息说明注册正常。建库后连进去查字符集:
-- 以 sysdba 身份连入,查数据库字符集和国家字符集 sqlplus / as sysdba SELECT parameter, value FROM nls_database_parameters WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');NLS_CHARACTERSET应该是AL32UTF8,和.bash_profile里的NLS_LANG对齐;NLS_NCHAR_CHARACTERSET一般是AL16UTF16。这两个值不对,后面导入中文数据就是一堆问号,属于建库阶段就该拦住的问题。再补一条环境自检:
# 确认 ORACLE_HOME、ORACLE_SID 等变量在 oracle 用户下生效 su - oracle -c 'echo $ORACLE_HOME; echo $ORACLE_SID'输出和.bash_profile里写的一致,说明环境变量没有因为切换用户丢失。这套验证动作花不了几分钟,但能挡住“装完了却连不上、字符集错了却不知道”这类后悔药都来不及吃的问题。从那以后我每次装完 Oracle,不管多急,都强制先跑一遍lsnrctl status加字符集查询,确认监听和字符集都对上,再往下做业务建表。希望帮到你。
本文还有配套的精品资源,点击获取