本文介绍: Linux Centos7静默安装(非图形安装)Oracle RAC 11gR2(Oracle RAC 11.2.0.4)

Oracle RAC (全称Oracle Real Application Clusters )静默安装(非图形安装)教程。

由于这篇文章花费了我太多时间,设置了仅粉丝可见,见谅。

环境说明:

虚拟机软件:VMware Workstation 16 Pro
虚拟机操作系统:Centos7 64位
数据库版本:Oracle 11gR2(11.2.0.4.0)
数据库软件(Oracle Database software): Oracle11gR2(11.2.0.4.0)
集群软件(Cluster software): Oracle grid infrastructure 11gR2(11.2.0.4.0)
共享存储:ASM

# oracle安装包
p13390677_112040_Linux-x86-64_1of7.zip
p13390677_112040_Linux-x86-64_2of7.zip
# grid安装包
p13390677_112040_Linux-x86-64_3of7.zip
# 补丁包18370031
p18370031_112040_Linux-x86-64.zip

官方文档:Oracle Database 在线文档 11g

主机规划

主机名 public ip private ip virtual ip (VIP) scan ip 用户名 密码
rac1 192.168.111.201 192.168.63.201 192.168.111.211 192.168.111.222 grid
oracle
grid
oracle
rac2 192.168.111.202 192.168.63.202 192.168.111.212

共享磁盘规划

路径 大小 用途
/dev/sdb 2G vote(投票)
/dev/sdc 2G vote(投票)
/dev/sdd 2G vote(投票)
/dev/sde 10G arch(归档)
/dev/sdf 20G data(数据)

最终效果

共7个IP地址,2块网卡,其中public、vip和scan都在同一个网段,private在另一个网段。
主机名不要包含下横线,如:RAC_01是不允许的;

准备5块共享存储盘(测试其实可以只挂载一个盘,分5个区效果一样,但是生产不建议这样做,放在一块磁盘上io压力太大)

注意:
为了方便知道每条命令,使用什么用户执行,在哪个节点上执行,我保留了命令如下头部信息。
如果文中没有注明使用什么用户执行,请注意命令前面的部分。

[grid@rac1 ~]$ ls 
[grid@rac2 ~]$ ls 
[oracle@rac1 ~]$ ls 
[oracle@rac2 ~]$ ls 
[root@rac1 ~]# ls 
[root@rac2 ~]# ls 

一、准备两台服务器

服务器安装参考:VMware16安装Centos7

创建完整克隆,准备两台服务器。虚拟机名称分别命名为 rac1、rac2

需要保证两台服务器时间一致。

二、准备两张网卡

准备两张网卡,一个网卡为NAT模式,一个网卡为仅主机模式。

公有网卡(NAT模式):分配 public ip 、virtual ip (VIP)、scan ip。
私有网卡(仅主机模式):分配 private ip。

VMware创建网卡过程:编辑(E) 》 虚拟网络编辑器(N)… 》更改设置(C) 》添加网络(E)…

我这里已经有两张网卡,就不添加了,VMnet1网卡为“仅主机模式”,VMnet8网卡为“NAT模式”。

这里需要记住,我2个网卡的子网地址分别为:192.168.63.0、192.168.111.0后面设置静态ip必须在这两个ip段中。

两台虚拟服务器需要在关机模式下,把另外一张网卡添加上。

添加块网卡方法如下所示:

第1台主机 rac1 添加网卡:选中第一台虚拟机rac1 》右键 》 设置(S)… 》硬件 》添加(A)… 》网络适配器 》

自定义,选择VMnet1网卡,这里VMnet1要根据自己实际情况来,我上面截图中两张网卡就是VMnet1和VMnet8。

三、准备5块共享磁盘

准备5块共享存储盘(其实可以只挂载一个盘,分5个区效果一样,但是生产不建议这样做,放在一块磁盘上io压力太大)

添加创建好的五块虚拟硬盘,要求是独立永久属性。各盘存储情况如下:

3个2G的投票盘,一个10G的备份盘,一个20G的数据盘。
分别命名为 ocr1、ocr2、ocr3、backup、data

第一步:创建共享磁盘

该步骤可以用cmd命令也可以用图形界面,本文采用用图形界面行进行添加。

第1台主机 rac1 创建磁盘:

创建磁盘:选中第一台虚拟机rac1 》右键 》 设置(S)… 》硬件 》添加(A)… 》选中硬盘 》

  

磁盘类型,默认

   

创建新的虚拟磁盘

指定磁盘容量
勾选立即分配所有磁盘空间,并存储为单个文件。

指定磁盘文件存放位置,分别命令为 ocr1、ocr2、ocr3、backup、data

硬盘高级设置
选择创建的磁盘,并打开高级设置,勾选“独立”模式和“永久”属性。

  

Vmware 虚拟机无法设置磁盘模式 “独立模式”显示为为灰色
原因:虚拟机系统拍摄了快照。
解决办法:删除快照即可。

分别创建其他磁盘,分别命令为 ocr1、ocr2、ocr3、backup、data,磁盘文件如下图所示:

这里创建了3个2G的投票盘,一个10G的备份盘,一个20G的数据盘。

共享磁盘,物理文件保存位置,后面第2台主机添加磁盘需要用到。

 第二步:添加共享磁盘

在第一步,在第1台主机 rac1 上已经创建了5个共享磁盘,这一步不再需要创建磁盘,只需要将5个磁盘添加上即可。

添加磁盘:选中第二台虚拟机rac2 》右键 》 设置(S)… 》硬件 》添加(A)… 》选中硬盘 》

   

选择 “使用现有 虚拟磁盘(E)”

选择,前面创建好的磁盘 

选中刚新增的硬盘,高级,设置为独立永久模式。

同理添加其他4个硬盘。

此时两台虚拟机都添加了同一块磁盘,但启动时会报错,因为会造成磁盘的征用。

那么更改虚拟机配置文件,找到两台虚拟机下的.vmx文件,分别添加以下内容。

参数1:disk.locking=”FALSE”。参数说明:虚拟机系统在启动的时候会锁定磁盘,当启动虚机1后共享磁盘被锁定了,虚机2就起不来了。
参数2:scsi[n].sharedBus = “virtual” 。参数说明:以上的设置表示所有的BUS都共享,vmare推荐这种做法。

关机情况下设置,scsi0.sharedBus 这里的0根据自己的实际情况来可以搜索下自己rac1.vmx配置文件下 scsi 后面的数字是多少。

rac1.vmx

scsi0.sharedBus= "virtual"
disk.locking= "false"
diskLib.dataCacheMaxSize= "0"
diskLib.dataCacheMaxReadAheadSize= "0"
diskLib.DataCacheMinReadAheadSize= "0"
diskLib.dataCachePageSize= "4096"
diskLib.maxUnsyncedWrites= "0"

rac2.vmx

scsi0.sharedBus= "virtual"
disk.locking= "false"
diskLib.dataCacheMaxSize= "0"
diskLib.dataCacheMaxReadAheadSize= "0"
diskLib.DataCacheMinReadAheadSize= "0"
diskLib.dataCachePageSize= "4096"
diskLib.maxUnsyncedWrites= "0"

四、配置网卡和主机名

1、关闭防火墙和SELinux

两个节点都要关闭。

# 关闭防火墙
systemctl stop firewalld 
systemctl disable firewalld

# 关闭SELinux
vi /etc/selinux/config
# 也就是修改文件 /etc/selinux/config 设置SELINUX=disabled
SELINUX=disabled

2、修改主机名

主机名分别为 rac1、rac2

# 节点1
hostnamectl set-hostname rac1

# 节点2
hostnamectl set-hostname rac2

3、配置网卡

显示所有网卡,我这里有两张网卡 ens32、ens33

[root@rac1 ~]# nmcli con show
NAME        UUID                                  TYPE      DEVICE
ens32       661c00dc-8371-4f29-87cc-1eea3ad2a607  ethernet  ens32
有线连接 1  8f918403-5122-35c2-9081-2e56884b784f  ethernet  ens33

 修改网卡,网卡ens32为NAT模式,作为public ip,网卡ens33为仅主机模式,作为private ip。

第1台主机 rac1 配置如下:

# 配置公网ip
vi /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens32"
DEVICE="ens32"
ONBOOT="yes"

IPADDR="192.168.111.201"
NETMASK="255.255.255.0"
GATEWAY="192.168.111.2"
DNS1="8.8.8.8"
DNS2="114.114.114.114"
# 配置私网ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33

仅主机模式这张网卡,不要配置网关,否则不能正常联网。 

TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes

IPADDR=192.168.63.201
NETMASK=255.255.255.0
NETWORK=192.168.63.0

重启网卡,使其生效

service network restart

第2台主机 rac2 配置如下:

# 配置公网ip
vi /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens32"
DEVICE="ens32"
ONBOOT="yes"

IPADDR="192.168.111.202"
NETMASK="255.255.255.0"
GATEWAY="192.168.111.2"
DNS1="8.8.8.8"
DNS2="114.114.114.114"
# 配置私网ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33

仅主机模式这张网卡,不要配置网关,否则不能正常联网。  

TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes

IPADDR=192.168.63.202
NETMASK=255.255.255.0
NETWORK=192.168.63.0

重启网卡,使其生效

service network restart

4、设置host

2个节点均配置相同,如下:

# 在结尾处新增如下7个
vi /etc/hosts
#Public IP
192.168.111.201		rac1
192.168.111.202		rac2

#Private IP
192.168.63.201		rac1-priv
192.168.63.202		rac2-priv

#Virtual IP
192.168.111.211		rac1-vip
192.168.111.212		rac2-vip

#Scan IP
192.168.111.222		rac-scan

在两个节点上通过ping验证两个节点是否可通 ,另外3个没有配置在网卡中ping会错误。

ping rac1
ping rac2
ping rac1-priv
ping rac2-priv

五、创建用户和组

Oracle建议以不同的用户分别安装Grid Infrastructure软件、Oracle数据库软件。
一般以grid用户安装Grid Infrastructure,oracle用户安装Oracle数据库软件。
grid、oracle用户需要属于不同的用户组。
在配置RAC时,还要求这两个用户在RAC的不同节点上uid、gid要一致。

创建5个组
OSDBA组:dba,oinstall。
Oracle Inventory组:asmdba,asmoper,asmadmin作为ASM磁盘管理组。

上述创建的所有用户和组在每台机器上的名称和对应ID号,口令,以及属组关系和顺序必须保持一致。grid和oracle密码不过期。

创建组:

groupadd -g 1000 oinstall
groupadd -g 1001 dba
groupadd -g 1002 oper
groupadd -g 1003 asmadmin
groupadd -g 1004 asmdba
groupadd -g 1005 asmoper

创建grid和oracle用户:

#官方文档2.5.7 创建角色分配的组、用户和路径的示例
useradd -u 1100 -g oinstall -G dba,asmdba,asmoper,asmadmin grid

#官方文档 2.5.5.2.8 创建 Oracle 软件所有者用户
useradd -u 1101 -g oinstall -G dba,asmdba,oper oracle

如果用户已经存在,修改组命令

usermod -g oinstall -G dba,asmdba,asmoper,asmadmin grid
usermod -g oinstall -G dba,asmdba,oper oracle

 查看

id oracle
id grid

创建目录结构 

mkdir -p  /u01/app/11.2.0/grid
mkdir -p /u01/app/grid
mkdir /u01/app/oracle
chown -R grid:oinstall /u01
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/

为oracle和grid用户设密码

echo "oracle" | passwd --stdin oracle  #为oracle用户设置密码为oracle
echo "grid" | passwd --stdin grid      #为grid用户设置密码grid

设置oracle和grid用户密码永不过期:

chage -M -1 oracle
chage -M -1 grid
chage -l oracle
chage -l grid

六、设置系统参数

以下操作,两个节点都要操作。

1、在配置文件 /etc/sysctl.conf 末尾添加以下内容:

kernel.msgmnb = 65536 
kernel.msgmax = 65536 
kernel.shmmax = 68719476736 
kernel.shmall = 4294967296 
kernel.shmmni = 4096 
kernel.sem = 250 32000 100 128 
fs.aio-max-nr = 1048576 
fs.file-max = 6815744 
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 = 1048586 
net.ipv4.tcp_wmem = 262144 262144 262144 
net.ipv4.tcp_rmem = 4194304 4194304 4194304

执行以下命令生效

sysctl -p

2、配置shell限制
修改 /etc/security/limits.conf 配置文件,末尾添加以下内容:

grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

3、配置login
在 /etc/pam.d/login 文件,末尾添加以下内容:

session    required     pam_limits.so

4、禁用 NTP 服务,没有 NTP 服务,那就不用管。

systemctl stop ntpd

5、配置grid和oracle用户的环境变量文件

grid用户

## 节点1如下配置
su - grid
vi .bash_profile

export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=+ASM1  # RAC1
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.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
umask 022



## 节点2如下配置
su - grid
vi .bash_profile

export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=+ASM2  # RAC2
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.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
umask 022

执行 source .bash_profile  命令使配置生效。

Oracle用户

## 节点1如下配置
su - oracle
vi .bash_profile

export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=orcl1  # RAC1
export ORACLE_UNQNAME=oradb
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib



## 节点2如下配置
su - oracle
vi .bash_profile

export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=orcl2  # RAC2
export ORACLE_UNQNAME=oradb
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

执行 source .bash_profile 命令使配置生效。

七、ssh互信

配置 oracle 用户和 grid 用户 ssh 互信。

这是很关键的一步,这里采用手动配置互信,还可以使用官方脚本设置。

切换至oracle用户,在两个主机上生成密钥文件,需逐行执行,生成过程中全部回车

# 节点1执行
# 执行后,一直回车
[oracle@rac1 ~]$ ssh-keygen -t rsa

# 节点2执行
# 执行后,一直回车
[oracle@rac2 ~]$ ssh-keygen -t rsa

在rac1主机执行,以下命令需逐行执行:需要输入密码。

#下面的目的是将公钥放到对方信任名单中
[oracle@rac1 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

# 将rac2节点的key追加到当前节点的authorized_keys文件中
# 提示yes/no,输入:yes,提示输入oracle密码,输入:oracle
[oracle@rac1 ~]$ ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

[oracle@rac1 ~]$ chmod 600 ~/.ssh/authorized_keys

在rac2主机执行:

# 将节点1的 authorized_keys 复制到当前节点
[oracle@rac2 ~]$ ssh rac1 cat ~/.ssh/authorized_keys >> ~/.ssh/authorized_keys
[oracle@rac2 ~]$ chmod 600 ~/.ssh/authorized_keys

测试一下,相互之间是否在oracle用户下已经免密登录了 ,提示 (yes/no)?  输入yes

ssh rac1
ssh rac2
ssh rac2
ssh rac1
ssh rac1-priv 
ssh rac2-priv 

切换至grid用户,同上:

# 节点1执行
# 执行后,一直回车
[grid@rac1 ~]$ ssh-keygen -t rsa

# 节点2执行
# 执行后,一直回车
[grid@rac2 ~]$ ssh-keygen -t rsa

在rac1主机执行,以下命令需逐行执行:需要输入密码。 

#下面的目的是将公钥放到对方信任名单中
[grid@rac1 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

# 将rac2节点的key追加到当前节点的authorized_keys文件中
# 提示yes/no,输入:yes,提示输入grid密码,输入:grid
[grid@rac1 ~]$ ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

[grid@rac1 ~]$ chmod 600 ~/.ssh/authorized_keys

 在rac2主机执行:

# 将节点1的 authorized_keys 复制到当前节点
[grid@rac2 ~]$ ssh rac1 cat ~/.ssh/authorized_keys >> ~/.ssh/authorized_keys
[grid@rac2 ~]$ chmod 600 ~/.ssh/authorized_keys

测试一下,相互之间是否在grid用户下已经免密登录了  ,提示 (yes/no)?  输入yes

ssh rac1
ssh rac2
ssh rac2
ssh rac1 
ssh rac1-priv 
ssh rac2-priv 

说明:关于互信设置,还有另外一种方式,直接使用软件包解压后提供的ssh互信设置脚本(sshUserSetup.sh)来完成,如果觉得前面设置方法麻烦的话,也可尝试用脚本设置
Oacle安装包解压后,脚本位于:database/sshsetup/sshUserSetup.sh

./sshUserSetup.sh -user grid  -hosts "rac1 rac2" -advanced exverify –confirm

./sshUserSetup.sh -user oracle  -hosts "rac1 rac2" -advanced exverify -confirm

由于我前面已经手动设置过互信,所以直接跳过下面步骤。 

八、安装依赖

我系统版本是Linux7

执行以下命令,安装依赖包。

yum install -y binutils compat-libcap1 compat-libstdc++-33 elfutils-libelf-devel smartmontools gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat kmod-oracleasm unzip

用 grid 用户登录上传 p13390677_112040_Linux-x86-64_3of7.zip 并解压

#用 grid 用户上传文件到grid的home目录
[grid@rac1 ~]$ pwd
/home/grid

[grid@rac1 ~]$ ll
-rw-r--r-- 1 root root 1205251894 1月   6 20:33 p13390677_112040_Linux-x86-64_3of7.zip

# 解压文件
[grid@rac1 ~]$ unzip p13390677_112040_Linux-x86-64_3of7.zip

使用root用户安装cvuqdisk,安装包在解压目录中/home/grid/grid/rpm
两个节点都需要安装cvuqdisk,否则,集群验证时程序就无法发现共享磁盘。

[root@rac1 ~]# cd /home/grid/grid/rpm
[root@rac1 rpm]# rpm -ivh cvuqdisk-1.0.9-1.rpm
准备中...                          ################################# [100%]
Using default group oinstall to install package
正在升级/安装...
   1:cvuqdisk-1.0.9-1                 ################################# [100%]

传输到第2个节点上进行安装:

[root@rac2 ~]# scp rac1:/home/grid/grid/rpm/cvuqdisk-1.0.9-1.rpm .

[root@rac2 ~]# rpm -ivh cvuqdisk-1.0.9-1.rpm
准备中...                          ################################# [100%]
Using default group oinstall to install package
正在升级/安装...
   1:cvuqdisk-1.0.9-1                 ################################# [100%]

九、ASM磁盘

用oracle asm创建ASM磁盘。

1、安装asm软件

oracle asm需要三个包:kmod-oracleasm, oracleasm-support, oracleasmlib。

官方下载页面:Oracle ASMLib Downloads for Red Hat Enterprise Linux 7

备份下载地址:https://download.csdn.net/download/u014644574/88671993

#下载 rpm 包
curl -o oracleasmlib-2.0.12-1.el7.x86_64.rpm https://download.oracle.com/otn_software/asmlib/oracleasmlib-2.0.12-1.el7.x86_64.rpm

curl -o oracleasm-support-2.1.11-2.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracleasm-support-2.1.11-2.el7.x86_64.rpm

安装oracle asm:依次安装 rpm 包(rac1和rac2都需要执行)

# kmod-oracleasm 这个前面已经安装
# yum -y install kmod-oracleasm
rpm -ivh oracleasmlib-2.0.12-1.el7.x86_64.rpm
rpm -ivh oracleasm-support-2.1.11-2.el7.x86_64.rpm

初始化 ASM(rac1和rac2都需要执行)

[root@rac1 ~]# oracleasm configure -i


Default user to own the driver interface []: grid          # 选择用户:grid
Default group to own the driver interface []: asmadmin     # 选择用户所在的组:asmadmin

Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
#初始化
[root@rac1 ~]# oracleasm init

查看asm状态

[root@rac1 ~]# oracleasm  status
Checking if ASM is loaded: yes
Checking if /dev/oracleasm is mounted: yes

2、磁盘分区

由于是共享磁盘,只需在节点rac1上分区,节点rac2扫描即可

#查看已经添加的磁盘
lsblk

#查询结果如下
sdb      8:16   0    2G  0 disk
sdc      8:32   0    2G  0 disk
sdd      8:48   0    2G  0 disk
sde      8:64   0   10G  0 disk
sdf      8:80   0   20G  0 disk

对5个磁盘分区,这里有5块磁盘,需要每个磁盘做1个分区,如果只有一块磁盘做5个分区效果是一样的。

​[root@rac1 ~]# fdisk /dev/sdb
[root@rac1 ~]# fdisk /dev/sdc
[root@rac1 ~]# fdisk /dev/sdd
[root@rac1 ~]# fdisk /dev/sde
[root@rac1 ~]# fdisk /dev/sdf

具体操作如下:

②n表示新建分区
③p表示类型为:主分区
④假如输入1分区名称就叫 /dev/sdb1,输入3分区名称就叫 /dev/sdb3
⑤w表示保存修改。
起始扇区设置,直接回车,使用默认即可,如果要分多个区需要手动调整。

5块磁盘分区完成后,查看分区情况

[root@rac1 ~]# lsblk
sdb      8:16   0    2G  0 disk
└─sdb1   8:17   0    2G  0 part
sdc      8:32   0    2G  0 disk
└─sdc1   8:33   0    2G  0 part
sdd      8:48   0    2G  0 disk
└─sdd1   8:49   0    2G  0 part
sde      8:64   0   10G  0 disk
└─sde1   8:65   0   10G  0 part
sdf      8:80   0   20G  0 disk
└─sdf1   8:81   0   20G  0 part

另外一台,使用命令 更新磁盘信息

[root@rac2 ~]# partprobe
[root@rac2 ~]# lsblk

3、创建 ASM 磁盘

1、在任意一个节点创建 ASM 磁盘
在节点 rac1 进行如下操作:

# 查看 ASM 磁盘列表
[root@rac1 ~]# oracleasm  listdisks   # 无返回结果

# 再次确认下磁盘
[root@rac1 ~]# fdisk -l | grep ^/dev/sd
/dev/sdb1            2048     4194303     2096128   83  Linux
/dev/sdc1            2048     4194303     2096128   83  Linux
/dev/sdd1            2048     4194303     2096128   83  Linux
/dev/sde1            2048    20971519    10484736   83  Linux
/dev/sdf1            2048    41943039    20970496   83  Linux
# 创建 ASM 磁盘
[root@rac1 ~]# oracleasm createdisk ocr1 /dev/sdb1
[root@rac1 ~]# oracleasm createdisk ocr2 /dev/sdc1
[root@rac1 ~]# oracleasm createdisk ocr3 /dev/sdd1
[root@rac1 ~]# oracleasm createdisk bak1 /dev/sde1
[root@rac1 ~]# oracleasm createdisk data1 /dev/sdf1

# 查看 ASM 磁盘列表
[root@rac1 ~]# oracleasm  listdisks
BAK1
DATA1
OCR1
OCR2
OCR3

2、在另一个节点扫描 ASM 磁盘
在节点 rac2 执行如下操作:

# 查看 ASM 磁盘列表
[root@rac2 ~]# oracleasm  listdisks # 无返回结果

# 扫描 ASM 磁盘信息
[root@rac2 ~]# oracleasm scandisks

# 重新查看 ASM 磁盘列表
[root@rac2 ~]# oracleasm  listdisks
BAK1
DATA1
OCR1
OCR2
OCR3

十、安装grid软件

1、检查集群安装的是否满足条件

手动运行 cvu 使用验证程序验证Oracle集群件要求,校验集群安装的可行性。
节点 rac1 到 grid 软件目录下执行 runcluvfy.sh命令

[grid@rac1 ~]$ cd /home/grid/grid

# 注意这里的参数rac1,rac2是两台节点的主机名
[grid@rac1 grid]$ ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -fixup -verbose

结果:”pdksh” 的 包存在性 检查失败,这个错误不用管,pdksh只有在Linux 4上需要,Linux 5/6/7都已经被ksh取代,忽略该错误。

未检测通过的显示为failed,有的failed可以根据提供的脚本进行修复。有的需要根据情况进行修复,有的failed也可以忽略。

2、修改 grid 响应文件

1、在节点1执行如下操作

[grid@rac1 ~]$ cd /home/grid/grid/response
[grid@rac1 response]$ cp grid_install.rsp grid_install.rsp.bak
[grid@rac1 response]$ vi grid_install.rsp

2、修改 grid 响应文件内容如下

# oracle安装响应文件版本
oracle.install.responseFileVersion=/oracle/install/rspfmt_crsinstall_response_schema_v11_2_0

# 当前安装节点的计算机名称:rac1,查询方式 hostname
ORACLE_HOSTNAME=rac1

# 选择Inventory目录,默认:/u01/app/oraInventory
INVENTORY_LOCATION=/u01/app/oraInventory

# 语言:en,zh_CN
SELECTED_LANGUAGES=en,zh_CN

# 指定安装类型:CRS_CONFIG:为集群配置
oracle.install.option=CRS_CONFIG

# grid 的 BASE目录:/u01/app/grid
ORACLE_BASE=/u01/app/grid

# grid 的 HOME 目录:/u01/app/11.2.0/grid
ORACLE_HOME=/u01/app/11.2.0/grid

# 设置组信息
oracle.install.asm.OSDBA=asmdba
oracle.install.asm.OSOPER=asmoper
oracle.install.asm.OSASM=asmadmin

# scan名称:为/etc/hosts文件中配置的rac-scan
oracle.install.crs.config.gpnp.scanName=rac-scan

# 集群监听端口号:1521
oracle.install.crs.config.gpnp.scanPort=1521

# 集群名称:rac-cluster
oracle.install.crs.config.clusterName=rac-cluster

# 不使用GNS:以下四个选项不用设置
oracle.install.crs.config.gpnp.configureGNS=false
oracle.install.crs.config.gpnp.gnsSubDomain=
oracle.install.crs.config.gpnp.gnsVIPAddress=
oracle.install.crs.config.autoConfigureClusterNodeVIP=

# 节点信息,跟为/etc/hosts文件中配置对应:rac1:rac1-vip,rac2:rac2-vip
oracle.install.crs.config.clusterNodes=rac1:rac1-vip,rac2:rac2-vip


# 网络地址:IP地址和子网掩码的二进制形式进行与运算,即IPADDR和NETMASK的二进制与运算结果。
# 网卡信息和网段:网卡1名称:网络地址(公网):1,网卡2名称:网络地址(私网):2(1表示公共,2表示私有)
oracle.install.crs.config.networkInterfaceList=ens32:192.168.111.0:1,ens33:192.168.63.0:2

# 注册表(OCR)和投票的存储类型
oracle.install.crs.config.storageOption=ASM_STORAGE

# 上一步使用 ASM_STORAGE,以下选项不用设置
oracle.install.crs.config.sharedFileSystemStorage.diskDriveMapping=
oracle.install.crs.config.sharedFileSystemStorage.votingDiskLocations=
oracle.install.crs.config.sharedFileSystemStorage.votingDiskRedundancy=NORMAL
oracle.install.crs.config.sharedFileSystemStorage.ocrLocations=
oracle.install.crs.config.sharedFileSystemStorage.ocrRedundancy=NORMAL

# 不使用IPMI,以下选项不用设置
oracle.install.crs.config.useIPMI=false
oracle.install.crs.config.ipmi.bmcUsername=
oracle.install.crs.config.ipmi.bmcPassword=

# 配置 ASM 操作密码:oracle
oracle.install.asm.SYSASMPassword=oracle

# 配置 ASM 表决盘名称:OCR
oracle.install.asm.diskGroup.name=OCR

# 配置 ASM 表决盘冗余选项:NORMAL(默认值)
oracle.install.asm.diskGroup.redundancy=NORMAL

# 配置 单元大小ASM AUSize:1(默认值)
oracle.install.asm.diskGroup.AUSize=1

# 设置表决盘所使用的裸盘:查询方式:ll /dev/oracleasm/disks/*
oracle.install.asm.diskGroup.disks=/dev/oracleasm/disks/OCR1,/dev/oracleasm/disks/OCR2,/dev/oracleasm/disks/OCR3

# 配置 ASM 磁盘位置:/dev/oracleasm/disks
oracle.install.asm.diskGroup.diskDiscoveryString=/dev/oracleasm/disks/*

# 配置 ASMSNMP 密码:oracle
oracle.install.asm.monitorPassword=oracle

# 指定要升级的节点
oracle.install.crs.upgrade.clusterNodes=

# 升级ASM
oracle.install.asm.upgradeASM=false

# 设置系统自动更新选项:SKIP_UPDATES跳过更新
oracle.installer.autoupdates.option=SKIP_UPDATES

# 不自动更新,以下选项不用设置
oracle.installer.autoupdates.downloadUpdatesLoc=
AUTOUPDATES_MYORACLESUPPORT_USERNAME=
AUTOUPDATES_MYORACLESUPPORT_PASSWORD=

# 配置代理服务器选项:不使用代理服务器
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=
PROXY_REALM=

3、开始安装 grid 软件

运行安装脚本 runInstaller

[root@rac1 ~]# su - grid
[grid@rac1 ~]$ cd /home/grid/grid

[grid@rac1 grid]$ ll
total 52
drwxr-xr-x  4 grid oinstall   281 Aug 26  2013 install
-rw-r--r--  1 grid oinstall 30016 Aug 27  2013 readme.html
drwxr-xr-x  2 grid oinstall    58 Jun 11 22:08 response
drwxr-xr-x  2 grid oinstall    34 Aug 26  2013 rpm
-rwxr-xr-x  1 grid oinstall  4878 Aug 26  2013 runcluvfy.sh
-rwxr-xr-x  1 grid oinstall  3268 Aug 26  2013 runInstaller
drwxr-xr-x  2 grid oinstall    29 Aug 26  2013 sshsetup
drwxr-xr-x 14 grid oinstall  4096 Aug 26  2013 stage
-rw-r--r--  1 grid oinstall   500 Aug 27  2013 welcome.html

#安装
[grid@rac1 grid]$ ./runInstaller  -force -noconfig -IgnoreSysPreReqs -showProgress -ignorePrereq -silent -responseFile /home/grid/grid/response/grid_install.rsp



#安装成功提示,而且告诉后续需要执行3个脚本
以 root 用户的身份执行以下脚本:
        1. /u01/app/oraInventory/orainstRoot.sh
        2. /u01/app/11.2.0/grid/root.sh
..................................................   100% 完成。

执行 Root 脚本成功。
以安装用户的身份执行以下脚本来完成配置。
        1. /u01/app/11.2.0/grid/cfgtoollogs/configToolAllCommands RESPONSE_FILE=<response_file>

Successfully Setup Software.

分别在节点 rac1 和 rac2 上按顺序以 root 用户身份执行以下两个脚本
(1)执行脚本:/u01/app/oraInventory/orainstRoot.sh
脚本的作用:修改目录的权限。

# 节点1
[root@rac1 disks]# /u01/app/oraInventory/orainstRoot.sh

# 节点2
[root@rac2 disks]# /u01/app/oraInventory/orainstRoot.sh

(2)执行脚本:/u01/app/11.2.0/grid/root.sh
脚本的作用:启动相关资源。

运行脚本前,需要打一个补丁18370031。否则会报错 CRS-2101: 。虽然这个错误可以通过下面的方式临时解决

# 执行过程中出现如下错误:
# [client(7427)]CRS-2101:The OLR was formatted using version 3.

#新开一个窗口,以 root 用户执行以下命令:
/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1

但是,这样解决的问题,在遇到重启Linux后,不能正常启动crs

CRS-2101:通过MOS查询,该问题是ORACLE的一个BUG,已经在11.2.0.3中修复,该问题是由于在执行root.sh时候 会在/tmp/.oracle下产生一个文件npohasd文件,此文件的只有root用户有权限,因此,出现不能启动ohasd进程。

因为RHEL 7使用systemd而不是initd运行进程和重启进程,而root.sh通过传统的initd运行ohasd进程。如果 init.ohasd进程 不存在,crs启动不了。 

这是由于RHEL 7改变了init的管理方式,出现了兼容性上的问题。官方给出了补丁18370031,在PSU 28429134也有包含,选择一个就好。

节点rac1安装,会自动安装到其他节点

[root@rac1 ~]# su - grid
# 上传补丁包18370031
[grid@rac1 ~]$ unzip p18370031_112040_Linux-x86-64.zip
[grid@rac1 ~]$ cd $ORACLE_HOME/OPatch


# 当前OPatch版本号
[grid@rac1 OPatch]$ ./opatch version
OPatch Version: 11.2.0.3.4
OPatch succeeded.

[grid@rac1 OPatch]$ pwd
/u01/app/11.2.0/grid/OPatch


#进入补丁解压包
[grid@rac1 ~]$ cd /home/grid/18370031

#打补丁,中途提示输入y即可。
[grid@rac1 18370031]$ /u01/app/11.2.0/grid/OPatch/opatch apply

 
#成功提示
Patch 18370031 successfully applied
Log file location: /u01/app/11.2.0/grid/cfgtoollogs/opatch/18370031_Jan_07_2024_00_39_58/apply2024-01-07_00-39-58上午_1.log

OPatch succeeded.

节点rac1执行脚本:

[root@rac1 ~]# /u01/app/11.2.0/grid/root.sh
Check /u01/app/11.2.0/grid/install/root_rac1_2022-06-12_01-19-58.log for the output of root script

另开一个窗口,查看节点1(rac1)执行 /u01/app/11.2.0/grid/root.sh 时的日志:

成功日志如下

[root@rac1 ~]# tail -f /u01/app/11.2.0/grid/install/root_rac1_2022-06-12_01-19-58.log

CRS-2672: Attempting to start 'ora.asm' on 'rac1'
CRS-2676: Start of 'ora.asm' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.OCR.dg' on 'rac1'
CRS-2676: Start of 'ora.OCR.dg' on 'rac1' succeeded
Configure Oracle Grid Infrastructure for a Cluster ... succeeded

失败如下

[root@rac1 ~]# tail -f /u01/app/11.2.0/grid/install/root_rac1_2022-06-12_01-19-58.log

Adding Clusterware entries to inittab
ohasd failed to start
Failed to start the Clusterware. Last 20 lines of the alert log follow: 
2022-06-12 01:21:53.036: 
[client(7427)]CRS-2101:The OLR was formatted using version 3.

节点rac2执行脚本:

[root@rac2 ~]# /u01/app/11.2.0/grid/root.sh
Check /u01/app/11.2.0/grid/install/root_rac2_2022-06-12_01-29-23.log for the output of root script

另开一个窗口,查看节点2(rac2)执行 /u01/app/11.2.0/grid/root.sh 时的日志: 

[root@rac2 ~]# tail -f /u01/app/11.2.0/grid/install/root_rac2_2022-06-12_01-29-23.log

3、在节点 rac1 上执行下面的脚本

[root@rac1 ~]# su - grid
[grid@rac1 ~]$ vi cfgrsp.properties

 设置响应内容如下

oracle.assistants.asm|S_ASMPASSWORD=
oracle.assistants.asm|S_ASMMONITORPASSWORD=
oracle.crs|S_BMCPASSWORD=

官方网站解释这个响应文件怎么配置:Installing and Configuring Oracle Database Using Response Files
如果您没有 BMC 卡,或者不想启用 IPMI,请将S_BMCPASSWORD输入留空。

[grid@rac1 ~]$ /u01/app/11.2.0/grid/cfgtoollogs/configToolAllCommands RESPONSE_FILE=/home/grid/cfgrsp.properties

十一、CRS 状态

1、查看 grid rac 状态
节点1:

[grid@rac1 ~]$ crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora....ER.lsnr ora....er.type ONLINE    ONLINE    rac1
ora....N1.lsnr ora....er.type ONLINE    ONLINE    rac1
ora.OCR.dg     ora....up.type ONLINE    ONLINE    rac1
ora.asm        ora.asm.type   ONLINE    ONLINE    rac1
ora.cvu        ora.cvu.type   ONLINE    ONLINE    rac1
ora.gsd        ora.gsd.type   OFFLINE   OFFLINE
ora....network ora....rk.type ONLINE    ONLINE    rac1
ora.oc4j       ora.oc4j.type  ONLINE    ONLINE    rac1
ora.ons        ora.ons.type   ONLINE    ONLINE    rac1
ora....SM1.asm application    ONLINE    ONLINE    rac1
ora....C1.lsnr application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    OFFLINE   OFFLINE
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   ora....t1.type ONLINE    ONLINE    rac1
ora....SM2.asm application    ONLINE    ONLINE    rac2
ora....C2.lsnr application    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    OFFLINE   OFFLINE
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac2
ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac1

我这里只有ora.gsd处于OFFLINE状态是正常的,仅仅当集群中存在9i版本的数据库软件时,ora.gsd资源才应处于在线状态(ONLINE),其他情况下,都应该保持OFFLINE状态。

也就是,执行如下命令,只有gsd是OFFLINE离线状态表示集群正常。

[grid@rac1 ~]$ crs_stat -t | grep OFFLINE
ora.gsd        ora.gsd.type   OFFLINE   OFFLINE
ora.rac1.gsd   application    OFFLINE   OFFLINE
ora.rac2.gsd   application    OFFLINE   OFFLINE

如果 ora.cvu OFFLINE 离线

# ora.cvu启动命令
[grid@rac1 ~]$ srvctl start cvu

2、查看 CRS 状态

查看本地节点的 CRS 状态,4个状态全是 online 在线

[grid@rac1 grid]$ 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

3、查看集群的 CRS 状态,3个状态全是 online 在线

[grid@rac1 grid]$ crsctl check cluster
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

4、查看集群中节点的配置信息

[grid@rac1 grid]$ olsnodes -n -i -s
rac1	1	rac1-vip	Active
rac2	2	rac2-vip	Active

5、查看集群件的表决磁盘信息

[grid@rac1 grid]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   346370b3c9784f88bf6c1cd51e8c3dd0 (/dev/oracleasm/disks/OCR1) [OCR]
 2. ONLINE   1924a6ec08824fefbfb1cfdc7c172cb7 (/dev/oracleasm/disks/OCR2) [OCR]
 3. ONLINE   36f4cb31efaa4f9ebf81fa478a82a48d (/dev/oracleasm/disks/OCR3) [OCR]
Located 3 voting disk(s).

6、查看集群 SCAN VIP 信息

[grid@rac1 ~]$  srvctl config scan
SCAN 名称: rac-scan, 网络: 1/192.168.111.0/255.255.255.0/ens32
SCAN VIP 名称: scan1, IP: /rac-scan/192.168.111.222

7、查看集群 SCAN Listener 信息

[grid@rac1 ~]$ srvctl config scan_listener
SCAN 监听程序 LISTENER_SCAN1 已存在。端口: TCP:1521

8、查看集群件 OCR 文件信息

[grid@rac1 grid]$ ocrcheck

9、查看集群件 OCR 备份信息

[grid@rac1 grid]$ ocrconfig -showbackup
PROT-24: Auto backups for the Oracle Cluster Registry are not available
PROT-25: Manual backups for the Oracle Cluster Registry are not available

10、查询节点实例

[grid@rac3 ~]$ srvctl status database -d oradb
实例 orcl1 正在节点 rac1 上运行
实例 orcl2 正在节点 rac2 上运行

11、 查看集群状态,两个重要的指标 asm 实例

[grid@rac3 ~]$ crsctl status res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
ora.asm
               ONLINE  ONLINE       rac1                     Started
               ONLINE  ONLINE       rac2                     Started
 
ora.oradb.db
      1        ONLINE  ONLINE       rac1                     Open
      2        ONLINE  ONLINE       rac2                     Open

十二、安装 Oracle 软件

1、创建磁盘组

创建两个磁盘组 DATA 和 BAK

#查看ASM磁盘
[root@rac1 ~]# ll /dev/oracleasm/disks/*
brw-rw---- 1 grid asmadmin 8, 65 12月 29 05:35 /dev/oracleasm/disks/BAK1
brw-rw---- 1 grid asmadmin 8, 81 12月 29 05:35 /dev/oracleasm/disks/DATA1
brw-rw---- 1 grid asmadmin 8, 17 12月 30 12:00 /dev/oracleasm/disks/OCR1
brw-rw---- 1 grid asmadmin 8, 33 12月 30 12:00 /dev/oracleasm/disks/OCR2
brw-rw---- 1 grid asmadmin 8, 49 12月 30 12:00 /dev/oracleasm/disks/OCR3

在节点 rac1 创建两个磁盘组 DATA 和 BAK

[root@rac1 ~]# su - grid
[grid@rac1 ~]$ sqlplus / as sysasm

-- 创建磁盘组 data
SQL> create diskgroup data external redundancy disk '/dev/oracleasm/disks/DATA1';
Diskgroup created.

-- 为磁盘组 data 添加磁盘,这里没有DATA2不用执行。
-- SQL> alter diskgroup data add disk '/dev/oracleasm/disks/DATA2';
-- Diskgroup altered.

-- 创建磁盘组 bak
SQL> create diskgroup bak external redundancy disk '/dev/oracleasm/disks/BAK1';
Diskgroup created.

-- 为磁盘组 bak 添加磁盘,这里没有BAK2不用执行。
-- SQL> alter diskgroup bak add disk '/dev/oracleasm/disks/BAK2';
-- Diskgroup altered.



-- 查看磁盘组信息
SQL> select INST_ID,name,free_mb,state from gv$asm_diskgroup;

   INST_ID NAME                              FREE_MB STATE
---------- ------------------------------ ---------- -----------
         1 OCR                                  5215 MOUNTED
         1 DATA                                20429 MOUNTED
         1 BAK                                 10189 MOUNTED
         2 OCR                                  5215 MOUNTED
         2 DATA                                    0 DISMOUNTED
         2 BAK                                     0 DISMOUNTED

6 rows selected.

新建的DATA和BAK状态为 DISMOUNTED。

在节点 rac2 上修改磁盘组的状态为 mount,这一步是为了测试集群节点任何一个节点操作效果是一样的。
在个节点 rac2 上执行如下操作:

[grid@rac2 ~]$ sqlplus / as sysasm

SQL> alter diskgroup data mount;

Diskgroup altered.

SQL> alter diskgroup bak mount;

Diskgroup altered.


--查看磁盘组信息
SQL> select INST_ID,name,free_mb,state from gv$asm_diskgroup;

   INST_ID NAME                              FREE_MB STATE
---------- ------------------------------ ---------- -----------
         2 OCR                                  5215 MOUNTED
         2 DATA                                20386 MOUNTED
         2 BAK                                 10146 MOUNTED
         1 OCR                                  5215 MOUNTED
         1 DATA                                20386 MOUNTED
         1 BAK                                 10146 MOUNTED

6 rows selected.

全部挂载成功。

2、修改 oracle 响应文件

用 oracle 用户登录上传 p13390677_112040_Linux-x86-64_1of7.zip 和 p13390677_112040_Linux-x86-64_2of7.zip 并解压

[root@rac1 ~]# su - oracle

# 使用oracle用户上传安装包到oracle的home目录
[oracle@rac1 ~]$ ll
-rw-r--r-- 1 root root 1395582860 1月   2 21:09 p13390677_112040_Linux-x86-64_1of7.zip
-rw-r--r-- 1 root root 1151304589 1月   2 21:09 p13390677_112040_Linux-x86-64_2of7.zip

# 解压缩安装文件
[oracle@rac1 ~]$ unzip p13390677_112040_Linux-x86-64_1of7.zip
[oracle@rac1 ~]$ unzip p13390677_112040_Linux-x86-64_2of7.zip

[oracle@rac1 ~]$ ll
drwxr-xr-x 7 oracle oinstall        136 8月  27 2013 database

修改 oracle 响应文件

[oracle@rac1 ~]$ cd database/response/
#备份
[oracle@rac1 response]$ cp db_install.rsp db_install.rsp.bak

[oracle@rac1 response]$ vi db_install.rsp

文件 db_install.rsp 的内容如下:

# oracle安装响应文件版本
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0

# 选择安装类型:INSTALL_DB_SWONLY(只安装数据库软件 )
oracle.install.option=INSTALL_DB_SWONLY

# 指定安装过程中设置的系统主机名:通过hostname命令获取
ORACLE_HOSTNAME=rac1

# 指定清单目录oracle inventory的所有者:oinstall
UNIX_GROUP_NAME=oinstall

# 指定清单目录的路径:
INVENTORY_LOCATION=/u01/app/oraInventory

# 指定数据库语言:en,zh_CN
SELECTED_LANGUAGES=en,zh_CN

# 设置ORALCE_HOME的路径
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

# 设置ORALCE_BASE的路径:
ORACLE_BASE=/u01/app/oracle

# 选择Oracle安装数据库软件的版本:EE(企业版)
oracle.install.db.InstallEdition=EE

# 是否自定义Oracle的组件:false(安装默认组件)
oracle.install.db.EEOptionsSelection=false

# 要安装的组件列表(不要修改)
oracle.install.db.optionalComponents=oracle.rdbms.partitioning:11.2.0.4.0,oracle.oraolap:11.2.0.4.0,oracle.rdbms.dm:11.2.0.4.0,oracle.rdbms.dv:11.2.0.4.0,oracle.rdbms.lbac:11.2.0.4.0,oracle.rdbms.rat:11.2.0.4.0

# 指定拥有OSDBA权限的用户组:
oracle.install.db.DBA_GROUP=dba

# 指定拥有OSOPER权限的用户组:
oracle.install.db.OPER_GROUP=oper

# 指定要安装oracle软件的节点:rac1,rac2
oracle.install.db.CLUSTER_NODES=rac1,rac2

# 是否安装单节点rac:false
oracle.install.db.isRACOneInstall=

# 安装单节点rac的服务名称
oracle.install.db.racOneServiceName=

# 选择数据库的用途:GENERAL_PURPOSE(一般用途/事务处理)
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE

# 指定数据库的GlobalName(全局名称):
oracle.install.db.config.starterdb.globalDBName=oradb

# 指定数据库的SID:
oracle.install.db.config.starterdb.SID=orcl

# 选择字符集:AL32UTF8
oracle.install.db.config.starterdb.characterSet=AL32UTF8

# 11g的新特性:自动内存管理:true
oracle.install.db.config.starterdb.memoryOption=true

# 指定Oracle自动管理内存的大小:物理内存的60%左右,单位MB
oracle.install.db.config.starterdb.memoryLimit=1024

# 是否载入模板示例:false
oracle.install.db.config.starterdb.installExampleSchemas=false

# 是否启用安全设置:true
oracle.install.db.config.starterdb.enableSecuritySettings=true

# 设置数据库用户密码
# 设定所有数据库用户使用同一个密码,其它数据库用户就不用单独设置了。
oracle.install.db.config.starterdb.password.ALL=oracle

# 设定SYS用户的密码:不用设定,统一使用 oracle 作为密码
oracle.install.db.config.starterdb.password.SYS=

# 设定SYSTEM用户的密码:不用设定,统一使用 oracle 作为密码
oracle.install.db.config.starterdb.password.SYSTEM=

# 设定SYSMAN用户的密码:不用设定,统一使用 oracle 作为密码
oracle.install.db.config.starterdb.password.SYSMAN=

# 设定DBSNMP用户的密码:不用设定,统一使用 oracle 作为密码
oracle.install.db.config.starterdb.password.DBSNMP=

# 使用数据库本地管理工具:DB_CONTROL
oracle.install.db.config.starterdb.control=DB_CONTROL

# 当上一个选项设置为GRID_CONTROL时,才需要设定grid control的远程路径URL
oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=

# 设置自动备份:false
oracle.install.db.config.starterdb.automatedBackup.enable=false

# 不是自动备份:不用设置
oracle.install.db.config.starterdb.automatedBackup.osuid=
oracle.install.db.config.starterdb.automatedBackup.ospwd=

# 指定存储类型:ASM_STORAGE
oracle.install.db.config.starterdb.storageType=ASM_STORAGE

# 不使用文件系统:不用设置
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=

# 指定ASM的磁盘组:
oracle.install.db.config.asm.diskGroup=DATA

# 指定ASM实例密码:
oracle.install.db.config.asm.ASMSNMPPassword=oracle

# 不使用metalink账户:不用设置
MYORACLESUPPORT_USERNAME=
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=

# 是否设置安全更新
# False表示不需要设置安全更新,在11.2的静默安装中必须指定为true,否则会提示错误
DECLINE_SECURITY_UPDATES=true

# 不使用代理服务器,不用设置
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=
PROXY_REALM=

# Oracle支持中心URL。
COLLECTOR_SUPPORTHUB_URL=

# 自动更新:SKIP_UPDATES
oracle.installer.autoupdates.option=SKIP_UPDATES

# 不使用自动:不用设置
oracle.installer.autoupdates.downloadUpdatesLoc=
AUTOUPDATES_MYORACLESUPPORT_USERNAME=
AUTOUPDATES_MYORACLESUPPORT_PASSWORD=

3、开始安装 oracle 软件

执行 runInstaller 命令开始安装 oracle

[oracle@rac1 ~]$ cd /home/oracle/database


[oracle@rac1 database]$ ./runInstaller -silent -ignorePrereq -showProgress -responseFile /home/oracle/database/response/db_install.rsp


# 安装成功提示

安装程序文件成功。
Oracle Database 11g 的 安装 已成功。
请查看 '/u01/app/oraInventory/logs/silentInstall2024-01-03_02-43-00AM.log' 以获取详细资料。

执行 Root 脚本 正在进行中。

以 root 用户的身份执行以下脚本:
        1. /u01/app/oracle/product/11.2.0/db_1/root.sh

在以下节点上执行/u01/app/oracle/product/11.2.0/db_1/root.sh:
[rac1, rac2]

..................................................   100% 完成。

执行 Root 脚本成功。
Successfully Setup Software.

-silent:此选项表示静默安装,意味着安装过程不会显示任何图形用户界面,而是以批处理模式进行。
-ignorePrereq:此选项告诉安装程序忽略先决条件检查。通常,在安装之前,安装程序会检查系统是否满足安装所需的最低要求。使用此选项,您可以跳过这些检查。
-ignoreSysPrereqs:此选项类似于 -ignorePrereq,但它专门针对操作系统级别的先决条件。
-responseFile:此选项允许您指定一个响应文件,该文件包含在安装过程中需要回答的问题的答案。这样,您可以在不手动回答问题的情况下进行安装。
-showProgress:此选项会显示安装的进度。静默安装时通常不显示进度,但使用此选项可以查看进度信息。

切换到 root 用户,在 rac1、rac2 执行以下脚本
分别在rac1, rac2上以root执行脚本:

# 节点1
[root@rac1 ~]# /u01/app/oracle/product/11.2.0/db_1/root.sh


# 节点2
[root@rac2 ~]# /u01/app/oracle/product/11.2.0/db_1/root.sh

4、创建数据库实例

修改建库使用的响应文件

[oracle@rac1 ~]$ cd /home/oracle/database/response

#备份
[oracle@rac1 response]$ cp dbca.rsp dbca.rsp.bak

[oracle@rac1 response]$ vi dbca.rsp

响应文件的内容如下:

[GENERAL]
# 响应文件的版本号
RESPONSEFILE_VERSION = "11.2.0"
# 操作类型:createDatabase(创建数据库)
OPERATION_TYPE = "createDatabase"


[CREATEDATABASE]
# 数据库名称,相当于SERVICE_NAME
GDBNAME = "oradb"

# 指定数据库的 SID 和 oracle 用户环境变量中的 ORACLE_SID 必须一致,查看方式su - oracle后执行cat .bash_profile
# 每个节点实例SID前缀为orcl  会自动生成orcl1,orcl2 两个实例
SID = "orcl"

# 逗号分隔的群集节点列表:rac1,rac2
NODELIST="rac1,rac2"

# 数据库模板的名称:General_Purpose.dbc(默认值)
TEMPLATENAME = "General_Purpose.dbc"

##设置 sys 账户的密码
SYSPASSWORD = "oracle"

##设置 system 账户的密码
SYSTEMPASSWORD = "oracle"

# 数据库文件的位置:
DATAFILEDESTINATION ="+DATA"

# 恢复区的位置:
RECOVERYAREADESTINATION="+BAK"

# 指定要创建的数据库的存储类型:ASM(自动存储管理)
STORAGETYPE="ASM"

# 指定存储的磁盘组名称:
DISKGROUPNAME=DATA

# 指定恢复区磁盘组名称:
RECOVERYGROUPNAME=BAK

# 数据库字符集:
CHARACTERSET = "AL32UTF8"

# 数据库国家字符集:
NATIONALCHARACTERSET= "AL16UTF16"

# oracle所占物理内存百分比:60%
MEMORYPERCENTAGE = "60"

# 分配给oracle数据库的总内存:单位MB,这个是SGA大小
TOTALMEMORY = "800"

# 默认值
[createTemplateFromDB]
SOURCEDB = "myhost:1521:orcl"
SYSDBAUSERNAME = "system"
TEMPLATENAME = "My Copy TEMPLATE"
[createCloneTemplate]
SOURCEDB = "orcl"
TEMPLATENAME = "My Clone TEMPLATE"
[DELETEDATABASE]
SOURCEDB = "orcl"
[generateScripts]
TEMPLATENAME = "New Database"
GDBNAME = "orcl11.us.oracle.com"
[CONFIGUREDATABASE]
[ADDINSTANCE]
DB_UNIQUE_NAME = "orcl11g.us.oracle.com"
NODELIST=
SYSDBAUSERNAME = "sys"
[DELETEINSTANCE]
DB_UNIQUE_NAME = "orcl11g.us.oracle.com"
INSTANCENAME = "orcl11g"
SYSDBAUSERNAME = "sys"

使用 dbca 命令创建数据库

[oracle@rac1 ~]$ cd /u01/app/oracle/product/11.2.0/db_1/bin

[oracle@rac1 bin]$ dbca -silent -responseFile /home/oracle/database/response/dbca.rsp



复制数据库文件
1% 已完成
3% 已完成
9% 已完成
15% 已完成
21% 已完成
27% 已完成
30% 已完成
正在创建并启动 Oracle 实例
32% 已完成
36% 已完成
40% 已完成
44% 已完成
45% 已完成
48% 已完成
50% 已完成
正在创建集群数据库视图
52% 已完成
70% 已完成
正在进行数据库创建
73% 已完成
76% 已完成
85% 已完成
94% 已完成
100% 已完成
有关详细信息, 请参阅日志文件 "/u01/app/oracle/cfgtoollogs/dbca/oradb/oradb.log"。

# 查看日志 tail -500f /u01/app/oracle/cfgtoollogs/dbca/oradb/oradb.log
数据库信息:
全局数据库名:oradb
系统标识符 (SID) 前缀:orcl

5、测试连接数据库

查看 grid 集群状态

[grid@rac1 ~]$ crs_stat -t

查看集群SCAN VIP信息,访问数据库使用这个地址

[grid@rac1 ~]$ srvctl config scan
SCAN 名称: rac-scan, 网络: 1/192.168.111.0/255.255.255.0/ens32
SCAN VIP 名称: scan1, IP: /rac-scan/192.168.111.222

创建用户

[oracle@rac1 ~]$ sqlplus / as sysdba

##创建一个新用户abc和密码123456
SQL> create user abc identified by 123456;

##授予DBA权限。
SQL> grant connect,resource,dba to abc;

本地plsql连接

RAC =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.111.222)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oradb)
    )
  )

select instance_name, status from v$instance;

在不同的session,得到的实例名不相同,说明正常负载均衡了。

当开启第二个session连接时,发现实例名为orcl2,可以看出,scan-ip的加入可以具有负载均衡的作用。

正常安装好后,不需要做任何操,全部节点关机重启后会自动加入集群正常工作。

十三、RAC 增加节点

给RAC系统扩充一个节点

新增节点之前主机规划

主机名 public ip private ip virtual ip (VIP) scan ip 用户名 密码
rac1 192.168.111.201 192.168.63.201 192.168.111.211 192.168.111.222 grid
oracle
grid
oracle
rac2 192.168.111.202 192.168.63.202 192.168.111.212

新增节点之后主机规划

主机名 public ip private ip virtual ip (VIP) scan ip 用户名 密码
rac1 192.168.111.201 192.168.63.201 192.168.111.211 192.168.111.222 grid
oracle
grid
oracle
rac2 192.168.111.202 192.168.63.202 192.168.111.212
rac3 192.168.111.203 192.168.63.203 192.168.111.213

1、创建完整克隆。虚拟机名称为 rac3
2、添加网卡VMnet1,参考上面。
3、添加5个共享磁盘,设置为独立永久,参考上面。
4、设置虚拟机 rac3.vmx

scsi0.sharedBus= "virtual"
disk.locking= "false"
diskLib.dataCacheMaxSize= "0"
diskLib.dataCacheMaxReadAheadSize= "0"
diskLib.DataCacheMinReadAheadSize= "0"
diskLib.dataCachePageSize= "4096"
diskLib.maxUnsyncedWrites= "0"

5、修改网卡,有2个网卡,修改为静态ip

vi /etc/sysconfig/network-scripts/ifcfg-ens32

TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens32"
DEVICE="ens32"
ONBOOT="yes"

IPADDR="192.168.111.203"
NETMASK="255.255.255.0"
GATEWAY="192.168.111.2"
DNS1="8.8.8.8"
DNS2="114.114.114.114"

仅主机模式这张网卡,不要配置网关,否则不能正常联网。 
vi /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes

IPADDR=192.168.63.203
NETMASK=255.255.255.0
NETWORK=192.168.63.0

重启生效

service network restart

6、修改主机名为 rac3

hostnamectl set-hostname rac3

7、关闭防火墙

# 关闭防火墙
systemctl stop firewalld 
systemctl disable firewalld

8、修改时间,保持3台节点的时间一致,时间相差太大不能安装,时间大致相同就忽略此步骤。

# 节点1 查询时间
date "+%Y-%m-%d %H:%M:%S"

## 节点3 修改时间
#修改日期时间
date -s "2024-01-07 20:00:34"
#将当前时间和日期写入BIOS,避免重启后失效
hwclock -w

9、设置host,3个节点都需要修改(以前的节点也需要修改)

vi /etc/hosts
#Public IP
192.168.111.201		rac1
192.168.111.202		rac2
192.168.111.203		rac3
 
#Private IP
192.168.63.201		rac1-priv
192.168.63.202		rac2-priv
192.168.63.203		rac3-priv
 
#Virtual IP
192.168.111.211		rac1-vip
192.168.111.212		rac2-vip
192.168.111.213		rac3-vip
 
#Scan IP
192.168.111.222		rac-scan

10、创建用户和组,这个组id和组名称要和以前的节点一致。

# 创建组
groupadd -g 1000 oinstall
groupadd -g 1001 dba
groupadd -g 1002 oper
groupadd -g 1003 asmadmin
groupadd -g 1004 asmdba
groupadd -g 1005 asmoper

# 创建用户
useradd -u 1100 -g oinstall -G dba,asmdba,asmoper,asmadmin grid
useradd -u 1101 -g oinstall -G dba,asmdba,oper oracle

#创建安装目录
mkdir -p  /u01/app/11.2.0/grid
mkdir -p /u01/app/grid
mkdir /u01/app/oracle
chown -R grid:oinstall /u01
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/


# 设置密码
# 这里密码分别设置为:oracle 和 grid
echo "oracle" | passwd --stdin oracle  #为oracle用户设置密码为oracle
echo "grid" | passwd --stdin grid      #为grid用户设置密码为grid
 

#设置oracle和grid用户密码永不过期:
chage -M -1 oracle
chage -M -1 grid
chage -l oracle
chage -l grid

11、设置系统参数

在配置文件 /etc/sysctl.conf 末尾添加以下内容:

kernel.msgmnb = 65536 
kernel.msgmax = 65536 
kernel.shmmax = 68719476736 
kernel.shmall = 4294967296 
kernel.shmmni = 4096 
kernel.sem = 250 32000 100 128 
fs.aio-max-nr = 1048576 
fs.file-max = 6815744 
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 = 1048586 
net.ipv4.tcp_wmem = 262144 262144 262144 
net.ipv4.tcp_rmem = 4194304 4194304 4194304

执行以下命令生效

sysctl -p

配置shell限制,修改 /etc/security/limits.conf 配置文件,末尾添加以下内容:

grid soft nproc 2047 
grid hard nproc 16384 
grid soft nofile 1024 
grid hard nofile 65536 
oracle soft nproc 2047 
oracle hard nproc 16384 
oracle soft nofile 1024 
oracle hard nofile 65536

配置login,在 /etc/pam.d/login 文件最后添加一行内容:

session    required     pam_limits.so

12、配置用户环境变量

grid用户

su - grid
vi .bash_profile
 

export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=+ASM3  # RAC3
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.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
umask 022

执行 source .bash_profile 命令使配置生效。

Oracle用户

su - oracle
vi .bash_profile
 

export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=orcl3  # RAC3
export ORACLE_UNQNAME=oradb
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

执行 source .bash_profile 命令使配置生效。

13、ssh互信(oracle和grid用户)

节点 rac3 切换至oracle用户

# 执行后,一直回车
[oracle@rac3 ~]$ ssh-keygen -t rsa


# 将rac1节点的key复制到当前节点
[oracle@rac3 ~]$ scp rac1:~/.ssh/authorized_keys ~/.ssh/

#新生成的公钥追加到key文件中
[oracle@rac3 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[oracle@rac3 ~]$ chmod 600 ~/.ssh/authorized_keys

#最新key复制到另外两个节点中
[oracle@rac3 ~]$ scp ~/.ssh/authorized_keys rac1:~/.ssh/authorized_keys
[oracle@rac3 ~]$ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys

节点 rac3 切换至grid用户

# 执行后,一直回车
[grid@rac3 ~]$ ssh-keygen -t rsa

# 将rac1节点的key复制到当前节点
[grid@rac3 ~]$ scp rac1:~/.ssh/authorized_keys ~/.ssh/

#新生成的公钥追加到key文件中
[grid@rac3 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[grid@rac3 ~]$ chmod 600 ~/.ssh/authorized_keys

#最新key复制到另外两个节点中
[grid@rac3 ~]$ scp ~/.ssh/authorized_keys rac1:~/.ssh/authorized_keys
[grid@rac3 ~]$ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys

测试一下,相互之间是否在oracle用户下已经免密登录了 ,提示 (yes/no)?  输入yes 

ssh rac1
ssh rac2
ssh rac3

ssh rac1-priv 
ssh rac2-priv
ssh rac3-priv 

14、安装依赖

yum install -y binutils compat-libcap1 compat-libstdc++-33 elfutils-libelf-devel smartmontools gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat kmod-oracleasm unzip

安装cvuqdisk,否则,集群验证时程序就无法发现共享磁盘。 

[root@rac3 ~]# scp rac1:/home/grid/grid/rpm/cvuqdisk-1.0.9-1.rpm .

[root@rac3 rpm]# rpm -ivh cvuqdisk-1.0.9-1.rpm
准备中...                          ################################# [100%]
Using default group oinstall to install package
正在升级/安装...
   1:cvuqdisk-1.0.9-1                 ################################# [100%]

15、安装ASM软件

涉及3个包, 备份下载地址:https://download.csdn.net/download/u014644574/88671993

# kmod-oracleasm 这个前面已经安装
# yum -y install kmod-oracleasm
# 上传另外两个安装包,下地址参考上面,安装如下
[root@rac3 ~]# rpm -ivh oracleasmlib-2.0.12-1.el7.x86_64.rpm
[root@rac3 ~]# rpm -ivh oracleasm-support-2.1.11-2.el7.x86_64.rpm

初始化 ASM

[root@rac3 ~]# oracleasm configure -i
 
 
Default user to own the driver interface []: grid          # 选择用户:grid
Default group to own the driver interface []: asmadmin     # 选择用户所在的组:asmadmin
 
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y

初始化

[root@rac3 ~]# oracleasm init

查看 ASM 的状态

[root@rac3 ~]# oracleasm  status
Checking if ASM is loaded: yes
Checking if /dev/oracleasm is mounted: yes
# 扫描 ASM 磁盘信息
[root@rac3 ~]# oracleasm scandisks
 
# 重新查看 ASM 磁盘列表
[root@rac3 ~]# oracleasm  listdisks
BAK1
DATA1
OCR1
OCR2
OCR3

16、检查环境是否满足安装grid软件

在节点rac1校验新增节点rac3安装环境是否准备好了。在节点rac1中执行。

[grid@rac1 ~]$ cluvfy stage -pre nodeadd -n rac3 -fixup

我只有一个”pdksh” 的 包存在性 检查失败,pdksh只有在Linux 4上需要,Linux 5/6/7都已经被ksh取代,忽略改错误

17、新增节点,安装grid软件

接下来在rac1执行如下操作,此时要先导入 ignore_preaddnode_checks 环境变量,否则后面的命令无法安装

[root@rac1 ~]# su - grid
[grid@rac1 ~]$ export IGNORE_PREADDNODE_CHECKS=Y

[grid@rac1 ~]$ cd $ORACLE_HOME/oui/bin/
[grid@rac1 bin]$ ./addNode.sh "CLUSTER_NEW_NODES={rac3}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={rac3-vip}" "CLUSTER_NEW_PRIVATE_NODE_NAMES={rac3-priv}"

成功后的提示

.                                                               100% 已完成。
保存产品清单完成
WARNING:已在此会话中的一个或多个节点上创建了新的产品清单。但是, 尚未将它注册为此系统的主产品清单。
要注册新的产品清单, 请以 root 权限在节点 'rac3' 上的 '/u01/app/oraInventory/orainstRoot.sh' 中运行脚本。
如果不注册产品清单, 可能无法更新所安装的产品或对其打补丁。
以下配置脚本需要以各个新集群节点中的 "root" 用户的身份执行。以下列表中的每个脚本后面跟随一个节点列表。
/u01/app/oraInventory/orainstRoot.sh #On nodes rac3
/u01/app/11.2.0/grid/root.sh #On nodes rac3
要执行配置脚本, 请执行以下操作:
    1. 打开终端窗口
    2. 以 "root" 身份登录
    3. 在每个集群节点中运行脚本

/u01/app/11.2.0/grid 的 添加集群节点 已成功。

 执行完之后需要 以root用户在新加节点rac3上执行两个脚本。

# 脚本1
[root@rac3 ~]# /u01/app/oraInventory/orainstRoot.sh


# 脚本2
[root@rac3 ~]# /u01/app/11.2.0/grid/root.sh
Check /u01/app/11.2.0/grid/install/root_rac3_2024-01-04_17-04-54.log for the output of root script

执行第二个脚本,另开一个窗口查看日志

[root@rac3 ~]# tail -500f /u01/app/11.2.0/grid/install/root_rac3_2024-01-04_17-04-54.log

Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /u01/app/11.2.0/grid/crs/install/crsconfig_params
Creating trace directory
User ignored Prerequisites during installation
Installing Trace File Analyzer
OLR initialization - successful
Adding Clusterware entries to oracle-ohasd.service
CRS-4402: CSS 守护程序已在独占模式下启动, 但在节点 rac1 (编号为 1) 上发现活动 CSS 守护程序, 因此正在终止
An active cluster was found during exclusive startup, restarting to join the cluster
clscfg: EXISTING configuration version 5 detected.
clscfg: version 5 is 11g Release 2.
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
sh: /bin/netstat: 没有那个文件或目录
Configure Oracle Grid Infrastructure for a Cluster ... succeeded

配置成功,检查节点是否正常添加到GI,在任意一台主机上执行,查看后台进程是否正常

可以看见3个节点都正常了。

[grid@rac3 ~]$ crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora.BAK.dg     ora....up.type ONLINE    ONLINE    rac1
ora.DATA.dg    ora....up.type ONLINE    ONLINE    rac1
ora....ER.lsnr ora....er.type ONLINE    ONLINE    rac1
ora....N1.lsnr ora....er.type ONLINE    ONLINE    rac2
ora.OCR.dg     ora....up.type ONLINE    ONLINE    rac1
ora.asm        ora.asm.type   ONLINE    ONLINE    rac1
ora.cvu        ora.cvu.type   ONLINE    ONLINE    rac2
ora.gsd        ora.gsd.type   OFFLINE   OFFLINE
ora....network ora....rk.type ONLINE    ONLINE    rac1
ora.oc4j       ora.oc4j.type  ONLINE    ONLINE    rac2
ora.ons        ora.ons.type   ONLINE    ONLINE    rac1
ora.oradb.db   ora....se.type ONLINE    ONLINE    rac1
ora....SM1.asm application    ONLINE    ONLINE    rac1
ora....C1.lsnr application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    OFFLINE   OFFLINE
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   ora....t1.type ONLINE    ONLINE    rac1
ora....SM2.asm application    ONLINE    ONLINE    rac2
ora....C2.lsnr application    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    OFFLINE   OFFLINE
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac2
ora....SM3.asm application    ONLINE    ONLINE    rac3
ora....C3.lsnr application    ONLINE    ONLINE    rac3
ora.rac3.gsd   application    OFFLINE   OFFLINE
ora.rac3.ons   application    ONLINE    ONLINE    rac3
ora.rac3.vip   ora....t1.type ONLINE    ONLINE    rac3
ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac2

18、新增节点,安装oracle软件

接下来在rac1执行如下操作

[root@rac1 ~]# su - oracle
[oracle@rac1 ~]$ export IGNORE_PREADDNODE_CHECKS=Y
[oracle@rac1 ~]$ cd $ORACLE_HOME/oui/bin/
[oracle@rac1 bin]$ ./addNode.sh "CLUSTER_NEW_NODES={rac3}"

成功后的提示

在节点上保存产品清单 (2024年1月7日 星期日 下午10时23分34秒 CST)
.                                                               100% 已完成。
保存产品清单完成
WARNING:
以下配置脚本需要以各个新集群节点中的 "root" 用户的身份执行。以下列表中的每个脚本后面跟随一个节点列表。
/u01/app/oracle/product/11.2.0/db_1/root.sh #On nodes rac3
要执行配置脚本, 请执行以下操作:
    1. 打开终端窗口
    2. 以 "root" 身份登录
    3. 在每个集群节点中运行脚本

/u01/app/oracle/product/11.2.0/db_1 的 添加集群节点 已成功。
请查看 '/tmp/silentInstall.log' 以获取详细资料。

在新节点 rac3上,使用root用户执行脚本

[root@rac3 ~]# /u01/app/oracle/product/11.2.0/db_1/root.sh

执行结果,若有报错,如果不需要nmhs这个功能不影响。
如果需要这个功能,上传oracle软件手动安装,参照上面:步骤十二、安装 Oracle 软件

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/11.2.0/db_1
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
/bin/chown: 无法访问"/u01/app/oracle/product/11.2.0/db_1/bin/nmhs": 没有那个文件或目录
/bin/chmod: 无法访问"/u01/app/oracle/product/11.2.0/db_1/bin/nmhs": 没有那个文件或目录
Finished product-specific root actions.
Finished product-specific root actions.

19、新增节点,创建数据库实例

接下来是在rac1上用DBCA创建实例的过程
在rac1上以Oracle用户登录,使用dbca silent模式创建数据库实例:

[root@rac1 ~]# su - oracle

[oracle@rac1 ~]$ dbca -silent -addInstance -nodeList rac3 -gdbName oradb -instanceName orcl3 -sysDBAUserName sys -sysDBAPassword oracle


#成功提示
正在添加实例
1% 已完成
2% 已完成
6% 已完成
13% 已完成
20% 已完成
26% 已完成
33% 已完成
40% 已完成
46% 已完成
53% 已完成
66% 已完成
正在进行实例管理。
76% 已完成
100% 已完成
有关详细信息, 请参阅日志文件 "/u01/app/oracle/cfgtoollogs/dbca/oradb/oradb0.log"。

-silent: 这个选项让DBCA在静默模式下运行。
-addInstance: 这个选项指示添加一个新的数据库实例。
-nodeList rac3: 这个参数指定了新实例将被添加到名为rac3的节点。
-gdbName oradb: 这个参数指定了新实例将加入到名为oradb的全局数据库名(db_name或者SERVICE_NAME)。
-instanceName orcl3: 这个参数指定了新实例的名称orcl3。
-sysDBAUserName sys: 这个参数指定了具有系统管理员权限的用户名sys。
-sysDBAPassword oracle: 这个参数指定了具有系统管理员权限的用户的密码oracle。

查询节点实例

[grid@rac3 ~]$ srvctl status database -d oradb
实例 orcl1 正在节点 rac1 上运行
实例 orcl2 正在节点 rac2 上运行
实例 orcl3 正在节点 rac3 上运行

查看集群状态

[grid@rac3 ~]$ crsctl status res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
ora.asm
               ONLINE  ONLINE       rac1                     Started
               ONLINE  ONLINE       rac2                     Started
               ONLINE  ONLINE       rac3                     Started

ora.oradb.db
      1        ONLINE  ONLINE       rac1                     Open
      2        ONLINE  ONLINE       rac2                     Open
      3        ONLINE  ONLINE       rac3                     Open

执行如下命令,只有gsd是OFFLINE离线状态表示集群正常。

[grid@rac1 ~]$ crs_stat -t | grep OFFLINE
ora.gsd        ora.gsd.type   OFFLINE   OFFLINE
ora.rac1.gsd   application    OFFLINE   OFFLINE
ora.rac2.gsd   application    OFFLINE   OFFLINE
ora.rac3.gsd   application    OFFLINE   OFFLINE

十四、RAC 删除节点

如果只是需要关闭其中一个节点,这个节点需要重启维护,直接关闭该节点CRS即可。
如果您关闭了其中一个节点的 CRS,该节点将无法处理任何新的连接请求或提供服务,直到您重新启动 CRS 并重新加入到集群中。在此期间,其他节点将继续正常运行并处理连接和服务请求。

# 停止当前节点crs
[root@rac3 ~]# /u01/app/11.2.0/grid/bin/crsctl stop crs

#启动当前节点crs
[root@rac3 ~]# /u01/app/11.2.0/grid/bin/crsctl start crs

如果实在要删除节点,往下看。 这里测试删除节点rac3。

查看节点状态

[grid@rac1 ~]$ crsctl stat res -t
[grid@rac1 ~]$ crs_stat -t

#如下只有gsd是OFFLINE离线状态表示集群正常
[grid@rac1 ~]$ crs_stat -t | grep OFFLINE
ora.gsd        ora.gsd.type   OFFLINE   OFFLINE
ora.rac1.gsd   application    OFFLINE   OFFLINE
ora.rac2.gsd   application    OFFLINE   OFFLINE
ora.rac3.gsd   application    OFFLINE   OFFLINE

1、备份ocr

在添加/删除节点前,建议手工备份一下OCR,在某些情况下添加/删除节点失败,可以通过恢复原来的OCR来解决问题。我这里有自动备份,没有再执行手动备份。

# 查看自动备份
[grid@rac1 ~]$ ocrconfig -showbackup auto

rac1     2024/01/07 05:04:27     /u01/app/11.2.0/grid/cdata/rac-cluster/backup00.ocr
rac1     2024/01/07 05:04:27     /u01/app/11.2.0/grid/cdata/rac-cluster/day.ocr
rac1     2024/01/07 05:04:27     /u01/app/11.2.0/grid/cdata/rac-cluster/week.ocr

2、查看将要删除的节点是被pin住,如果pin住需要,unpin节点 

[grid@rac3 ~]$ olsnodes -t -s
rac1    Active  Unpinned
rac2    Active  Unpinned
rac3    Active  Unpinned


[root@rac3 ~]# /u01/app/11.2.0/grid/bin/crsctl unpin css -n rac3
CRS-4667: Node rac3 successfully unpinned.


[grid@rac3 ~]$ olsnodes -t -s
rac1    Active  Unpinned
rac2    Active  Unpinned
rac3    Active  Unpinned

3、删除数据库实例

在节点rac1上,使用oracle用户删除节点rac3的实例。

[oracle@rac1 ~]$ dbca -silent -deleteInstance -nodeList rac3 -gdbName oradb -instanceName orcl3 -sysDBAUserName sys -sysDBAPassword oracle

-nodeList rac3 是删除节点名rac3
-gdbName oradb 是全局数据库名oradb
-instanceName orcl3 是删除的实例名orcl3
-sysDBAUserName sys 是拥有sysdba权限的oracle用户名称
-sysDBAPassword oracle 是sysdba用户的密码 

删除后,查看实例已经少了一个,监听还是3个

[grid@rac1 ~]$ srvctl status database -d oradb
实例 orcl1 正在节点 rac1 上运行
实例 orcl2 正在节点 rac2 上运行


[grid@rac1 ~]$ srvctl status listener
监听程序 LISTENER 已启用
监听程序 LISTENER 正在节点上运行: rac2,rac1,rac3

4、禁用和停止监听

[grid@rac1 ~]$ srvctl disable listener -n rac3
[grid@rac1 ~]$ srvctl stop listener -n rac3

# 停止rac3的监听后,集群监听只有rac1和rac2
[grid@rac1 ~]$ srvctl status listener
监听程序 LISTENER 已启用
监听程序 LISTENER 正在节点上运行: rac2,rac1

5、更新删除节点 rac3上的 inventory 清单目录(可选)
在要删除节点 rac3 的 $ORACLE_HOME/oui/bin 目录下执行(oracle用户)

[oracle@rac3 ~]$ cd $ORACLE_HOME/oui/bin
[oracle@rac3 bin]$ ./runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={rac3}" -local

6、卸载 oracle 软件

在要删除节点 rac3 中删除 RAC 数据库软件(卸载节点rac3的oracle软件)。
注意:
卸载过程提示[]:直接回车
如果提示输入(是 – 是, 否 – 否),输入

#测试下ssh,若提示输入yes
[oracle@rac3 ~]$ ssh rac3

[oracle@rac3 ~]$ cd $ORACLE_HOME/deinstall/
[oracle@rac3 deinstall]$ ./deinstall -local


## 注意:
## 卸载过程提示[]:直接回车
## 如果提示输入(是 - 是, 否 - 否),输入是


指定在此 Oracle 主目录中配置的数据库名的列表 []:

是否要继续 (是 - 是, 否 - 否)? [否]: 是

Oracle 卸载工具已成功清除临时目录。
#######################################################################


############# ORACLE DEINSTALL & DECONFIG TOOL END #############

7、更新保留的节点的 inventory 清单目录
在集群的保留节点上 $ORACLE_HOME/oui/bin 目录下执行

[oracle@rac1 ~]$ cd $ORACLE_HOME/oui/bin/
[oracle@rac1 bin]$ ./runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={rac1,rac2}"

8、重新配置CRS
在要删除节点 rac3上使用root用户执行

[root@rac3 ~]# /u01/app/11.2.0/grid/crs/install/rootcrs.pl -deconfig -force

[root@rac3 ~]# cd /u01/app/11.2.0/grid/crs/install/
./rootcrs.pl -deconfig -force

保报错-bash: ./rootcrs.pl: /usr/bin/perl: 坏的解释器: 没有那个文件或目录

yum -y install perl kernel-headers kernel-devel

9、从集群中删除节点

停止需要删除节点rac3的CRS

[root@rac3 ~]# /u01/app/11.2.0/grid/bin/crsctl stop crs

在保留节点运行(任何一个正常节点),使用root用户运行

[root@rac1 ~]# /u01/app/11.2.0/grid/bin/crsctl delete node -n rac3
CRS-4661: Node rac3 successfully deleted.


#删除后,节点rac3已经没有了
[root@rac1 ~]# /u01/app/11.2.0/grid/bin/olsnodes -t -s
rac1    Active  Unpinned
rac2    Active  Unpinned

10、更新删除节点 rac3上的 inventory 清单目录(可选)
在要删除节点 rac3 的 $ORACLE_HOME/oui/bin 目录下执行(grid用户)

[grid@rac3 ~]$ cd $ORACLE_HOME/oui/bin
[grid@rac3 bin]$ ./runInstaller -updateNodelist ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={rac3}" CRS=TRUE -local

11、卸载grid软件

在要删除节点 rac3 执行,从rac3中删除集群软件GI。

注意:
如果提示输入 >  直接回车
如果提示输入(y|n),输入y
如果提示输入(是 – 是, 否 – 否),输入
中途还是让另外开一个窗口,使用root用户执行一个脚本,按提示执行就行。
另外开一个窗口执行完后,回来继续按回车。

#测试下ssh,若提示输入yes
[grid@rac3 ~]$ ssh rac3

[grid@rac3 ~]$ cd $ORACLE_HOME/deinstall
[grid@rac3 deinstall]$ ./deinstall –local


## 注意:
## 如果提示输入 >  直接回车。
## 如果提示输入(y|n),输入y
## 如果提示输入(是 - 是, 否 - 否),输入是
## 中途还是让另外开一个窗口,使用root用户执行一个脚本,按提示执行就行。
## 另外开一个窗口执行完后,回来继续按回车。


输入一个地址或在节点 "rac3" 上使用的虚拟 IP 的名称[rac3-vip]
 > 直接回车!!!!


在此 Oracle 主目录中未检测到 ASM 配置。此 Oracle 主目录 (y|n) 中是否配置了 ASM [n]: y

是否要继续 (是 - 是, 否 - 否)? [否]: 是


以 root 用户或管理员身份在节点 "rac3" 上运行以下命令。

/tmp/deinstall2024-01-14_02-28-54PM/perl/bin/perl -I/tmp/deinstall2024-01-14_02-28-54PM/perl/lib -I/tmp/deinstall2024-01-14_02-28-54PM/crs/install /tmp/deinstall2024-01-14_02-28-54PM/crs/install/rootcrs.pl -force  -deconfig -paramfile "/tmp/deinstall2024-01-14_02-28-54PM/response/deinstall_Ora11g_gridinfrahome1.rsp" -lastnode

Oracle 卸载工具已成功清除临时目录。
#######################################################################


############# ORACLE DEINSTALL & DECONFIG TOOL END #############


注意:如果不指定-local选项,那么默认将会把所有的集群信息全部删除,这是非常危险的操作
运行此命令过程中需要进行多次手动配置,请注意!!!!

在要删除节点 rac3 执行,卸载完成后,使用root用户删除残留文件。

[root@rac3 ~]# rm -rf /etc/oraInst.loc
[root@rac3 ~]# rm -rf /opt/ORCLfmap
[root@rac3 ~]# rm -rf /etc/oratab

12、更新保留的节点的 inventory 清单目录
在集群的保留节点上 $ORACLE_HOME/oui/bin 目录下执行

[grid@rac1 ~]$ cd $ORACLE_HOME/oui/bin
[grid@rac1 bin]$ ./runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={rac1,rac2}" CRS=TRUE -silent

13、验证节点是否删除成功

在保留节点上执行

[grid@rac1 ~]$ cluvfy stage -post nodedel -n rac3 -verbose

执行 删除节点 的后期检查

正在检查 CRS 完整性...

集群件版本一致性测试已通过
Oracle Clusterware 在节点 "rac2" 上处于健康状态
Oracle Clusterware 在节点 "rac1" 上处于健康状态

CRS 完整性检查已通过
结果:
删除节点检查通过

删除节点 的后期检查成功。

十五、节点的启动和关闭

正常安装好后,不需要做任何操,全部节点关机重启后会自动加入集群正常工作。

由于单节点操作系统需要重启维护。

查询nodename、dbname、instancename

需要查询,需要启动/关闭节点的3个名称:
节点名称nodename、数据库名称dbname、实例名称instancename

## 1、查询节点名称
[root@rac3 ~]# uname -n
rac3


## 2、查询数据库名称和实例名称
[oracle@rac3 ~]$ sqlplus / as sysdba
SQL> show parameter name;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_name                              string      oradb
db_unique_name                       string      oradb
instance_name                        string      orcl3
service_names                        string      oradb

我这查询结果如下:
节点名称 nodename = rac3
节点名称 dbname = oradb
节点名称 instancename = orcl3

关闭过程

1、停止Oracle实例和监听器

#停止实例
srvctl stop instance -d <dbname> -i <instancename>
#停止监听
srvctl stop listener -n <nodename>

请将<dbname>替换为你的数据库名称,<instancename>替换为实例名称,<nodename>替换为节点名称。 

#启动实例
[grid@rac3 ~]$ srvctl stop instance -d oradb -i orcl3
#启动监听
[grid@rac3 ~]$ srvctl stop listener -n rac3

2、查看集群中实例和监听运行情况

srvctl status database -d <dbname>
## 查看集群中实例运行情况
[grid@rac3 ~]$ srvctl status database -d oradb
实例 orcl1 正在节点 rac1 上运行
实例 orcl2 正在节点 rac2 上运行
实例 orcl3 没有在 rac3 节点上运行


## 查看集群中监听运行情况
[grid@rac3 ~]$ srvctl status listener
监听程序 LISTENER 已启用
监听程序 LISTENER 正在节点上运行: rac2,rac1

3、关闭CRS服务

[root@rac3 ~]# /u01/app/11.2.0/grid/bin/crsctl stop crs

启动过程 

1、启动CRS服务

[root@rac3 ~]# /u01/app/11.2.0/grid/bin/crsctl start crs
CRS-4123: Oracle High Availability Services has been started.

2、启动Oracle实例和监听器

#启动实例
srvctl start instance -d <dbname> -i <instancename>
#启动监听
srvctl start listener -n <nodename>

 请将<dbname>替换为你的数据库名称,<instancename>替换为实例名称,<nodename>替换为节点名称。 

#启动实例
[grid@rac3 ~]$ srvctl start instance -d oradb -i orcl3
#启动监听
[grid@rac3 ~]$ srvctl start listener -n rac3

3、查看集群中实例和监听运行情况

## 查看集群中实例运行情况
[grid@rac3 ~]$ srvctl status database -d oradb
实例 orcl1 正在节点 rac1 上运行
实例 orcl2 正在节点 rac2 上运行
实例 orcl3 正在节点 rac3 上运行


## 查看集群中监听运行情况
[grid@rac3 ~]$ srvctl status listener
监听程序 LISTENER 已启用
监听程序 LISTENER 正在节点上运行: rac2,rac1,rac3

4、再次查看,只有 ora.gsd  OFFLINE 是离线,其余全部处于ONLINE在线状态。

[grid@rac3 ~]$ crs_stat -t

#如下只有gsd是OFFLINE离线状态表示集群正常
[grid@rac3 ~]$ crs_stat -t | grep OFFLINE
ora.gsd        ora.gsd.type   OFFLINE   OFFLINE
ora.rac1.gsd   application    OFFLINE   OFFLINE
ora.rac2.gsd   application    OFFLINE   OFFLINE
ora.rac3.gsd   application    OFFLINE   OFFLINE

十六、cssd故障的处理

问题描述:
oracle rac 11.2.0.4 主机重启,重启之后发现oracle rac集群无法启动。
节点rac2主机启动后,发现rac集群启动不了,检查集群进程状态,发现cssd一直处于starting状态

[root@rac2 ~]# /u01/app/11.2.0/grid/bin/crsctl status res -t -init
ora.cssd   1   ONLINE  OFFLINE  STARTING

[root@rac2 ~]#  tail -f /u01/app/11.2.0/grid/log/rac2/cssd/ocssd.log

由于集群启动到cssd无法继续正常启动,查看cssd的日志ocssd.log

发现有报错:has a disk HB, but no network HB

我这里错误是由于防火墙未关闭,关闭防火墙就好了。

# 关闭防火墙
systemctl stop firewalld 
systemctl disable firewalld

十七、crs启动失败

1、检查has是否启动

2、检查 ora.crsd 是否启动,大多数情况是正因为这个没有启动

/u01/app/11.2.0/grid/bin/crsctl status res -t -init
#分析集群的alter日志
tail -500f /u01/app/11.2.0/grid/log/rac3/alertrac3.log

手动启动crsd

[grid@rac3 rac3]$ crsctl start resource "ora.crsd" -init


#查看crsd已经启动成功
/u01/app/11.2.0/grid/bin/crsctl status res -t -init
#启动实例
[grid@rac3 log]$ srvctl start instance -d oradb -i orcl3

参考:

VMware超详细Oracle RAC安装及搭建指南-CSDN博客

VMware超详细Oracle RAC安装及搭建指南_vm部署11g rac-CSDN博客

https://wanggx.blog.csdn.net/article/details/125269870

Oracle11g RAC在一个节点宕掉的情况下添加一个新的节点:_一个添加一个-CSDN博客

https://www.cnblogs.com/bicewow/p/13577210.html

原文地址:https://blog.csdn.net/u014644574/article/details/135111067

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_57400.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注