03-Linux环境准备依赖包内核参数与用户组

文章目录

一、场景切入

在 Linux 上装 Oracle,报错最多的环节往往不是安装本身,而是安装前的环境准备:依赖包缺一个、内核参数不够、用户组没建对,都会在 OUI 先决检查或安装中后期爆出来。把环境准备做扎实,安装基本就是"下一步"的事。这篇以 RHEL/CentOS 7 + Oracle 19c 为例,把准备工作完整过一遍。

二、用户与用户组

Oracle 不允许用 root 安装和运行,需要专用的操作系统用户与组。

2.1 创建组与用户

bash 复制代码
# 以 root 执行
groupadd -g 1000 oinstall
groupadd -g 1200 dba
groupadd -g 1201 oper

useradd -u 1100 -g oinstall -G dba,oper oracle
passwd oracle
  • oinstall:inventory 组,管理 Central Inventory(/etc/oraInst.loc 里的 inst_group)
  • dba:SYSDBA 系统权限对应的 OS 组,oracle 用户靠它实现 sqlplus / as sysdba 免密登录
  • oper:可选,对应 SYSOPER 权限

2.2 验证

bash 复制代码
id oracle
复制代码
uid=1100(oracle) gid=1000(oinstall) groups=1000(oinstall),1200(dba),1201(oper)

三、目录规划

约定俗成的 OFA(Optimal Flexible Architecture)布局,根目录放在 /u01:

bash 复制代码
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1
mkdir -p /u01/app/oraInventory
chown -R oracle:oinstall /u01
chmod -R 775 /u01

目录含义:

  • /u01/app/oracle:ORACLE_BASE,日志、诊断数据、数据文件默认都在它的子目录下
  • /u01/app/oracle/product/19.3.0/dbhome_1:ORACLE_HOME,软件本体,升级时新建 dbhome_2 并存,回退方便
  • /u01/app/oraInventory:Central Inventory,记录本机所有 Oracle 产品的安装信息

单独一块盘挂 /u01 是常见做法,便于空间管理与备份隔离。

四、内核参数

4.1 /etc/sysctl.conf

以 8GB 物理内存、4096 字节页大小为例:

bash 复制代码
cat >> /etc/sysctl.conf <<'EOF'
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.shmall = 4294967296
kernel.shmmax = 1073741824
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65535
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 4194304
vm.swappiness = 1
EOF

sysctl -p

参数说明:

  • kernel.shmmax:单个共享内存段最大字节数。8G 内存的机器,SGA 计划 2G 时,给 2147483648(2G)即可;常见做法是给到物理内存的一半,这里给 1G 是保守示例,按实际调整
  • kernel.shmall:共享内存总页数。总量(字节)除以页大小,1073741824/4096 = 262144;上面示例按 4G 共享内存总量折算为 4294967296/4096?注意 shmall 单位是页,直接写 4294967296 表示页,远大于需要,一般写 2097152(8G 字节/4096)也够,保守可按"物理内存字节/2/4096"计算
  • kernel.sem:四个值依次是 SEMMSL(每集合信号量数)、SEMMNS(系统总量)、SEMOPM(每次操作数)、SEMMNI(集合数)
  • fs.aio-max-nr:异步 IO 请求数上限
  • net.core.*:网络缓冲,影响大数据量传输

如果不确定页大小,先查:

bash 复制代码
getconf PAGE_SIZE

4.2 RHEL 系参数验证

bash 复制代码
sysctl kernel.shmmax kernel.shmall kernel.sem

输出与配置一致即可。

五、资源限制:/etc/security/limits.conf

bash 复制代码
cat >> /etc/security/limits.conf <<'EOF'
oracle soft nproc   2047
oracle hard nproc   16384
oracle soft nofile  1024
oracle hard nofile  65536
oracle soft stack   10240
oracle hard stack   32768
EOF
  • nproc:进程数上限,数据库进程多,必须放宽
  • nofile:文件句柄上限,数据文件、连接都吃句柄
  • stack:栈大小,过小会导致安装或运行异常

oracle 用户重新登录后验证:

bash 复制代码
su - oracle
ulimit -u
ulimit -n

六、依赖包

6.1 yum 安装

bash 复制代码
yum install -y bc binutils compat-libcap1 elfutils-libelf \
  elfutils-libelf-devel fontconfig-devel glibc glibc-devel \
  ksh libaio libaio-devel libX11 libXau libXi libXtst \
  libgcc libstdc++ libstdc++-devel libxcb make \
  net-tools smartmontools sysstat nfs-utils \
  unixODBC unixODBC-devel

RHEL 7 上 compat-libstdc++-33 在常规源里没有,需要从安装镜像的 rpm 目录补:

bash 复制代码
rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

Oracle Linux 用户更省事,官方提供了预配置包,一步完成用户、内核参数、依赖:

bash 复制代码
yum install -y oracle-database-preinstall-19c

6.2 验证

bash 复制代码
rpm -q bc binutils compat-libcap1 ksh libaio libaio-devel \
  libstdc++ libstdc++-devel sysstat unixODBC unixODBC-devel

全部显示版本号、无 "is not installed" 即通过。

七、SELinux 与防火墙

安装和日常使用阶段先关闭,减少干扰;生产环境再按安全要求收紧端口策略。

bash 复制代码
# 关闭 SELinux
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
getenforce
复制代码
Disabled
bash 复制代码
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

八、主机名与 /etc/hosts

OUI 会做主机名解析检查,解析失败直接卡在先决条件。

bash 复制代码
hostname

假设输出 oradb、IP 是 192.168.56.50,写入 hosts:

bash 复制代码
echo "192.168.56.50 oradb" >> /etc/hosts

验证,返回真实 IP 而不是 127 开头:

bash 复制代码
ping -c 2 oradb
hostname -i

九、oracle 用户环境变量

切到 oracle 用户,编辑 ~/.bash_profile:

bash 复制代码
su - oracle
vi ~/.bash_profile

追加以下内容:

bash 复制代码
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
umask 022

生效并验证:

bash 复制代码
source ~/.bash_profile
echo $ORACLE_HOME
复制代码
/u01/app/oracle/product/19.3.0/dbhome_1

十、解压安装介质

19c 的介质是单个 zip,直接解压到 ORACLE_HOME(19c 要求家目录提前建好、介质解压进去):

bash 复制代码
cd $ORACLE_HOME
unzip -q /tmp/LINUX.X64_193000_db_home.zip
ls runInstaller

确保解压用的是 oracle 用户,否则要用 chown 改回属主。

十一、装前自检清单

bash 复制代码
id oracle                          # 用户与组正确
df -h /u01 /tmp                    # 空间充足(/tmp 至少 1G 可用)
sysctl kernel.shmmax kernel.sem    # 内核参数已生效
su - oracle -c "ulimit -n"         # 句柄限制已放宽
getenforce                         # Disabled
cat /etc/hosts | grep oradb        # 主机名可解析

全部通过后,就可以进入安装环节(图形或静默),后面的文章分别展开。

十二、要点总结

  • 专用用户与组:oinstall 管 inventory,dba 决定 as sysdba 免密
  • 目录按 OFA 规划到 /u01/app,ORACLE_HOME 带版本号,升级可并存
  • 内核参数重点:shmmax/shmall 管共享内存,sem 管信号量,aio-max-nr 管异步 IO,改完 sysctl -p 生效
  • limits.conf 放宽 nproc/nofile/stack,重登录后用 ulimit 验证
  • 依赖包用 yum 一次装齐,Oracle Linux 有 preinstall 一键包
  • SELinux、防火墙装前先关;hosts 里必须有"真实 IP + 主机名"的映射
  • 环境变量五件套:ORACLE_BASE、ORACLE_HOME、ORACLE_SID、PATH、LD_LIBRARY_PATH
相关推荐
阳光九叶草LXGZXJ1 小时前
达梦数据库-报错-16-MERGE INTO提示:无效的列名[XX]
linux·运维·数据库·sql·学习
墨天梦1 小时前
B10_文件SharedPreferences与SQLite
jvm·数据库·sqlite
鲲极1 小时前
居间业务数据统计看板 三条取数口径怎么归一才对得上
数据库·鲲极·鲲极系统
CarIise2 小时前
Java实训阶段查漏补缺复习笔记2
java·linux·算法
ao-weilai2 小时前
MySQL数据库:基本查询
android·数据库·mysql
java1234_小锋2 小时前
【技术专题】Mysql8 数据库 - Mysql8 查询数据
数据库·mysql
一号弯2 小时前
Hyperv的LINUX虚拟机扩容
linux·运维·服务器
缘友一世2 小时前
银河护卫队在steam(linux Proton GE-Proton10-34)上启动无窗口问题修复
linux·ubuntu·steam·proton
一条大祥脚3 小时前
【CS336】lecture4 MoE|负载均衡|MoE并行|训练稳定性|Deepseek回顾
运维·负载均衡