文章目录
- 一、场景切入
- 二、用户与用户组
-
- [2.1 创建组与用户](#2.1 创建组与用户)
- [2.2 验证](#2.2 验证)
- 三、目录规划
- 四、内核参数
-
- [4.1 /etc/sysctl.conf](#4.1 /etc/sysctl.conf)
- [4.2 RHEL 系参数验证](#4.2 RHEL 系参数验证)
- 五、资源限制:/etc/security/limits.conf
- 六、依赖包
-
- [6.1 yum 安装](#6.1 yum 安装)
- [6.2 验证](#6.2 验证)
- [七、SELinux 与防火墙](#七、SELinux 与防火墙)
- [八、主机名与 /etc/hosts](#八、主机名与 /etc/hosts)
- [九、oracle 用户环境变量](#九、oracle 用户环境变量)
- 十、解压安装介质
- 十一、装前自检清单
- 十二、要点总结
一、场景切入
在 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