第 2 天:RHEL 6 安装 Oracle 11GR2 数据库

前言

第一天我们详细讲解了如何在虚拟机中安装 Linux 操作系统的全过程,相信许多朋友已经熟练掌握了相关技巧。接下来,我们继续深入,学习如何搭建一个 Oracle 数据库环境,这是实战学习 Oracle 数据库的基础。熟能生巧,多加练习才是掌握 Oracle 的关键!正所谓:“无他,唯手熟尔!”

本文将实战演示如何在 Linux 系统上快速安装一套 Oracle 11GR2(11.2.0.4.0) 数据库。为什么选择 11GR2 而非 19C?

原因在于:目前许多生产环境依然运行在 11GR2 数据库上。为了更贴近实际生产运维场景,我决定从 11GR2 入手,以覆盖更多常见的运维需求。

记得点击 "DBA学习之路设为星标

后台回复【进群】,申请加入数据库学习交流群

Linux 系统安装

安装好 RHEL 6 操作系统后,我们即可开始准备安装 Oracle 数据库!如果对操作系统的安装过程不熟悉,可以跳转进行学习:

第 1 天:VirtualBox 虚拟机安装 Linux 系统

接下来咱么正式进入 Oracle 数据库的安装环节!

环境信息

演示环境信息:

Oracle 11GR2 对内存的要求相对较低,配置 2G 内存 即可满足学习环境的需求。这种配置既能顺利完成操作,又不至于对电脑系统资源造成过大压力,非常适合用于学习和练习。

安装前准备

Oracle 数据库的安装需要对 Linux 系统进行一些必要的配置。一方面,这些配置是为了遵循生产环境的最佳实践,另一方面是为了规避一些已知的 BUG。本教程基于 Oracle 官方文档并结合大量生产环境部署的实战经验,是一份标准的 SOP 文档,确保稳健可靠。

虽然一些“野路子”也能实现安装,但你敢把它用在生产环境吗?为了确保系统稳定性和可维护性,遵循规范化的配置步骤才是正确的选择。

配置网络

如果在安装 Linux 系统的时候没有配置网卡开机自启,可以参考下方步骤进行修改网卡配置,我的网卡名称是eth0

按照图中提示进行操作之后,检查网络情况:

sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg=eth0
service network restart
ip a | grep eth0

? 注意: 网卡连接方式要选择Host-Only 模式,否则无法识别 IP 地址进行连接!修改完之后需要重启主机生效。

如上图所示,网络已经配置成功,IP 地址为192.168.56.180

关闭防火墙

为确保数据库服务的正常运行,需要根据实际需求关闭系统防火墙或放开相关端口(1521)。这里提供两种可选方案。

1、关闭系统防火墙:

## 以节点一为例
service iptables stop
chkconfig iptables off
service iptables status

适用场景: 网络环境安全可控,不依赖防火墙规则。

2、放开必要端口

如系统要求不可关闭防火墙,执行以下命令放开相关端口,放开1521 端口:

## root 用户下执行,本次不执行
firewall-cmd --permanent --zone=public --add-port=1521/tcp
firewall-cmd --reload

适用场景: 防火墙必须启用,需放行数据库相关服务端口。

关闭 SELinux

为防止 SELinux 引发不必要的权限问题或影响服务正常运行,建议将其关闭:

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

修改完 SELinux 配置文件后,需要重启主机进行生效!

远程连接主机

确认主机重启完成后,我们可以通过ssh 远程连接主机进行接下来的配置,远程连接工具有很多:XShellputtySecureCRTMobaXterm以及FinaShell 等等,大家可以都尝试使用以下,个人建议 Windows 系统有钱就买正版XShellSecureCRT,免费就用MobaXterm,macOS 系统直接用终端(Iterm2),爆赞 ??!

我是 MacOS 系统,所以直接使用 ITerm2 进行连接:

ssh root@192.168.56.180

这就已经连接上数据主机了。

配置本地软件源

安装 Oracle 数据库需要一些系统依赖包,否则会安装失败,根据官方文档的建议进行安装依赖即可。依赖安装需要配置系统 yum 源,这里建议配置本地的 yum 源,配置 Linux 软件源可以参考为之前写的文章:

⭐️ DBA 必备:Linux 软件源配置全攻略

首先检查 ISO 镜像是否挂载,由于主机重启可能导致挂载断开,所以检查一下:

如下图,代表已成功挂载 ISO 镜像源:

接下来就是配置 yum 源,先通过mount 挂载镜像源到本地/mnt 目录下:

mount /dev/cdrom /mnt

一键配置本地 yum 文件,直接执行即可:

mkdir /etc/yum.repos.d/bak -p
mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
cat</etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF

如上图所示,本地 yum 源就已经配置完成了。

安装依赖包

根据官方文档建议安装的依赖包,进行yum install 一键安装:

yum install -y bc \
binutils \
compat-libcap1 \
compat-libstdc++-33 \
gcc \
gcc-c++ \
elfutils-libelf \
elfutils-libelf-devel \
glibc \
glibc-devel \
libaio libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
libxcb \
libX11 \
libXau \
libXi \
libXrender \
make \
net-tools \
smartmontools \
sysstat \
e2fsprogs \
e2fsprogs-libs \
expect \
unzip \
openssh-clients \
readline \
readline-devel \
psmisc \
ksh \
nfs-utils --skip-broken

安装过程太长,不展示了,安装完之后检查一下是否都安装成功:

rpm -q bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ elfutils-libelf elfutils-libelf-devel glibc glibc-devel libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXrender make net-tools smartmontools sysstat e2fsprogs e2fsprogs-libs expect unzip openssh-clients readline readline-devel

如上图,所有的依赖包都已成功安装!

配置 hosts 文件

建议配置主机 hosts 文件,监听如果配置为主机名时,需要通过 hosts 文件进行解析:

cat <>/etc/hosts
192.168.56.180 Lucifer       
EOF

创建用户和组

Oracle 数据库不建议使用 root 用户进行安装,官方建议创建oracle 用户和对应的组:

## 创建 oinstall dba oper 组
/usr/sbin/groupadd -g 54321 oinstall
/usr/sbin/groupadd -g 54322 dba
/usr/sbin/groupadd -g 54323 oper
## 创建 oracle 用户
/usr/sbin/useradd -u 54321 -g oinstall -G dba,oper oracle
## 修改 oracle 用户密码为 oracle
echo oracle | passwd --stdin oracle
## 检查 oracle 用户
id oracle

创建安装目录

在安装 Oracle 数据库前,需要提前创建相关目录,并正确设置权限,确保 oracle 用户对安装和数据目录具有完全的读写权限:

mkdir -p /u01/app/oracle/product/11.2.0/db
mkdir -p /u01/app/oraInventory
mkdir -p /oradata
mkdir -p /archivelog
chown -R oracle:oinstall /oradata
chown -R oracle:oinstall /archivelog
chown -R oracle:oinstall /u01/app
chmod -R 775 /u01/app

配置 avahi-deamon

官方文档建议关闭 avahi-deamon,没有安装可以先安装在关闭,防止日后被安装:

yum install -y avahi*
service avahi-daemon stop
chkconfig avahi-daemon off
service avahi-daemon status

关闭透明大页和 numa

官方建议关闭透明大页和 numa,有一些 BUG 是由于这两个特性导致,并且打开对数据库的性能提升不大,因此直接关闭即可。

关闭透明大页:

cat >>/etc/rc.d/rc.local <
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF

关闭 numa:

sed -i 's/quiet/quiet numa=off/' /boot/grub/grub.conf

透明大页和 numa 的配置需要重启主机生效,这里先不重启,等全部配置完之后再重启主机!

配置系统参数文件

我已经根据官方文档将参数整合成一个脚本命令,直接复制下方命令执行即可:

DAYTIME=$(date +%Y%m%d)
mv /etc/sysctl.conf /etc/sysctl.conf.${DAYTIME}
memTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}')
totalMemory=$((memTotal / 2048))
shmall=$((memTotal / 4))
if [ $shmall -lt 2097152 ]; then
  shmall=2097152
fi
shmmax=$((memTotal * 1024 - 1))
if [ "$shmmax" -lt 4294967295 ]; then
  shmmax=4294967295
fi
cat </etc/sysctl.conf
##shmmal's Calculation formula: physical memory 8G:(8*1024*1024*1024)/4096=2097152
##shmmax's Calculation formula: physical memory 8G:(8/2)*1024*1024*1024 -1=4294967295
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = $shmall
kernel.shmmax = $shmmax
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
EOF

sysctl -p

配置系统资源限制

cat <>/etc/security/limits.conf
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
oracle soft nproc 2047
oracle hard nproc 16384
oracle hard memlock 134217728
oracle soft memlock 134217728
EOF

配置 pam.d

cat <>/etc/pam.d/login
session required pam_limits.so 
session required /lib64/security/pam_limits.so
EOF

配置 /dev/shm

cp /etc/fstab /tmp/fstab
memTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}')
shmTotal=$(df -k /dev/shm | awk '{print $2}' | head -n 2 | tail -n 1)
if [ "$(grep -E -c "/dev/shm" /etc/fstab)" -eq 0 ]; then
 cat <>/etc/fstab
tmpfs /dev/shm tmpfs size=${memTotal}k 0 0
EOF
 mount -o remount /dev/shm
else
  if [ "$shmTotal" -lt "$memTotal" ]; then
    shmTotal=$memTotal
    line=$(grep -n "/dev/shm" /etc/fstab | awk -F ":" '{print $1}')
    sed -i "${line} d" /etc/fstab
    cat <>/etc/fstab
tmpfs /dev/shm tmpfs size=${memTotal}k 0 0
EOF
 fi
 mount -o remount /dev/shm
fi

配置用户环境变量

## 配置 root 用户
cat <>/root/.bash_profile
alias so='su - oracle'
export PS1="[\`whoami\`@\`hostname\`:"'\$PWD]# '
EOF

## 配置 oracle 用户
cat <>/home/oracle/.bash_profile
umask 022
export TMP=/tmp
export TMPDIR=\$TMP
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db
export ORACLE_HOSTNAME=Lucifer
export ORACLE_TERM=xterm
export TNS_ADMIN=\$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export ORACLE_SID=orcl
export PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$PATH
alias sas='sqlplus / as sysdba'
export PS1="[\`whoami\`@\`hostname\`:"'\$PWD]\$ '
EOF

至此,Linux 操作系统的配置就完成了,重启主机确保配置没有!

?注意:重启前记得把 ISO 镜像源给断开,或者设置一下磁盘启动顺序,否则又要提示你重新安装了:

重启成功后检查一下 Selinux,透明大页和 numa:

cat /etc/selinux/config
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /proc/cmdline

安装 Oracle 软件

Oracle 安装介质上传

Oracle 11GR2 安装包官方网站已经不提供下载,不过我给大家提供了下载方式:

请使用浏览器的分享功能分享到微信等