Contents
ORACLE RAC集群快速搭建,用于测试程序
一、项目需求
某业务系统最近上线,需要快速搭建一套Oracle19c RAC数据库用于前期测试程序。
操作系统:Oracle linux 7.6 x86_64
数据库版本:Oracle19c RAC集团
创建数据库:itpuxdb
字符集:ZHS16GBK
数据块大小:8K
IP地址:192.168.50.61/62/63/64/65
二、架构图

三、准备实验环境
3.1.运行环境准备
1.准备3台服务器
2.安装3个LINUX系统(可以是oracle linux,也可以是centos,7.6版本以上,8.0版本以下)
3.下载ORACLE19c,19c-rac
oracle 19c 和19c rac LINUX版本下载地址:
Oracle Database 19c Grid Infrastructure (19.3) for Linux x86-64下载地址
Oracle Database 19c Download for Linux x86-64 | Oracle 中国
下载两个文件:
19c rac:LINUX.X64_193000_grid_home
19c:LINUX.X64_193000_db_home
环境要求:
#Vmware虚拟机安装Linux两台用来安装RAC,一台用来存放共享存储数据。
#RAC1
虚拟机:2C,内存10G
本地硬盘:OS/ 200g,挂一个/opt/oracle(具体参照下图)
IP地址:192.168.50.61
数据存放:+DATA 50g
5块10G的共享盘(安装使用)
2块1G的共享盘(后面使用)
#RAC2
虚拟机:2C,内存10G
本地硬盘:OS/ 200g,挂一个/opt/oracle(具体参照下图)
IP地址:192.168.50.62
数据存放:+DATA 50g
5块10G的共享盘(安装使用)
2块1G的共享盘(后面使用)
#STORAGE共享存储
虚拟机:2C,内存4G
本地硬盘:OS/ 200g,挂一个/opt/oracle
IP地址:192.168.50.70
3台虚拟机的具体配置:
RAC1和RAC2的配置:



storage的配置

其他的根据RAC的配置
进入安装ORACLE LINUX
语言


这里比较关键,因为需要桌面化还有些功能性组件,因此需要下面的选项:
GUI选项,硬件监控工具,infiniband支持,java平台,KDE,大系统性能,主框架访问,性能工具,兼容性工具,开发工具,安全性工具,智能卡支持,系统管理工具



配置网络


安装的时候设置挂载点/opt/oracle

关闭security policy

使用管理员root用户登录

设置启动时检查产品更新

关闭三台服务器,独立开机一台,选择“重新安装VMWARE TOOLS”
具体ORACLE LINUX的安装方法可以参考这篇
3.2.调整服务器配置
storage存储的那台主机,把磁盘设置独立非永久

RAC的两台主机增加配置独立网卡,并设置仅主机通讯

启动两台RAC服务器,并配置私网网络
RAC1上面设置新的网卡,IP地址:10.10.10.61




RAC2,采用同样配置,IP地址10.10.10.62


测试私网是否连通
RAC1:ping 10.10.10.62
RAC2:ping 10.10.10.61


关机设置磁盘独立非永久(如果可以设置的话)
3.3.环境参数配置
以下两台RAC服务器都需要操作
#配置hosts
vi /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.50.61 fgedu61
192.168.50.62 fgedu62
10.10.10.61 fgedu61prv
10.10.10.62 fgedu62prv
192.168.50.63 fgedu61vip
192.168.50.64 fgedu62vip
192.168.50.65 fgeduscan
#测试两台RAC服务器是否能互相ping通
ping fgedu62
ping fgedu62prv
ping fgedu61
ping fgedu61prv
#关闭SELINUX、防火墙
cp /etc/selinux/config{,.bak}
echo "SELINUX=disabled" > /etc/selinux/config
echo "#SELINUXTYPE=targeted" >> /etc/selinux/config
getenforce 1
setenforce 0
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld
#禁止NTP
#oracle自己具有时间同步的服务器
systemctl stop ntpd
systemctl disable ntpd
systemctl stop chronyd.service
systemctl disable chronyd.service
rm -f /etc/chrony.conf
#配置yum环境
mkdir /mnt/linux
mount /dev/cdrom/ /mnt/linux
cd /etc/yum.repos.d
mkdir bk
mv *.repo bk/
echo "[EL]" >> /etc/yum.repos.d/itpux.repo
echo "name = Linux7.x DVD" >> /etc/yum.repos.d/itpux.repo
echo "baseurl=file:///mnt/linux" >> /etc/yum.repos.d/itpux.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/itpux.repo
echo "enabled=1" >> /etc/yum.repos.d/itpux.repo
cat /etc/yum.repos.d/itpux.repo
yum clean all
yum makecache
四、配置RAC和STORAGE服务器
4.1.配置RAC服务器
在两台RAC服务器上操作,存储上面不需要操作
准备好安装包
cd /mnt/hgfs/oracle\ soft/
rpm -ivh oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
根据提示安装所需的包
#缺什么包安装什么包
yum -y install compat-libstdc++-33 ksh libaio-devel
创建用户与组
安装好RPM包之后先看看哪些组是有的
id oracle
uid=54321(oracle) gid=54321(oinstall) 组=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba)
重新建立用户和组
userdel -r oracle
userdel -r grid
groupdel oinstall
groupdel dba
groupadd -g 5001 oinstall
groupadd -g 5002 dba
groupadd -g 5003 asmdba
groupadd -g 5004 asmoper
groupadd -g 5005 asmadmin
useradd -u 6001 -g oinstall -G asmadmin,asmdba,asmoper grid
useradd -u 6002 -g oinstall -G dba,asmadmin oracle
修改oracle和grid的密码
#修改密码
passwd oracle
P@ssowrd123
passwd grid
P@ssword123
再次查看用户的情况
#出现下面信息代表正确配置
id oracle
uid=6002(oracle) gid=5001(oinstall) 组=5001(oinstall),5005(asmadmin),5002(dba)
id grid
uid=6001(grid) gid=5001(oinstall) 组=5001(oinstall),5003(asmdba),5004(asmoper),5005(asmadmin)
手工创建目录并授权
(如果系统创建时已挂载了,则忽略)
mkdir /opt/oracle
mkdir -p /opt/oracle/app/grid
mkdir -p /opt/oracle/app/19c/grid
chown -R grid:oinstall /opt/oracle
mkdir -p /opt/oracle/app/oraInventory
chown -R grid:oinstall /opt/oracle/app/oraInventory
mkdir -p /opt/oracle/app/oracle/product/19c/dbhome_1
chown -R oracle:oinstall /opt/oracle/app/oracle
chmod -R 775 /opt/oracle
配置用户grid环境变量
#RAC1服务器
su - grid
vi ~/.bash_profile
umask 022
export ORACLE_SID=+ASM1
export ORACLE_BASE=/opt/oracle/app/grid
export ORACLE_HOME=/opt/oracle/app/19c/grid
export PATH=.:$PATH:$HOME/bin:$ORACLE_HOME/bin
source ~/.bash_profile
env |grep ORACLE
#RAC2服务器
su - grid
vi ~/.bash_profile
umask 022
export ORACLE_SID=+ASM2
export ORACLE_BASE=/opt/oracle/app/grid
export ORACLE_HOME=/opt/oracle/app/19c/grid
export PATH=.:$PATH:$HOME/bin:$ORACLE_HOME/bin
source ~/.bash_profile
env |grep ORACLE
配置用户oracle环境变量
#RAC1
su - oracle
vi ~/.bash_profile
umask 022
export ORACLE_BASE=/opt/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19c/dbhome_1
export ORACLE_UNQNAME=itpuxdb
export ORACLE_SID=itpuxdb1
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH=.:$PATH:$HOME/bin:$ORACLE_HOME/bin
source ~/.bash_profile
env |grep ORACLE
#RAC2
su - oracle
vi ~/.bash_profile
umask 022
export ORACLE_BASE=/opt/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19c/dbhome_1
export ORACLE_UNQNAME=itpuxdb
export ORACLE_SID=itpuxdb2
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH=.:$PATH:$HOME/bin:$ORACLE_HOME/bin
source ~/.bash_profile
env |grep ORACLE
4.2.配置STORAGE服务器
配置NFS共享存储服务器
IP:192.168.50.70
配置ASM目录
#NFS Server配置
vi /etc/exports
/asm *(rw,sync,no_wdelay,insecure,no_root_squash)
umount /opt/oracle
mkdir /asm
mount /dev/sda2 /asm
df -h
vi /etc/fstab
改:
9 UUID=264c61ce-718d-4e53-93a9-9c3202fcf2bf / xfs defaults 0 0
10 UUID=171af445-7ee7-4314-ab3c-0bc040dec5f1 /boot xfs defaults 0 0
11 UUID=5476661e-f597-4c16-95d7-9b9d8f91fe17 /opt/oracle xfs defaults 0 0
12 UUID=41496a28-0302-4320-a78d-67ef768ccc1f swap swap defaults 0 0
为:
9 UUID=264c61ce-718d-4e53-93a9-9c3202fcf2bf / xfs defaults 0 0
10 UUID=171af445-7ee7-4314-ab3c-0bc040dec5f1 /boot xfs defaults 0 0
11 UUID=5476661e-f597-4c16-95d7-9b9d8f91fe17 /asm xfs defaults 0 0
12 UUID=41496a28-0302-4320-a78d-67ef768ccc1f swap swap defaults 0 0
systemctl restart nfs-server.service
showmount -e
Export list for fgedu70:
/asm *
exportfs -v
/asm <world>(sync,no_wdelay,hide,no_subtree_check,sec=sys,rw,insecure,no_root_squash,no_all_squash)
showmount -e命令
主要作用是显示NFS服务器上所有已共享的目录列表。该命令通过查询NFS服务器的mountd守护进程获取信息
显示共享目录
执行showmount -e [NFS服务器IP]后,会返回该服务器当前所有开放的NFS共享目录及其允许访问的客户端范围。
exportfs命令位于Linux操作系统中,用于在NFS(Network File System)服务器上设置共享目录或文件。NFS是一种用于在网络上共享文件的协议。
exportfs命令的语法如下:
exportfs [选项] [目录]
选项:
-r:移除指定目录的导出。
-v:显示导出目录列表。
-h:显示帮助信息。
再次确认是否有关闭selinux和防火墙,没有的话按照以下方法关闭
#关闭SELINUX、防火墙
echo "SELINUX=disabled" > /etc/selinux/config
echo "#SELINUXTYPE=targeted" >> /etc/selinux/config
getenforce 1
systemctl stop firewalld.service
systemctl disable firewalld.service
4.2.RAC服务器挂载NFS存储
两台RAC服务器都需要操作
root用户:
#创建需要挂载的目录
mkdir /asm
#开机启动
vi /etc/fstab
192.168.50.70:/asm /asm nfs rw,bg,hard,nointr,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0 0 0
#挂载NFS存储
mount -a
#查看是否有挂载成功
df -h
#给grid管理权限
chown -R grid:asmadmin /asm

mount -a 是一个在 Linux 系统中用来挂载所有在 /etc/fstab 文件中定义的文件系统的命令。在 Linux 中,/etc/fstab 文件包含了系统启动时需要挂载的文件系统的信息,mount -a 命令会根据这些信息自动挂载这些文件系统。
mount -a 命令的作用:
挂载文件系统: mount -a 命令用于挂载 /etc/fstab 文件中定义的所有文件系统。
使用方法:
在终端中,mount -a 命令可直接使用,无需附加参数。执行该命令会根据 /etc/fstab 文件中的设定自动挂载文件系统。
4.3.创建共享磁盘
#在RAC1上面建立目录
mkdir -p /asm/oracleasm/disks
#这部分可以在RAC上面做,或者在存储上面做也是可以,但考虑到网络问题,优先在存储上面做
dd if=/dev/zero of=/asm/oracleasm/disks/asm1 bs=8192k count=1280
dd if=/dev/zero of=/asm/oracleasm/disks/asm2 bs=8192k count=1280
dd if=/dev/zero of=/asm/oracleasm/disks/asm3 bs=8192k count=1280
dd if=/dev/zero of=/asm/oracleasm/disks/asm4 bs=8192k count=1280
dd if=/dev/zero of=/asm/oracleasm/disks/asm5 bs=8192k count=1280
dd if=/dev/zero of=/asm/oracleasm/disks/asm6 bs=8192k count=128
dd if=/dev/zero of=/asm/oracleasm/disks/asm7 bs=8192k count=128
#在两台RAC服务器上面改
chown grid:asmadmin /asm/oracleasm/disks/asm1
chown grid:asmadmin /asm/oracleasm/disks/asm2
chown grid:asmadmin /asm/oracleasm/disks/asm3
chown grid:asmadmin /asm/oracleasm/disks/asm4
chown grid:asmadmin /asm/oracleasm/disks/asm5
chown grid:asmadmin /asm/oracleasm/disks/asm6
chown grid:asmadmin /asm/oracleasm/disks/asm7
#磁盘包
root(两台机都装):rpm -Uvh /opt/oracle/app/19c/grid/cv/rpm/cvuqdisk


检查配置的存储
#在两台RAC服务器上操作
cd /asm/oracleasm/disks/
ls -lsa
总用量 54525952
0 drwxr-xr-x 2 grid asmadmin 90 4月 28 11:33 .
0 drwxr-xr-x 3 grid asmadmin 19 4月 28 11:30 ..
10485760 -rw-r--r-- 1 grid asmadmin 10737418240 4月 28 11:32 asm1
10485760 -rw-r--r-- 1 grid asmadmin 10737418240 4月 28 11:32 asm2
10485760 -rw-r--r-- 1 grid asmadmin 10737418240 4月 28 11:32 asm3
10485760 -rw-r--r-- 1 grid asmadmin 10737418240 4月 28 11:32 asm4
10485760 -rw-r--r-- 1 grid asmadmin 10737418240 4月 28 11:33 asm5
1048576 -rw-r--r-- 1 grid asmadmin 1073741824 4月 28 11:33 asm6
1048576 -rw-r--r-- 1 grid asmadmin 1073741824 4月 28 11:33 asm7
五、GRID用户安装集群软件
安装GRID集群软件用grid
#在RAC1上安装
用户解压文件到grid_home目录
su - grid
cd $ORACLE_HOME
unzip /mnt/hgfs/oracle soft/LINUX.X64_193000_grid_home.zip
解压完成之后进入RAC1的GRID用户

打开终端
cd $ORACLE_HOME
ls
./gridSetup.sh

进入安装界面


SCAN的名称必须与服务器上面的名称一样


“虚拟机名称”修改为”fgedu61vip”

增加一个新的节点


SSH连接,输入密码,先点击设置,再点击测试(可能要3个密码一样)

上面测试通过之后,点击下一步,会进行校对,并把文件传输到第二胎服务器

选择“ASM和私网”


不创建数据库

扫描磁盘“/asm/oracleasm/disks/*”

使用前面5个磁盘即可

设置统一密码







检测系统是否符合要求

点击修复

根据提示操作,进入两台RAC服务器的ROOT用户

#进入RAC1和RAC2的ROOT用户,然后运行脚本(每次都不一样)
/tmp/GridSetupActions2025-04-28_09-36-01PM/CVU_19.0.0.0.0_grid/runfixup.sh
运行完脚本之后,点击确定

检测到仍有错误需要修复,先修复ASM权限问题

chmod 0660 /asm/oracleasm/disks/asm1
chmod 0660 /asm/oracleasm/disks/asm2
chmod 0660 /asm/oracleasm/disks/asm3
chmod 0660 /asm/oracleasm/disks/asm4
chmod 0660 /asm/oracleasm/disks/asm5
第二个错误
PRVG-11138 : 节点 "fgedu61" 上的接口 "ens36" 无法通过多点传送组 "224.0.0.251" 与节点 "fgedu61" 上的接口 "ens36" 通信 - 原因: 指定的接口无法使用多点传送地址进行通信。 - 操作: 确保在指定接口上启用了多点传送且接口间存在网络路径。
出现这个错误,必须要检测是否某一台服务器没有关闭防火墙
点击全部忽略进入一步安装


进入安装

核心关键两台RAC服务器都需要跑的脚本

#两台RAC服务器先运行一遍(先RAC1再到RAC2)
/opt/oracle/app/oraInventory/orainstRoot.sh
#两台RAC服务器再运行一遍(先RAC1再到RAC2)
/opt/oracle/app/19c/grid/root.sh
#第一台机器的部署成功截图

#第二台机器的截图

两个脚本安装完成后,点击OK,继续跑安装

没有用DNS,所以报错

点击跳过


到此,19C的集群软件安装完成。

六、ORACLE用户安装ORACLE19C
安装DB集群软件
用oracle用户解压文件到oracle_home目录
su - oracle
cd $ORACLE_HOME
unzip /mnt/hgfs/oracle\ soft/LINUX.X64_193000_db_home.zip
解压完成后,以ORACLE用户进入

用虚拟机启动安装
oracle:
cd $ORACLE HOME
./runInstaller




点击SSH连接,输入密码,先点击设置,再点击测试(两台RAC服务器的oracle用户的密码必须设置一致)



由于没有oper组,因此要选择dba组


提示错误,先进行修复


切换到终端的ROOT用户运行脚本
#RAC1与RAC2都必须运行
/tmp/InstallActions2025-04-29_00-44-58AM/CVU_19.0.0.0.0_oracle/runfixup.sh
点击全部忽略,然后点击下一步,继续安装



跑到大概92%,需要运行脚本,两台服务器都需要运行

/opt/oracle/app/oracle/product/19c/dbhome_1/root.sh

七、创建数据库
先查看两台RAC服务器的运行环境
#RAC1
su - oracle
env |grep ORACLE
ORACLE_UNQNAME=itpuxdb
ORACLE_SID=itpuxdb1
ORACLE_BASE=/opt/oracle/app/oracle
ORACLE_HOME=/opt/oracle/app/oracle/porduct/19c/dbhome_1
查看权限
cd /opt/oracle/app/oracle/product/19c/dbhome_1/bin
ls -lsa oracle
430916 -rwsr-s--x 1 oracle asmadmin 441257208 4月 29 01:18 oracle
---------------------------------------------------------------------------
#RAC2
su - oracle
env |grep ORACLE
ORACLE_UNQNAME=itpuxdb
ORACLE_SID=itpuxdb2
ORACLE_BASE=/opt/oracle/app/oracle
ORACLE_HOME=/opt/oracle/app/oracle/porduct/19c/dbhome_1
cd /opt/oracle/app/oracle/product/19c/dbhome_1/bin
ls -lsa oracle
430916 -rwsr-s--x 1 oracle oinstall 441257208 4月 29 01:22 oracle #权限不对
#修改权限
chown oracle:asmadmin oracle
chmod 6751 oracle
ls -lsa oracle
430916 -rwsr-s--x 1 oracle asmadmin 441257208 4月 29 01:22 oracle
集群先关闭再启动
#集群的启动与关闭
用root运行:
/opt/oracle/app/19c/grid/bin/crsctl stop crs
/opt/oracle/app/19c/grid/bin/crsctl start crs
#检查组件是否正常运行
/opt/oracle/app/19c/grid/bin/crsctl check crs
进入ORACLE用户,打开终端
dbca



















大约耗时30分钟,创建数据库

创建完成,关闭

八、数据库的基本操作(测试)
oracle用户:
sqlplus "/as sysdba"
#表空间创建
create tablespace fgedu datafile '+DATA' size 10m;
#用户创建
create user fgedu identified by fgedu123 default tablespace fgedu;
grant dba to fgedu;
#创建表
conn fgedu/fgedu123
create table itpuxt1(id number(12) primary key, name varchar(20));
Oracle 数据插入
insert into itpuxt1 values(1,'fgedu01');
insert into itpuxt1 values(2,'fgedu02');
commit;
Oracle 数据查询
select * from itpuxt1
#关闭数据库
shutdown immediate;
九、集群的维护和管理
10g/11R1 RAC集群启动
任意一节点
su - root
#crs_start -all
如果两个节点
su - root
#crsctl start crs
10g/11R1 RAC集群启动停止
任意一节点
su - root
#crs_stop -all
如果两个节点
su - root
#crsctl stop crs
11gR2/12c/18c/19c RAC集群启动方法
所有节点
su - root
#crsctl start crs
11gR2/12c/18c/19c RAC集群停止方法
su - root
#crsctl stop crs
测试
fgedu61:
root用户:
cd /opt/oracle/app/19c/grid/bin/
./crsctl stop crs
fgedu62:
root用户:
cd /opt/oracle/app/19c/grid/bin/
./crsctl stop crs
查看是否已停止
./crsctl check crs
CRS-4639: Could not contact Oracle High Availability Services
#必须要看到4个ONLINE才是完全启动
./crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
#查看各类服务的状态
cd /opt/oracle/app/19c/grid/bin/
./crsctl status res -t
#以下操作需要检查所有节点
#查看数据库是否有启动
select open_mode from v$database;
-------------------------------------------
#显示读写模式一般为正常
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE
-------------------------------------------
#查看实例也是可以
select instance_name,status from v$instance;
#显示open状态是正常
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
itpuxdb1 OPEN
--------------------------------------------
oracle用户:
#查看监听状态
lsnrctl status
十、ASM磁盘简单管理(界面)
#asm磁盘管理
oracle 10g
su - oracle
dbca
在oracle 10g中,利用dbca向导对ASM进行管理


#asm磁盘管理
适用于:oracle 11gR2/12c/18c/19c
su - grid
asmca


测试:
进入桌面,grid用户,打开终端,输入
asmca

一般用得上的是3个
1.创建、配置或删除ORACLE ASM磁盘组
2.在磁盘组中添加或者删除磁盘
3.编辑磁盘组属性
这里可以看得到磁盘的状态


这里可以看到磁盘的状态

当容量不够的时候可以通过创建磁盘的方法来增加容量



也可以删除其中一个磁盘

