Oracle 11g RAC集群删除节点和重建(二)
一、前提说明
本文章计划删除节点三,这一点要注意!!!
1、本文章实验在一个4节点RAC集群中删除一个节点,实际如果是2节点RAC集群环境,步骤基本类似,完全可以参考
2、实验环境的安装,详见我以前的文章《Oracle 11g RAC集群安装_linux7》和《Oracle 11g RAC集群新增节点》
3、本文章计划删除节点三,这一点要非常注意!!!为了区别上一篇文章《Oracle 11g RAC集群删除节点(一)》,选择删除不同的集群节点
4、整个节点删除工作大致围绕三个方面展开:删除实例、删除Oracle数据库软件、删除GI软件
5、本文章删除节点的方法,主要直接通过rm -rf直接删除RAC集群节点(GI和oracle自带的卸载工具用于辅助)
6、在删除节点三后,会重建集群,即节点四重新加入集群
7、另一篇文章《Oracle 11g RAC集群删除节点(一)》,主要通过GI和oracle自带的卸载工具完成节点删除,可以参考
8、文章适用于Oracle RAC 集群中一个节点故障或损坏,需要将该节点从集群中删除,并重新替换新增节点
9、节点一、节点二、节点四可以统称为保留节点,或者存活节点
二、背景介绍
集群环境配置如下
项目 节点一服务器 节点二服务器 节点三服务器 节点四服务器
主机名 hostrac1 hostrac2 hostrac1 hostrac2
操作系统 centos7.9_x64 centos7.9_x64 centos7.9_x64 centos7.9_x64
集群和数据库软件 Oracle 11.2.0.4 Oracle 11.2.0.4 Oracle 11.2.0.4 Oracle 11.2.0.4
公共网络 192.168.11.22 192.168.11.23 192.168.11.27 192.168.11.28
私有网络 10.10.10.22 10.10.10.23 10.10.10.27 10.10.10.28
虚拟VIP 192.168.11.24 192.168.11.25 192.168.11.29 192.168.11.30
SCANIP 192.168.11.26
备注:整个集群两个节点共享一个SCANIP地址。
三、准备工作
条件允许的情况下,强烈建议下面的工作:
1、备份OCR/OLR集群配置文件
2、数据库备份
3、软件目录备份
四、正式删除节点
1、关闭节点三上的RAC集群
节点三上执行
root用户执行
/u01/app/crs/bin/crsctl stop crs -f
systemctl stop oracle-ohasd.service
systemctl status oracle-ohasd.service
如果有残余,直接kill掉
ps -ef |grep -v grep|grep -E "ohasd|crsd|cssd|evmd|gipcd|gpnpd|mdnsd|diskmon|octssd|orarootagent|oraagent"| awk '{print $2}' | xargs kill -9 2>/dev/null
2、删除节点三实例
在保留节点上执行(节点一执行)
方法一:通过dbca图形界面方式完成删除,依次选择 Real Application Clusters -- > Instance Management --- > Delete Instance
方法二:dbca静默方式完成删除实例
删除命令:
dbca -silent -deleteInstance [-nodeList node_name] -gdbName gdb_name -instanceName instance_name -sysDBAUserName sysdba -sysDBAPassword password
node_name 是删除节点名
gdb_name 是全局数据库名
instance 是删除的实例名
sysdba 是拥有sysdba权限的oracle用户名称
passwd 是sysdba用户的密码
具体执行:
su - oracle
dbca -silent -deleteInstance -nodeList hostrac3 -gdbName orcl -instanceName orcl3 -sysDBAUserName sys -sysDBAPassword oracle
输出类似如下:
[oracle@hostrac1 ~]$ dbca -silent -deleteInstance -nodeList hostrac3 -gdbName orcl -instanceName orcl3 -sysDBAUserName sys -sysDBAPassword oracle
Deleting instance
1% complete
2% complete
6% complete
13% complete
20% complete
26% complete
33% complete
40% complete
46% complete
53% complete
60% complete
66% complete
Completing instance management.
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/orcl0.log" for further details.
3、检查验证
在保留节点上执行(节点一、节点二、节点四都可以)
su - oarcle
srvctl status database -d orcl
srvctl config database -d orcl
4、删除节点三上GI集群和Oracle数据库软件的相关文件
待删除的节点三上执行
[root@hostrac3 ~]# ls /u01/app/
crs grid oracle oraInventory
linux7版本删除下面的相关文件
export ORACLE_BASE=/u01/app/grid
export GRID_HOME=/u01/app/11.2.0/grid
export ORACLE_HOME=/u01/app/oracle/product/11.2/db_1
rm -rf /u01/app/grid/*
rm -rf /u01/app/crs/*
rm -rf /u01/app/oracle/*
rm -rf /u01/app/oraInventory/*
rm -rf /var/tmp/.oracle
rm -rf /etc/oraInst.loc
rm -rf /etc/oratab
rm -rf /etc/oracle
rm -rf /opt/ORCLfmap
linux6版本删除下面的相关文件
export ORACLE_BASE=/u01/app/grid
export GRID_HOME=/u01/app/11.2.0/grid
export ORACLE_HOME=/u01/app/oracle/product/11.2/db_1
cd $ORACLE_HOME
rm -rf *
cd $ORACLE_BASE
rm -rf *
cd $GRID_HOME
rm -rf *
rm -rf /etc/rc5.d/S96ohasd
rm -rf /etc/rc3.d/S96ohasd
rm -rf /rc.d/init.d/ohasd
rm -rf /etc/oracle
rm -rf /etc/ora*
rm -rf /etc/oratab
rm -rf /etc/oraInst.loc
rm -rf /opt/ORCLfmap/
rm -rf /taryartar/12c/oraInventory
rm -rf /usr/local/bin/dbhome
rm -rf /usr/local/bin/oraenv
rm -rf /usr/local/bin/coraenv
rm -rf /tmp/*
rm -rf /var/tmp/.oracle
rm -rf /var/tmp
rm -rf /home/grid/*
rm -rf /home/oracle/*
rm -rf /etc/init/oracle*
rm -rf /etc/init.d/ora
rm -rf /tmp/.*
5、删除GI软件
1) 检查被删除节点状态
在保留节点上执行(节点一、节点二、节点四都可以)
[grid@hostrac2 ~]$ olsnodes -s -n -t
hostrac1 1 Active Unpinned
hostrac2 2 Active Unpinned
hostrac3 3 Inactive Unpinned
hostrac4 4 Active Unpinned
2)从集群中删除节点三
在保留节点上执行(节点一、节点二、节点四都可以)
在保留节点的$ORACLE_HOME/bin目录下运行如下命令在集群中删除节点(root用户执行)
获取$ORACLE_HOME目录
su - grid
env|grep ORACLE_HOME
ORACLE_HOME=/u01/app/crs
root用户执行
/u01/app/crs/bin/crsctl delete node -n hostrac3
输出如下
[root@hostrac1 ~]# /u01/app/crs/bin/crsctl delete node -n hostrac3
CRS-4661: Node hostrac4 successfully deleted.
验证
su - grid
olsnodes -s -n -t
[grid@hostrac1 ~]$ olsnodes -s -n -t
hostrac1 1 Active Unpinned
hostrac2 2 Active Unpinned
hostrac4 4 Active Unpinned
6、删除节点三残留的资源
在保留节点上执行(节点一、节点二、节点四都可以)
查看
crsctl stat res -t
ora.hostrac3.vip
1 ONLINE INTERMEDIATE hostrac2 FAILED OVER
节点三的VIP资源残留,需要手工删除掉
su - grid
停止节点三的VIP资源
srvctl stop vip -i hostrac3
root用户删除节点三的VIP资源
su - root
/u01/app/crs/bin/srvctl remove vip -i hostrac3
再次验证查看
crsctl stat res -t
确保ora.hostrac3.vip资源已经被移除掉!
备注,如果还有其它资源残留,按此方法移除即可
7、更新GI集群软件inventory目录
在保留节点上都需要执行(节点一、节点二、节点四都需要执行!!!)!!!!
更新inventory命令语法:
$ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=Oracle_home_location "CLUSTER_NODES={name_of_node_to_delete}"
具体如下:
su - grid
$ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={hostrac1,hostrac2,hostrac4}" CRS=TRUE
8、更新Oracle数据库软件inventory目录
在保留节点上都需要执行(节点一、节点二、节点四都需要执行!!!)!!!
更新inventory命令:
$ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=Oracle_home_location "CLUSTER_NODES={remaining_node_list}"
具体如下:
su - oracle
$ORACLE_HOME/oui/bin/runInstaller -silent -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={hostrac1,hostrac2,hostrac4}" -local
9、检查集群状态
在保留节点上执行(节点一、节点二、节点四都可以)
su - grid
crsctl stat res -t
10、验证节点是否删除成功
这个步骤关系以后是否可以增加节点到集群中!!
在保留节点上执行(节点一、节点二、节点四都可以)
su - grid
cluvfy stage -post nodedel -n hostrac3 -verbose
11、备份OCR集群配置文件
在保留节点上执行(节点一、节点二、节点四都可以)
su - grid
which ocrconfig
/u01/app/crs/bin/ocrconfig //获取ocrconfig可执行文件的路径
root用户执行备份
/u01/app/crs/bin/ocrconfig -manualbackup
/u01/app/crs/bin/ocrconfig -local -manualbackup
验证备份
/u01/app/crs/bin/ocrconfig -showbackup
/u01/app/crs/bin/ocrconfig -local -showbackup
至此完成集群节点删除!
五、将删除的节点三,重新添加至集群
准备工作
(一)由于是将删除的节点重新加入,下面的准备工作1-17步骤,理论上都在安装阶段完成过,无需执行
1、配置主机名
2、/etc/hosts文件配置
3、集群GI和Oracle数据库安装用户创建
4、创建目录
5、oracle用户和grid用户ssh互信配置
6、共享磁盘配置(共享设备与ASM磁盘映射)
7、配置ntp时间同步
8、操作系统依赖包安装
9、关闭防火墙和selinux安全策略
10、停止和禁用linux7版本上的一些服务器
11、可选,设置linux多用户模式,即纯文本模式,没有图形界面
12、Linux7版本上关闭透明大页和NUMA
13、grid和oracle用户环境变量配置
14、修改/etc/profile配置文件
15、修改内核参数、操作系统用户限制、安全策略
16、可选,内存大于32G,建议设置大页,可以参考以前的文章《Oracle11g 安装完毕后的配置优化步骤》
17、重启生效
(二)18-22阶段的5个步骤,需要手工执行
18、源有环境备份数据库(可选,强烈建议)
19、集群配置文件备份(OCR/OLR),这个步骤必须执行!!
节点一完成:
su - grid
which ocrconfig
/u01/app/crs/bin/ocrconfig //获取ocrconfig可执行文件的路径
root用户执行备份
/u01/app/crs/bin/ocrconfig -manualbackup
/u01/app/crs/bin/ocrconfig -local -manualbackup
验证备份
/u01/app/crs/bin/ocrconfig -showbackup
/u01/app/crs/bin/ocrconfig -local -showbackup
20、/etc/oracle目录下的配置文件备份
源有集群三个节点都执行
tar -zcvf /etc/oracle.tar.gz /etc/oracle
21、备份数据库GI集群、DB数据库软件,这个步骤强烈建议执行!!
22、cluvfy验证添加节点的条件是否满足
节点一完成:以grid用户执行
su - grid
cluvfy comp peer -n hostrac1,hostrac2,hostrac3,hostrac4 -verbose
cluvfy stage -pre nodeadd -n hostrac3 -verbose
正式添加节点
1、添加GI集群节点
节点一执行(grid用户)
su - grid
export IGNORE_PREADDNODE_CHECKS=Y
$ORACLE_HOME/oui/bin/addNode.sh -silent "CLUSTER_NEW_NODES={hostrac3}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={hostrac3-vip}" "CLUSTER_NEW_PRIVATE_NODE_NAMES={hostrac3-priv}"
最后提示在新节点(节点三)root用户执行root.sh两个脚本。(这个提示需要执行两个脚本)
/u01/app/oraInventory/orainstRoot.sh #On nodes hostrac3
/u01/app/crs/root.sh #On nodes hostrac3
2、检查集群状态(可以每个节点都执行检查)
crsctl stat res -t
3、添加DB节点(节点一执行)
以oracle用户执行,添加节点到Oracle RAC数据库软件
su - oracle
export IGNORE_PREADDNODE_CHECKS=Y
$ORACLE_HOME/oui/bin/addNode.sh -silent "CLUSTER_NEW_NODES={hostrac3}"
最后提示在新节点(节点三)root用户执行root.sh两个脚本
/u01/app/oracle/product/11.2/db_1/root.sh
4.添加数据库实例(节点一执行)
oracle用户查看数据库配置(节点一执行)
su - oracle
dbca -silent -addInstance -nodeList hostrac3 -gdbName orcl -instanceName orcl3 -sysDBAUserName sys -sysDBAPassword oracle
实例添加后验证:
srvctl config database -d orcl|grep "Database instances"
Database instances: orcl1,orcl2,orcl3,orcl4
5、为新增的节点四数据库实例添加undo及redo(如果用使用DBCA可以自动完成创建Undo表空间、Redo日志及配置初始化参数等工作)
在节点一上执行
su - oracle
sqlplus "/as sysdba"
CREATE UNDO TABLESPACE UNDOTBS3 DATAFILE '+DATA/orcl/datafile/undotbs03.dbf' SIZE 50M AUTOEXTEND ON;
ALTER DATABASE ADD LOGFILE THREAD 3 GROUP 5 ('+DATA/orcl/redo05.log') SIZE 50M;
ALTER DATABASE ADD LOGFILE THREAD 3 GROUP 6 ('+DATA/orcl/redo06.log') SIZE 50M;
ALTER DATABASE enable THREAD 3;
备注:如果当时删除节点时,上面的redo、undo都保留,且日志线程enable,则上面的无需执行
6、启动新增的节点三数据库实例
启动新的数库实例
srvctl start instance -d orcl -i orcl3
备注:条件允许的情况下,建议直接将数据库整体来一次重启操作
srvctl stop database -d orcl
srvctl start database -d orcl
7、最终验证
crsctl stat res -t
至此完成删除节点的重新加入!!
六、总结
将节点三重新加入集群时报错,错误类似如下
$ORACLE_HOME/oui/bin/addNode.sh -silent "CLUSTER_NEW_NODES={hostrac3}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={hostrac3-vip}" "CLUSTER_NEW_PRIVATE_NODE_NAMES={hostrac3-priv}"
WARNING: Error while copying directory /u01/app/crs with exclude file list '/tmp/OraInstall2026-06-18_03-46-30PM/installExcludeFile.lst' to nodes 'hostrac3'. [PRKC-PRCF-2015 : One or more commands were not executed successfully on one or more nodes : <null>]
----------------------------------------------------------------------------------
hostrac3:
PRCF-2014 : Executing command "mkdir" on "inventory" failed on node "hostrac3".
Permission denied
PRCF-2014 : Executing command "mkdir" on "assistants" failed on node "hostrac3".
Permission denied
PRCF-2014 : Executing command "mkdir" on "bin" failed on node "hostrac3".
节点三服务器上root用户执行
[root@hostrac3 ~]# ll /u01/app
drwxrwxr-x. 2 grid oinstall 6 Jun 18 15:14 grid
drwxr-xr-x. 3 root oinstall 28 Jun 18 15:14 crs
drwxrwxr-x. 2 oracle oinstall 6 Jun 18 15:14 oracle
drwxrwx--- 2 grid oinstall 28 Jun 18 15:48 oraInventory
chmod 775 /u01/app/crs
drwxrwxr-x. 3 root oinstall 28 Jun 18 15:14 crs 修改为775权限,否则copy的时候,出现mkdir错误
drwxrwxr-x. 2 grid oinstall 6 Jun 18 15:14 grid
drwxrwxr-x. 2 oracle oinstall 6 Jun 18 15:14 oracle
drwxrwx--- 2 grid oinstall 28 Jun 18 15:48 oraInventory