高可用 & 容灾25 分钟阅读
RHEL 7 安装 Oracle 12CR1 RAC 数据库
大家好,这里是公众号 DBA学习之路,分享一些学习数据库路上的知识和经验。 @TOC目录 最近,有一套 12CR1 RAC 需要安装,正好记录一下安装过程。 Oracle RAC 2 节点需要安装 2 台主机系统,一般在
2025年2月11日阅读—点赞—收藏—
oraclerac
在知识库中专注阅读,并随时返回相关工具与课程
大家好,这里是公众号 DBA学习之路,分享一些学习数据库路上的知识和经验。 @TOC目录 最近,有一套 12CR1 RAC 需要安装,正好记录一下安装过程。 Oracle RAC 2 节点需要安装 2 台主机系统,一般在
大家好,这里是公众号 DBA学习之路,分享一些学习数据库路上的知识和经验。

本章目标:掌握本章核心知识点 前置要求:完成前序章节学习 预计时长:60 分钟
最近,有一套 12CR1 RAC 需要安装,正好记录一下安装过程。
Oracle RAC 2 节点需要安装 2 台主机系统,一般在安装之前都需要提前规划一下环境信息。
安装 RAC 和单机不一样,需要提前规划好以下信息:
Oracle RAC 需要至少 2 张网卡,一个用于公网访问,一个用于主机间私网心跳(生产建议2个心跳,公网2张网卡做 bond)。
1192.168.6.70 rac01 2192.168.6.71 rac021100.100.100.1 rac01-priv 2100.100.100.2 rac02-priv1192.168.6.72 rac01-vip 2192.168.6.73 rac02-vip1192.168.6.75 rac-scanOracle RAC 使用 ASM 存储来存放数据,通常使用 OCR 和 DATA 两个磁盘组!
主机内存建议每台设置 8G 物理内存和 8G SWAP:
综合上述要求,本次教程的环境信息大致如下:
Linux 系统安装好之后,建议大家做一个快照,因为我们后面实战需要用到很多 Linux 系统,避免每次都要安装系统!
📢 注意: 以下标题中(rac01&rac02)代表节点一和节点二都需要执行,(rac01)代表只需要节点一执行。
在安装 Linux 系统过程中我已经配置好了网络,如果没有配置的话,Linux 7 版本可以使用 nmcli 命令来配置网络,以下命令中的 IP地址、子网掩码、网关 和 网卡名称 请根据实际情况进行修改!
rac01:
1##配置Public IP2nmcli connection modify ens192 ipv4.addresses 192.168.6.70/24 ipv4.gateway 192.168.6.254 ipv4.method manual autoconnect yes3##配置Private IP4nmcli connection modify ens224 ipv4.addresses 100.100.100.1/24 ipv4.method manual autoconnect yes5##生效6nmcli connection up ens1927nmcli connection up ens2248nmcli connection showrac02:
1##配置Public IP2nmcli connection modify ens192 ipv4.addresses 192.168.6.71/24 ipv4.gateway 192.168.6.254 ipv4.method manual autoconnect yes3##配置Private IP4nmcli connection modify ens224 ipv4.addresses 100.100.100.2/24 ipv4.method manual autoconnect yes5##生效6nmcli connection up ens1927nmcli connection up ens2248nmcli connection show最后,配置好网络后,输入命令 ip a 查看网络是否配置成功,尝试 ping 测试网络。
确保虚拟机已经挂载 ISO 镜像源,手动在 Linux 主机 mount:
1mount /dev/sr0 /mnt2df -Th | grep /mnt配置本地 YUM 源:
1cat <<-EOF>/etc/yum.repos.d/local.repo2[local]3name=local4baseurl=file:///mnt5gpgcheck=06enabled=17EOF89yum repolist all安装依赖包:
1yum install -y binutils \2compat-libcap1 \3compat-libstdc++-33 \4gcc \5gcc-c++ \6glibc \7glibc-devel \8libaio \9libaio-devel \10ksh \11make \12libXi \13libXtst \14libgcc \15libstdc++ \16libstdc++-devel \17sysstat \18nfs-utils \19unzip \20openssh-clients \21readline \22readline-devel \23psmisc --skip-broken手动上传并安装依赖包:
1## 创建 /soft 文件夹2mkdir /soft3## 上传 compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm 安装包4cd /soft5## 安装 compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm6rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm检查依赖包安装情况:
1rpm -q binutils \2compat-libcap1 \3compat-libstdc++-33 \4gcc \5gcc-c++ \6glibc \7glibc-devel \8libaio \9libaio-devel \10ksh \11make \12libXi \13libXtst \14libgcc \15libstdc++ \16libstdc++-devel \17sysstat \18nfs-utils \19unzip \20openssh-clients \21readline \22readline-devel \23psmisc
📢 注意: 确保以上依赖包一定要两个节点均全部安装成功,否则可能导致数据库安装失败!
如果安装系统过程中没有配置 hostname,可以执行以下命令配置:
1hostnamectl set-hostname rac012hostnamectl set-hostname rac02配置 hosts 文件:
1cat<<-\EOF>>/etc/hosts2# Public IP3192.168.6.70 rac014192.168.6.71 rac0256# Private IP7100.100.100.1 rac01-priv8100.100.100.2 rac02-priv910# Vip IP11192.168.6.72 rac01-vip12192.168.6.73 rac02-vip1314# Scan IP15192.168.6.75 rac-scan16EOF1systemctl stop firewalld.service2systemctl disable firewalld.service3systemctl status firewalld.service
配置 selinux 临时生效:
1sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config2setenforce 03getenforce4sestatus
📢 注意: selinux 配置需要重启生效!
创建安装 Oracle 数据库所需的用户、组以及安装目录:
1/usr/sbin/groupadd -g 54321 oinstall2/usr/sbin/groupadd -g 54322 dba3/usr/sbin/groupadd -g 54323 oper4/usr/sbin/groupadd -g 54324 backupdba5/usr/sbin/groupadd -g 54325 dgdba6/usr/sbin/groupadd -g 54326 kmdba7/usr/sbin/groupadd -g 54327 asmdba8/usr/sbin/groupadd -g 54328 asmoper9/usr/sbin/groupadd -g 54329 asmadmin10/usr/sbin/groupadd -g 54330 racdbagrid/oracle 用户创建:
1## 创建 grid/oraprod 用户2/usr/sbin/useradd -u 11012 -g oinstall -G asmadmin,asmdba,asmoper,dba,racdba,oper grid3/usr/sbin/useradd -u 54321 -g oinstall -G asmadmin,asmdba,dba,backupdba,dgdba,kmdba,racdba,oper oraprod4## 修改用户密码为oracle5echo "oracle" |passwd oraprod --stdin6echo "oracle" |passwd grid --stdin7## 查看用户组8id grid9id oraprod
创建软件目录:
1mkdir -p /u01/app/12.1.0/grid /u01/app/grid /u01/app/oracle/product/12.1.0/db /u01/app/oraInventory /backup /home/oraprod/scripts2chown -R oraprod:oinstall /backup /home/oraprod/scripts3chown -R grid:oinstall /u014chown -R oraprod:oinstall /u01/app/oracle5chmod -R 775 /u01
部署 SSC 集群需要挂载共享盘,挂载共享盘的方式有很多,可以使用虚拟机创建共享盘的方式,也可以通过 iscsi 共享存储作为数据库存储文件系统,可自行选择。
本文使用 Starwind 配置 iscsi 共享盘,可以参考为之前写的文章:
1、Linux 客户端安装 iscsi 软件
1## 以节点一为例2## 如果遇到报错 -bash: iscsiadm:未找到命令,就需要安装 iscsi 软件3[root@rac01 ~]# yum install -y iscsi-initiator-utils*4[root@rac01 ~]# systemctl start iscsid.service5[root@rac01 ~]# systemctl enable iscsid.service2、搜索服务端 iscsi target
1## 以节点一为例2## 192.168.6.43 为 iscsi 服务端 IP 地址3[root@rac01 ~]# iscsiadm -m discovery -t st -p 192.168.6.434192.168.6.43:3260,-1 iqn.2008-08.com.starwindsoftware:lpc-matebook-12cr13、连接服务端 iscsi 共享存储
1## 以节点一为例2## iqn.2008-08.com.starwindsoftware:lpc-matebook-12cr1 为上一步搜索出的 target 名称3[root@rac01 ~]# iscsiadm -m node -T iqn.2008-08.com.starwindsoftware:lpc-matebook-12cr1 -p 192.168.6.43 -l4Logging in to [iface: default, target: iqn.2008-08.com.starwindsoftware:lpc-matebook-12cr1, portal: 192.168.6.43,3260] (multiple)5Login to [iface: default, target: iqn.2008-08.com.starwindsoftware:lpc-matebook-12cr1, portal: 192.168.6.43,3260] successful.4、配置开机自动挂载
1## 以节点一为例2[root@rac01 ~]# iscsiadm -m node -T iqn.2008-08.com.starwindsoftware:lpc-matebook-12cr1 -p 192.168.6.43 --op update -n node.startup -v automatic5、查看挂载成功的共享盘
1## 以节点一为例,sdb、sdc 为挂载的共享盘2[root@rac01 ~]# lsblk 3NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT4sda 8:0 0 100G 0 disk 5├─sda1 8:1 0 1G 0 part /boot6└─sda2 8:2 0 99G 0 part 7 ├─rhel-root 253:0 0 91G 0 lvm /8 └─rhel-swap 253:1 0 8G 0 lvm [SWAP]9sdb 8:16 0 10G 0 disk 10sdc 8:32 0 20G 0 disk 11sr0 11:0 1 3.8G 0 rom /mnt
确保两个节点都连接共享存储之后,安装 multipath 绑定多路径:
1## 如未安装需要安装 multipath2yum install -y device-mapper*3mpathconf --enable --with_multipathd y4## 查看共享盘的 scsi_id5/usr/lib/udev/scsi_id -g -u /dev/sdb6/usr/lib/udev/scsi_id -g -u /dev/sdc
配置 multipath 文件:
1cat <<EOF>/etc/multipath.conf2defaults {3 user_friendly_names yes4}5 6blacklist {7 devnode "^sda"8}910multipaths {11 multipath {12 wwid "200be82b65378c737"13 alias asm_ocr14 }15 multipath {16 wwid "259f2dfe91387593a"17 alias asm_data18 }19}20EOF
📢 注意: wwid 的值为上面获取的 scsi_id,alias 别名可自定义,这里配置 1 块 OCR 盘,1 块 DATA 盘!
激活 multipath 多路径:
1multipath -F2multipath -v23multipath -ll
配置 UDEV 绑盘:
1rm -rf /dev/mapper/udev_info2rm -rf /etc/udev/rules.d/99-oracle-asmdevices.rules3cd /dev/mapper4for i in asm_*; do5 printf "%s %s\n" "$i" "$(udevadm info --query=all --name=/dev/mapper/"$i" | grep -i dm_uuid)" >>/dev/mapper/udev_info6done7while read -r line; do8 dm_uuid=$(echo "$line" | awk -F'=' '{print $2}')9 disk_name=$(echo "$line" | awk '{print $1}')10 echo "KERNEL==\"dm-*\",ENV{DM_UUID}==\"${dm_uuid}\",SYMLINK+=\"${disk_name}\",OWNER=\"grid\",GROUP=\"asmadmin\",MODE=\"0660\"" >>/etc/udev/rules.d/99-oracle-asmdevices.rules11done </dev/mapper/udev_info查看配置好的规则:
1cat /etc/udev/rules.d/99-oracle-asmdevices.rules
重载 udev 规则,检查共享存储多路径绑盘是否成功:
1udevadm control --reload-rules2udevadm trigger --type=devices3ll /dev/asm_*
禁用 chronyd:
1## 没有安装 chrony 最好安装一下,防止以后被安装生效2yum install -y chrony3timedatectl set-timezone Asia/Shanghai4systemctl stop chronyd.service5systemctl disable chronyd.service配置 ntpdate 时间同步计划任务:
1## 未安装需要手动安装 ntpdate2yum install -y ntpdate3## 192.168.6.188 为时间服务器 IP,每天 12 点同步系统时间4cat <<EOF>>/var/spool/cron/root500 12 * * * /usr/sbin/ntpdate -u 192.168.6.188 && /usr/sbin/hwclock -w6EOF7## 查看计划任务8crontab -l9## 手动执行10/usr/sbin/ntpdate -u 192.168.6.188 && /usr/sbin/hwclock -wRHEL 7 配置内核文件,关闭透明大页和 numa:
1sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub2grub2-mkconfig -o /boot/grub2/grub.cfg
📢 注意: 关闭 透明大页 和 numa 的配置,需要重启主机生效!
有些主机安装选择最小化安装,没有安装 avahi-daemon 功能,建议安装之后禁用,防止以后误操作导致出问题:
1yum install -y avahi*2systemctl stop avahi-daemon.socket3systemctl stop avahi-daemon.service4pgrep -f avahi-daemon | awk '{print "kill -9 "$2}'5systemctl disable avahi-daemon.socket6systemctl disable avahi-daemon.service配置 NOZEROCONF:
1cat <<EOF>>/etc/sysconfig/network2NOZEROCONF=yes3EOF
安装 Oracle 数据库需要配置系统参数,以下使用脚本命令一键式配置:
1## 网卡名称需根据实际情况需改2PublicFName=ens1923PrivateFName=ens2244memTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}')5totalMemory=$((memTotal / 2048))6shmall=$((memTotal / 4))7if [ $shmall -lt 2097152 ]; then8 shmall=20971529fi10shmmax=$((memTotal * 1024 - 1))11if [ "$shmmax" -lt 4294967295 ]; then12 shmmax=429496729513fi14cat <<EOF>>/etc/sysctl.conf15fs.aio-max-nr = 104857616fs.file-max = 681574417kernel.shmall = $shmall18kernel.shmmax = $shmmax19kernel.shmmni = 409620kernel.sem = 250 32000 100 12821net.ipv4.ip_local_port_range = 9000 6550022net.core.rmem_default = 26214423net.core.rmem_max = 419430424net.core.wmem_default = 26214425net.core.wmem_max = 104857626net.ipv4.conf.$PublicFName.rp_filter = 127net.ipv4.conf.$PrivateFName.rp_filter = 228EOF生效系统参数:
1sysctl -p
配置 limits.conf:
1cat <<EOF>>/etc/security/limits.conf2oraprod soft nofile 10243oraprod hard nofile 655364oraprod soft stack 102405oraprod hard stack 327686oraprod soft nproc 163847oraprod hard nproc 163848oraprod hard memlock unlimited9oraprod soft memlock unlimited1011grid soft nofile 102412grid hard nofile 6553613grid soft stack 1024014grid hard stack 3276815grid soft nproc 1638416grid hard nproc 1638417EOF配置pam.d/login:
1cat <<EOF>>/etc/pam.d/login2session required pam_limits.so 3session required /lib64/security/pam_limits.so4EOF如果 shm 不配置可能会造成后面安装过程出现警告,使用上出现报错等等。
1cat <<EOF >> /etc/fstab2tmpfs /dev/shm tmpfs defaults,size=8G 0 03EOF4mount -o remount /dev/shmgrid 用户环境变量:
1cat <<EOF>>/home/grid/.bash_profile2################OracleBegin#########################3umask 0224export TMP=/tmp5export TMPDIR=\$TMP6export NLS_LANG=AMERICAN_AMERICA.AL32UTF87export ORACLE_BASE=/u01/app/grid8export ORACLE_HOME=/u01/app/12.1.0/grid9export ORACLE_TERM=xterm10export TNS_ADMIN=\$ORACLE_HOME/network/admin11export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib12export ORACLE_SID=+ASM113export PATH=/usr/sbin:\$PATH14export PATH=\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$PATH15alias sas='sqlplus / as sysasm'16export PS1="[\`whoami\`@\`hostname\`:"'\w]\$ '17EOF📢 注意: 每个节点的 ORACLE_SID 不一样(+ASM1/+ASM2),需要自行修改!
oraprod 用户环境变量:
1cat <<EOF>>/home/oraprod/.bash_profile2################OracleBegin#########################3umask 0224export TMP=/tmp5export TMPDIR=\$TMP6export NLS_LANG=AMERICAN_AMERICA.AL32UTF87export ORACLE_BASE=/u01/app/oracle8export ORACLE_HOME=\$ORACLE_BASE/product/12.1.0/db9export ORACLE_HOSTNAME=rac0110export ORACLE_TERM=xterm11export TNS_ADMIN=\$ORACLE_HOME/network/admin12export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib13export ORACLE_SID=lucifer114export PATH=/usr/sbin:\$PATH15export PATH=\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$PATH16alias sas='sqlplus / as sysdba'17export PS1="[\`whoami\`@\`hostname\`:"'\w]\$ '18################OracleEnd#########################19EOF📢 注意: 每个节点的 ORACLE_HOSTNAME(rac01/rac02)和 ORACLE_SID(lucifer1/lucifer2)不一样,需要自行修改!
安装包可以使用 xftp 工具进行上传,只需要上传至一节点 /soft 目录下:
1## 上传安装介质到/soft目录2-rw-------. 1 root root 1673544724 Feb 10 15:22 12102_database_linuxx86_64_1of2.zip3-rw-------. 1 root root 1014530602 Feb 10 15:21 12102_database_linuxx86_64_2of2.zip4-rw-------. 1 root root 1747043545 Feb 10 15:21 12102_grid_linuxx86_64_1of2.zip5-rw-------. 1 root root 646972897 Feb 10 15:21 12102_grid_linuxx86_64_2of2.zip静默解压 grid 安装包:
1## root 用户下执行2unzip -q 12102_grid_linuxx86_64_1of2.zip3unzip -q 12102_grid_linuxx86_64_2of2.zip4chown -R grid:oinstall /soft静默解压 oracle 安装包:
1## root 用户下执行2unzip -q 12102_database_linuxx86_64_1of2.zip3unzip -q 12102_database_linuxx86_64_2of2.ziproot 用户安装 cvuqdisk 包(rac01&rac02):
1cd /soft/grid/rpm/2rpm -ivh cvuqdisk-1.0.9-1.rpm3## 传输到节点二安装4scp cvuqdisk-1.0.9-1.rpm 192.168.6.71:/soft5rpm -ivh cvuqdisk-1.0.9-1.rpm至此,Linux 操作系统的配置就完成了,重启两台主机确保配置没有!重启成功后检查一下 Selinux,透明大页和 numa:
1cat /etc/selinux/config2cat /sys/kernel/mm/transparent_hugepage/enabled3cat /proc/cmdline
至此,一切准备工作都已经做完了,接下来可以正式开始安装 Oracle RAC 数据库!
1[grid@rac01:~]$ cd /soft/grid2[grid@rac01:/soft/grid]$ ./runInstaller
直接跳出安装界面,选择集群安装:


选择自定义安装:


修改 scan 名称,与 hosts 文件配置 scan 名称保持一致,输入 grid 用户密码,创建用户时两节点必须保持一致。先执行 setup,再执行 test,开始互信:


确保对应网卡和IP网段对应即可,12CR1 心跳网段需要选 Private:



安装时填创建 OCR 盘,一块盘冗余 External,目录选择udev绑的路径:







这里不选择自动执行 root.sh 脚本,因此容易失败,所以选择手动执行:

安装预检查,关于 DNS 和 NTP 相关的都可以忽略,继续下一步:

开始安装 grid:


root 用户下,两个节点顺序执行 root.sh,先节点一执行完,再节点二执行,两个节点的 root.sh 都执行完之后,继续安装:

这个错误是由于在 /etc/hosts 中配置了 scan ip,而不是使用 DNS 配置解析,可以忽略该错误,完成安装!
MOS 文档:PRVF-4664 PRVF-4657: Found inconsistent name resolution entries for SCAN name (Doc ID 887471.1)

安装完成:

检查集群状态:
1su - grid2crsctl stat res -t
检查 grid 补丁情况:
1opatch lspatches2sqlplus -version
检查 asm 磁盘组:
1asmcmd lsdg
这里创建的 DATA 磁盘组主要用于存放数据文件、归档日志文件等数据库文件!
使用图形化方式添加 ASM DATA 数据盘:
1asmca




再次检查 asm 磁盘:
1asmcmd lsdg
📢 注意: 建议重启两台主机,重启后再次检查集群状态,监听状态,ASM 磁盘组情况,确保没有问题再继续安装!
开始安装,12CR1 安装 Oracle 软件还不支持提前安装 PSU,所以先安装 Oracle 软件再打补丁:
1chown -R oraprod:oinstall /soft2cd /soft/database3./runInstaller
进入安装界面,不接收安全更新:

选择仅安装 Oracle 软件:

选择集群模式:

输入 oraprod 用户密码,先执行 setup,再执行 test,开始互信:


选择企业版:


默认即可:


安装预检查,由于我们只配了一个 SCAN,所以关于 DNS 相关的都无视,继续:

开始安装:



root 用户下,两个节点都要执行 root.sh:
1/u01/app/oracle/product/12.2.0/db/root.sh安装完成:

至此,Oracle 软件已全部安装成功!
打开 oracle 用户下的 vnc 界面,执行 dbca 创建数据库实例:

选择自定义模式:

默认选择一版用途安装:

填写数据库名称 lucifer,由于默认添加为 1,2,实例名规划为 lucifer1/2;选择安装 CDB 模式,不创建 PDB:




默认即可,使用 OMF 模式:


配置内存,使用 ASMM 模式,数据库总内存占用物理内存 70%-90% 之间:

一般用途模式安装,block_size 是无法修改的,process 进程数修改为1500,根据实际情况修改:

配置数据库字符集:默认 AL32UTF8,国家字符集:默认 AL16UTF16;根据实际业务情况修改成对应字符集:





开始安装:

经过漫长的等待,数据库建完了:

至此,数据库实例创建完成!
如果数据库开启了归档模式,那么就需要配置归档删除的定期任务,否则归档日志越来越多回导致磁盘空间被用尽。
1## 进入 oraprod 用户,创建脚本2cat<<-DELARCH>/home/oraprod/scripts/del_arch.sh3#!/bin/bash4source ~/.bash_profile5deltime=\$(date +"20%y%m%d%H%M%S")6rman target / nocatalog msglog /home/oraprod/scripts/del_arch_\$deltime.log <<-EOF7crosscheck archivelog all;8delete noprompt archivelog until time 'sysdate-7';9delete noprompt force archivelog until time 'SYSDATE-10';10EOF11DELARCH12chmod +x /home/oraprod/scripts/del_arch.sh切换到 root 用户写入计划任务:
1echo "12 00 * * * /home/oraprod/scripts/del_arch.sh" >>/var/spool/cron/oraprod2## 手动执行测试3su - oraprod4/home/oraprod/scripts/del_arch.sh12CR1 版本之后由于低版本客户端连接可能会报错,因此需要配置 sqlnet 来支持低版本客户端连接:
1su - oraprod2cat<<- EOF>>$TNS_ADMIN/sqlnet.ora3SQLNET.ALLOWED_LOGON_VERSION_CLIENT=84SQLNET.ALLOWED_LOGON_VERSION_SERVER=85EOF配置数据库实例随集群服务自启动:
1## root用户下执行2/u01/app/12.1.0/grid/bin/crsctl modify resource "ora.lucifer.db" -attr "AUTO_START=always" -unsupported注意: ora.lucifer.db中的 lucifer 是指 db 名称;需要在 root 用户下执行!
所有都配置完成之后,关闭数据库,重启主机,重启后检查集群状态和数据库运行状态!

