0.1 查看OS信息
OS 的全称是 Operating System , 操作系统 。
cat /etc/*release

0.2 先检查并设置主机名(所有节点都要设置)
注意:主机名应遵循如下要求
- 主机命名不能包含下划线
- 主机命名不能以数字开头
- 主机名称字母最好小写
先查看当前主机名:
hostnamectl status
hostname
如果当前主机名已经符合命名规范,则无需修改,直接进入下一步。
如果当前主机名不符合规范,再执行修改:
hostnamectl set-hostname 'teierp1' --static
hostname
说明:
- hostnamectl status:查看当前主机名及相关信息
- hostname:快速查看当前主机名
- hostnamectl set-hostname:用于永久修改主机名
- 示例主机名 tdnode01 仅为示例,实际部署时请替换为现场规范主机名
主机名建议命名规则:
- 简短清晰
- 能体现节点用途
- 避免中文、空格和特殊字符
- 建议统一风格,例如:racnode01、racnode02、racnode03
0.3 配置网卡和IP地址(所有节点都要设置)
1、安装前准备 (按照如下步骤操作节点1、节点2)
1.1 配置主机文件
编辑 /etc/hosts
vi /etc/hosts
#根据实际追加IP信息
#实例1(本次安装用的这个):
###public
10.16.7.232 js-mem-oracle-rac1
10.16.7.233 js-mem-oracle-rac2
###private
10.100.100.232 js-mem-rac1-priv
10.100.100.233 js-mem-rac2-priv
###vip
10.16.7.234 js-mem-rac1-vip
10.16.7.235 js-mem-rac2-vip
###scan ip
10.16.7.231 js-mem-oracle-scan
#实例2
# OracleBegin
# RAC1 IP's: yj01
# RAC1 Public IP
10.20.12.125 yj01
# RAC1 Virtual IP
10.1.12.123 yj01-vip
# RAC1 Private IP
10.20.254.125 yj01-priv
# RAC2 IP's: yj02
# RAC2 Public IP
10.20.12.126 yj02
# RAC2 Virtual IP
10.20.12.124 yj02-vip
# RAC2 Private IP
10.20.254.126 yj02-priv
# SCAN IP
10.20.12.122 yj-scan
#实例3
10.20.13.11 teierp1.erp.tei.com teierp1
192.168.16.24 teierp1-priv.erp.tei.com teierp1-priv dcs0-priv
10.20.13.21 teierp1-vip.erp.tei.com teierp1-vip
10.20.13.12 teierp2.erp.tei.com teierp2
192.168.16.25 teierp2-priv.erp.tei.com teierp2-priv dcs1-priv
10.20.13.22 teierp2-vip.erp.tei.com teierp2-vip
10.20.13.10 teierp-scan.erp.tei.com teierp-scan
1.2 查看IP地址
ip a
节点1IP

节点2IP

1.3 上传安装包和补丁包到 /tmp 并赋权
一、相关资料、软件包下载链接
https://blog.csdn.net/weixin_45806267/article/details/150416075?ops_request_misc=elastic_search_misc&request_id=2fc3373bf57a886541f256ec77691607&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~ElasticSearch~search_v2-3-150416075-null-null.nonecase&utm_term=Oracle%E4%B8%8B%E8%BD%BD%E5%9C%B0%E5%9D%80&spm=1018.2226.3001.4450二、Oracle Database最新补丁包下载方法详解
https://blog.csdn.net/weixin_45806267/article/details/160180430?ops_request_misc=elastic_search_misc&request_id=2fc3373bf57a886541f256ec77691607&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~ElasticSearch~search_v2-1-160180430-null-null.nonecase&utm_term=Oracle%E4%B8%8B%E8%BD%BD%E5%9C%B0%E5%9D%80&spm=1018.2226.3001.4450
ls /tmp
chmod 777 /tmp/LINUX.X64_193000_grid_home.zip
chmod 777 /tmp/LINUX.X64_193000_db_home.zip
1.4 配置主机名称 ( 检查并设置主机名这一步已配置,无需操作)
hostnamectl
查看修改结果:
查看节点1

查看节点2

1.5 配置系统服务
禁用:
systemctl disable firewalld
systemctl disable avahi-daemon
systemctl disable bluetooth
systemctl disable cups
systemctl stop NetworkManager.service #非必须
systemctl disable NetworkManager.service
启用:
chmod +x /etc/rc.d/rc.local
systemctl enable rc-local
systemctl start rc-local
systemctl is-active rc-local
systemctl enable polkit
1.6 安装系统依赖包 (需要外网联通)
## 备份系统自带的 repo 文件
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
## 配置新的 repo 文件
cat <<EOF | sudo tee /etc/yum.repos.d/aliyun.repo
[base]
name=Aliyun Base
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
enabled=1
gpgcheck=0
[updates]
name=Aliyun Updates
baseurl=https://mirrors.aliyun.com/centos/7/updates/x86_64/
enabled=1
gpgcheck=0
[extras]
name=Aliyun Extras
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
enabled=1
gpgcheck=0
[epel]
name=Aliyun EPEL
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
enabled=1
gpgcheck=0
EOF
## 使新的 yum 源生效
yum clean all
yum makecache
安装数据库相关依赖包
## 安装数据库相关依赖包
yum install -y binutils compat-libstdc++-33 compat-libcap1 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers ksh libaio libaio-devel libgcc libstdc++ libXext libXtst kde-l10n-Chinese.noarch libstdc++-devel make xclock sysstat libvirt-devel man nfs-utils lsof expect unzip redhat-lsb openssh-clients smartmontools unixODBC perl telnet vsftpd ntsysv lsscsi libX11 libxcb libXau libXi strace sg3_utils kexec-tools net-tools nmap lrzsz tree dos2unix ncurses ncurses-devel unixODBC-devel
1.7 禁用SELINUX配置 (重启服务器永久生效 )
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
cat /etc/selinux/config |grep SELINUX
setenforce 0
getenforce

1.8 创建 scsi_id 软连接
Oracle 依赖稳定的设备标识符来管理存储,避免重启后设备名变化。
ln -s /lib/udev/scsi_id /sbin/scsi_id
ll /sbin/scsi_id
1.9 禁用透明大页
cp /etc/default/grub /etc/default/grub.bak
vi /etc/default/grub
#在GRUB_CMDLINE_LINUX 尾部添加
numa=off transparent_hugepage=never
#例如:
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rootvg/lv_root rd.lvm.lv=rootvg/lv_swap rd.lvm.lv=rootvg/lv_usr selinux=0 rhgb quiet numa=off transparent_hugepage=never"
#应用配置
grub2-mkconfig -o /boot/grub2/grub.cfg
重启操作系统生效:
cat /sys/kernel/mm/transparent_hugepage/enabled

1.10 创建用户组及用户
groupadd -g 1001 oinstall
groupadd -g 1002 dba
groupadd -g 1003 oper
groupadd -g 1004 asmadmin
groupadd -g 1005 asmoper
groupadd -g 1006 asmdba
useradd -u 1001 -g oinstall -G dba,asmadmin,asmdba,oper oracle
useradd -u 1002 -g oinstall -G asmadmin,asmdba,asmoper,oper,dba grid
chage -M -1 oracle
chage -M -1 grid
## 为用户设置密码
passwd oracle
passwd grid
echo "123456" |passwd oracle --stdin
echo "123456" |passwd grid --stdin
- 注:1000 以内的gid ,uid 为系统保留,不要使用。
- 此处创建用户后,设置口令为123456(可自定义)。
1.11 修改 Linux 内核参数
cat>>/etc/sysctl.conf<<EOF
## for oracle
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 16442979
kernel.shmmax = 40410265190
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
vm.min_free_kbytes = 263087
vm.swappiness = 10
EOF
-
注:kernel.shmall,kernel.shmmax,vm.min_free_kbytes需要根据当前主机内存修改。
内存单位为G时,kernel.shmall =实际内存/4k(内存10241024/4)
例如64G内存,kernel.shmall =6410241024/4=16777216
内存单位为G时,kernel.shmmax =实际内存1024102410240.6
例如64G内存,kernel.shmmax =641024102410240.6=41231686041
内存单位为G时,vm.min_free_kbytes=实际内存10241024*0.004
例如64G内存,vm.min_free_kbytes=6410241024*0.004=268435
-
对于OLTP类,Oracle数据库:SGA=系统内存*60%*75%,PGA=系统内存*60%*25%
-
对于OLAP类,Oracle数据库:SGA=系统内存*60%*50%,PGA=系统内存*60%*50%
修改好后执行命令生效
sysctl -p
1.12 修改LIMITS配置
cp /etc/security/limits.conf /etc/security/limits.conf.`date +%Y%m%d`
echo " grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
grid hard stack 32768
grid soft nproc 4096
grid hard nproc 16384
grid soft memlock unlimited
grid hard memlock unlimited
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
oracle soft nproc 4096
oracle hard nproc 16384
oracle soft memlock unlimited
oracle hard memlock unlimited
root soft nproc 2047 " >> /etc/security/limits.conf
echo "session required pam_limits.so" >>/etc/pam.d/login
1.13 修改默认shell启动配置
修改/etc/profile,添加如下设置:
cat >>/etc/profile <<EOF
if [ \$USER = "oracle" ] || [ \$USER = "grid" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
EOF
修改/etc/csh.login,添加如下设置:
cat >>/etc/csh.login <<EOF
if ( \$USER = "oracle" || \$USER = "grid" ) then
limit maxproc 16384
limit descriptors 65536
endif
EOF
1.14 创建目录
mkdir -p /u01/app/oraInventory
chown -R grid:oinstall /u01/app/oraInventory
chmod -R 775 /u01/app/oraInventory
mkdir -p /u01/app/grid
chown -R grid:oinstall /u01/app/grid
chmod -R 775 /u01/app/grid
mkdir -p /u01/app/19.3.0/grid
chown -R grid:oinstall /u01/app/19.3.0/grid
chmod -R 775 /u01/app/19.3.0/grid
mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle
mkdir -p /u01/app/oracle/product/19.3.0/db_1
chown -R oracle:oinstall /u01/app/oracle/product/19.3.0/db_1
chmod -R 775 /u01/app/oracle/product/19.3.0/db_1
- 注:用于安装的文件系统,剩余空间应不小于30G
1.15 设置 grid 环境变量
#su - grid
#vi ~/.bash_profile
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/u01/app/grid
export ORACLE_SID=+ASM1
export ORACLE_HOME=/u01/app/19.3.0/grid
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export SSH_AUTH_SOCK=0
#export SRVM_DISABLE_MTTRANS=true
NAME=js-mem-oracle-rac1
PS1="[$NAME:$LOGNAME]:\${PWD}>"
umask 022
- 注:在节点2上,ORACLE_SID =+ASM2, NAME= js-mem-oracle-rac2
1.16 设置 oracle 环境变量
#su - oracle
#vi ~/.bash_profile
export ORACLE_SID=yjxt1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/db_1
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export TMP=/tmp
export TMPDIR=$TMP
NAME=js-mem-oracle-rac1
PS1="[$NAME:$LOGNAME]:\${PWD}>"
umask 022
注:在节点js-mem-oracle-rac2 上,修改如下变量:
- export ORACLE_SID=yjxt2
- NAME=js-mem-oracle-rac2
1.17 检查操作系统时钟
如果时区设置不是东八区,可以使用下面命令修改:
# timedatectl set-timezone Asia/Shanghai
检查修改结果,Time zone: Asia/Shanghai (CST, +0800) 即为修改成功:
# timedatectl
Local time: Tue 2025-03-04 19:56:17 CST
Universal time: Tue 2025-03-04 11:56:17 UTC
RTC time: Tue 2025-03-04 11:56:07
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
数据库虚拟机配置时钟源,可以减少时间中断的对性能和时间同步的影响。
Oracle 官方建议您将时钟源设置为 tsc 以便在 Linux x86-64 上的虚拟环境 (VM) 中获得更好的性能。
- 注:海光平台不支持 tsc 时钟源
操作步骤:
步骤 1. 使用 root 账号登录数据库服务器,使用下面的命令查看系统上是否有可用时钟源:
|--------------------------------------------------------------------------|
| # cat /sys/devices/system/clocksource/clocksource0/available_clocksource |
步骤 2. 使用下面的命令查看系统当前使用的时钟源:
|------------------------------------------------------------------------|
| # cat /sys/devices/system/clocksource/clocksource0/current_clocksource |
步骤 3. 设置 tsc为当前时钟源:
|--------------------------------------------------------------------------------|
| # echo "tsc">/sys/devices/system/clocksource/clocksource0/current_clocksource |
步骤 4. 验证当前时钟源是否修改成功:
|------------------------------------------------------------------------|
| # cat /sys/devices/system/clocksource/clocksource0/current_clocksource |
步骤 5. 使用任意文本编辑器修改 /etc/default/grub 文件,在 GRUB_CMDLINE_LINUX 行中添加 clocksource=tsc,以便在系统重启后保留此时钟源设置:
|-------------------------------------------------------------------------------------------------------------------------------|
| GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet clocksource=tsc" |
步骤 6. 运行以下命令进行更新 GRUB 并确保重新启动后这些设置仍能保留:
|------------------------------------------|
| # grub2-mkconfig -o /boot/grub2/grub.cfg |
1.18 设置NOZEROCONF
echo "NOZEROCONF=yes" >> /etc/sysconfig/network
1.19 修改/etc/resolv.conf
mv /etc/resolv.conf /etc/resolv.conf.bak
- 注意:按照如上步骤完成节点2的部署
上面的操作会禁用 DNS,原因如下:
- 稳定性与可靠性:DNS 解析依赖外部服务,若 DNS 服务器出现延迟、故障或网络波动,可能导致集群节点间的通信中断,引发严重的集群稳定性问题(如节点驱逐、脑裂等)。
- 避免名称解析不一致:RAC 要求所有节点的主机名、VIP、SCAN 等名称解析必须完全一致。若 DNS 配置存在差异(如缓存、多区域同步问题),可能导致节点无法识别彼此。
- 性能优化:直接通过 /etc/hosts 进行本地解析可减少网络查询延迟,对高吞吐、低延迟的集群通信至关重要。
1.20 修改 grid 和 oracle 进程数量限制
echo "oracle soft nproc 16384" >>/etc/security/limits.d/20-nproc.conf
echo "grid soft nproc 16384" >>/etc/security/limits.d/20-nproc.conf
echo "oracle hard nproc 16384" >>/etc/security/limits.d/20-nproc.conf
echo "grid hard nproc 16384" >>/etc/security/limits.d/20-nproc.conf
1.21 配置磁盘(根据实际配置修改)
磁盘组规划:
data: 1 块磁盘容量全部为 2T
arch: 1 块磁盘容量全部为 1T
ocr: 1 块磁盘容量全部为 100G
OCR (Oracle Cluster Registry):存储集群资源配置信息,例如数据库实例、服务、节点列表、VIP 配置等。所有节点通过共享的 OCR 文件(或 ASM 磁盘组)实时读取和更新配置。
步骤 1:在节点js-mem-oracle-rac1 上查看是否挂载成功
lsblk

步骤 2:在节点js-mem-oracle-rac2 上查看是否挂载成功

步骤 3 :共享磁盘配置
方式一: Virtio 总线+udev(此次用的这个)
在节点js-mem-oracle-rac1、js-mem-oracle-rac2 上分别编辑 /etc/udev/rules.d/99-oracle-asmdevice.rules
vi /etc/udev/rules.d/99-oracle-asmdevice.rules
本次部署的虚拟机的虚拟卷选择 Virtio 总线方式,可以发挥更好的I/O性能,具体格式为:
SUBSYSTEM=="block",ENV{ID_SERIAL}=="4626422d-fb51-4640-8", SYMLINK+="oracleasm/vdisk1",GROUP="asmadmin",OWNER="grid",MODE="0660"
SUBSYSTEM=="block",ENV{ID_SERIAL}=="09d6418a-24f7-4add-b", SYMLINK+="oracleasm/vdisk2",GROUP="asmadmin",OWNER="grid",MODE="0660"
SUBSYSTEM=="block",ENV{ID_SERIAL}=="d6677106-e369-469a-a", SYMLINK+="oracleasm/vdisk3",GROUP="asmadmin",OWNER="grid",MODE="0660"
其中 ENV{ID_SERIAL} 后面的值可通过如下命令查询:
[root@js-mem-oracle-rac2 etc]# udevadm info --query=all --name=/dev/vdb |grep ID_SERIAL
E: ID_SERIAL=4626422d-fb51-4640-8
[root@js-mem-oracle-rac2 etc]# udevadm info --query=all --name=/dev/vdc |grep ID_SERIAL
E: ID_SERIAL=09d6418a-24f7-4add-b
[root@js-mem-oracle-rac2 etc]# udevadm info --query=all --name=/dev/vdd |grep ID_SERIAL
E: ID_SERIAL=d6677106-e369-469a-a
SYMLINK:参数格式为 SYMLINK+="oracleasm/vdisk1",其中 oracleasm 为 ASM 磁盘组在 /dev/ 下的目录名,vdisk1 为 ASM 磁盘名称,按照实际环境的规划填写(可自定义)。
在节点1,节点2操作使配置生效:
# 创建目录
mkdir /dev/oracleasm
# 重启udev
udevadm control --reload-rules
udevadm trigger --type=devices --action=change
# 查看权限是否为grid:oinstall
ll /dev/vdb /dev/vdc /dev/vdd
# 查看命名结果
ll /dev/oracleasm/
方式二:常规多路径+udev配置
1.安装multipath
yum install -y device-mapper-multipath
2.启动multipath
modprobe dm-multipath
modprobe dm-round-robin
systemctl enable multipathd.service
systemctl start multipathd.service
3.多路径配置
systemctl stop multipathd.service
所得所需存储的lun的wwid:
for i in `cat /proc/partitions |awk {'print $4'} |grep sd`; do echo "Device: $i WWID: `/usr/lib/udev/scsi_id --page=0x83 --whitelisted --device=/dev/$i` "; done |sort -k4
sdb:36000c29582adbf77deff0f1ea3b02a47
sdc:36000c29791ce4a59af60e8dcbca6b6c3
sdd:36000c29faacdb541d21502ba9debcbca
vi /etc/multipath.conf
defaults {
user_friendly_names yes
}
devices {
device {
vendor "(COMPAQ|HP)"
product "HSV1[01]1|HSV2[01]0|HSV300|HSV4[05]0"
#getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
features "0"
hardware_handler "0"
path_selector "round-robin 0"
path_grouping_policy group_by_prio
failback immediate
rr_weight uniform
no_path_retry 12
rr_min_io 1000
path_checker tur
prio alua
}
}
multipaths {
multipath {
wwid 36000c29582adbf77deff0f1ea3b02a47
alias OCR
path_grouping_policy multibus
path_selector "round-robin 0"
failback immediate
rr_weight priorities
no_path_retry queue
}
multipath {
wwid 36000c29791ce4a59af60e8dcbca6b6c3
alias DATA
path_grouping_policy multibus
path_selector "round-robin 0"
failback immediate
rr_weight priorities
no_path_retry queue
}
multipath {
wwid 36000c29faacdb541d21502ba9debcbca
alias FRA
path_grouping_policy multibus
path_selector "round-robin 0"
failback immediate
rr_weight priorities
no_path_retry queue
}
}
blacklist {
devnode "^(sda|ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z]"
devnode "^asm/*" # Here
devnode "ofsctl" # Here
}
#启动多路径:
systemctl start multipathd.service
4.配置udev,更改属组。
vi /etc/udev/rules.d/99-oracle-asmdevices.rules
ENV{DM_NAME}=="OCR", OWNER:="grid", GROUP:="asmadmin", MODE:="0660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}"
ENV{DM_NAME}=="DATA", OWNER:="grid", GROUP:="asmadmin", MODE:="0660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}"
ENV{DM_NAME}=="FRA", OWNER:="grid", GROUP:="asmadmin", MODE:="0660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}"
5.重启多路径和udev
systemctl stop multipathd.service
systemctl start multipathd.service
/usr/sbin/udevadm control --reload-rules
systemctl status systemd-udevd.service
systemctl enable systemd-udevd.service
验证权限
ls -l /dev/dm-*
验证命名结果
ls -l /dev/mapper/*
1.21 重启操作系统
配置完成后,重启js-mem-oracle-rac1、js-mem-oracle-rac2 节点的操作系统,准备开始grid和数据库软件安装。
#reboot