Oracle RAC Flex ASM 特性测试
在 Oracle 12c 之前,对于要使用 ASM 的数据库实例来说,所有节点上的 ASM 实例必须已处于运行状态,才能启动数据库实例。如果 ASM 实例未运行,则对应的数据库实例也无法启动。
Oracle 12c 开始引入Oracle Flex ASM 的特性,解除了上述限制,它的一个主要特性是故障切换到集群中的其他节点。
下面,我们用19c RAC 环境,简单测试一下该特性:
1. 查看rac集群模式
[grid@rac1 ~]$ asmcmd showclustermode
ASM cluster : Flex mode enabled - Direct Storage Access --> 默认已开启flex特性
复制
2. 查看节点asm实例状态
[grid@rac1 ~]$ srvctl status asm -detail
ASM is running on rac2,rac1 -->asm在两个节点上都运行
ASM is enabled.
ASM instance +ASM1 is running on node rac1
Number of connected clients: 2
Client names: MESDB1:MESDB:mesdb-cluster rac1:_OCR:mesdb-cluster
ASM instance +ASM2 is running on node rac2
Number of connected clients: 2
Client names: MESDB2:MESDB:mesdb-cluster rac2:_OCR:mesdb-cluster
复制
3. 查看数据库实例状态
[grid@rac1 ~]$ srvctl status database -d MESDB -detail
Instance MESDB1 is running on node rac1
Instance MESDB1 is connected to ASM instance +ASM1 -->此时节点1上的MESDB1实例连接的是+ASM1
Instance MESDB2 is running on node rac2
Instance MESDB2 is connected to ASM instance +ASM2 -->此时节点2上的MESDB2实例连接的是+ASM2
复制
4. 强制关闭节点1上的asm实例
[grid@rac1 ~]$ ps -ef|grep pmon
oracle 2579 1 0 13:36 ? 00:00:00 ora_pmon_MESDB1
grid 11114 9590 0 13:45 pts/11 00:00:00 grep --color=auto pmon
grid 15935 1 0 May29 ? 00:00:05 asm_pmon_+ASM1
-- 方法1:
[grid@rac1 ~]$ kill -9 15935
[grid@rac1 ~]$ ps -ef|grep pmon
oracle 2579 1 0 13:36 ? 00:00:00 ora_pmon_MESDB1
grid 12175 9590 0 13:47 pts/11 00:00:00 grep --color=auto pmon
-- 方法2:
[root@rac1 ~]# srvctl stop asm -node rac1 -o abort -force
[root@rac1 ~]# ps -ef|grep pmon
oracle 3828 1 0 14:50 ? 00:00:00 ora_pmon_orcl1
root 7130 108701 0 14:56 pts/3 00:00:00 grep --color=auto pmon
复制
5. 查看asm实例信息
[grid@rac1 ~]$ srvctl status asm
ASM is running on rac2 -->此时asm只在节点2上运行
[grid@rac2 ~]$ srvctl status asm -detail
ASM is running on rac2
ASM is enabled.
ASM instance +ASM2 is running on node rac2
Number of connected clients: 3
Client names: MESDB1:MESDB:mesdb-cluster MESDB2:MESDB:mesdb-cluster rac2:_OCR:mesdb-cluster
[grid@rac1 ~]$ srvctl status database -d MESDB -detail
Instance MESDB1 is running on node rac1
Instance MESDB1 is connected to ASM instance +ASM2 -->节点1上面的实例MESDB1,不在是连接+ASM1实例,自动切换到节点2上的asm实例+ASM2
Instance MESDB2 is running on node rac2
Instance MESDB2 is connected to ASM instance +ASM2 -->此时节点2上的MESDB2实例连接的仍然是+ASM2
复制
6. 检查节点1上的数据库状态
[oracle@rac1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Tue May 30 13:52:37 2023
Version 19.19.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0
SQL> set line222
SQL> select INST_ID,INSTANCE_NAME,STATUS from gv$instance;
INST_ID INSTANCE_NAME STATUS
---------- ------------------------------------------------ ------------------------------------
1 MESDB1 OPEN
2 MESDB2 OPEN
SQL> select INST_ID,name,open_mode from gv$database;
INST_ID NAME OPEN_MODE
---------- --------------------------- ------------------------------------------------------------
2 MESDB READ WRITE
1 MESDB READ WRITE
复制
结论:在节点1上数据库实例并未受到影响。
7. 再次启动节点1的asm实例
[grid@rac1 ~]$ srvctl start asm -node rac1
[grid@rac1 ~]$ srvctl status asm -detail
ASM is running on rac2,rac1 --->asm实例又重新恢复,分别在2个节点上都运行
ASM is enabled.
ASM instance +ASM1 is running on node rac1
Number of connected clients: 2
Client names: MESDB1:MESDB:mesdb-cluster rac1:_OCR:mesdb-cluster
ASM instance +ASM2 is running on node rac2
Number of connected clients: 2
Client names: MESDB2:MESDB:mesdb-cluster rac2:_OCR:mesdb-cluster
复制
8. 再次检查节点1上的数据库状态
--恢复到最初状态
[grid@rac1 ~]$ srvctl status database -d MESDB -detail
Instance MESDB1 is running on node rac1
Instance MESDB1 is connected to ASM instance +ASM1 -->此时节点1上的MESDB1实例连接的是+ASM1
Instance MESDB2 is running on node rac2
Instance MESDB2 is connected to ASM instance +ASM2 -->此时节点2上的MESDB2实例连接的是+ASM2
复制
注释:关于停止ASM实例说明
--1) 如果采用方法1 kill 进程的方式,杀死asm实例,那么从集群状态可以看到,asm实例会自动重新启动
[grid@rac1 ~]$ crsctl stat res -t
ora.asm(ora.asmgroup)
1 ONLINE OFFLINE rac1 Instance Shutdown,STARTING
2 ONLINE ONLINE rac2 Started
ora.MESDB.db
1 ONLINE ONLINE rac1 Open,HOME=/oracle/app/oracle/product/db/191900,STABLE
2 ONLINE ONLINE rac2 Open,HOME=/oracle/app/oracle/product/db/191900,STABLE
--2)如果采用方法2,手动停止asm实例,asm 不会自动重新启动,需要手动启动
[grid@rac1 ~]$ crsctl stat res -t
ora.asm(ora.asmgroup)
1 OFFLINE OFFLINE Instance Shutdown,STBLE
2 ONLINE ONLINE rac2 Started,STABLE
ora.MESDB.db
1 ONLINE ONLINE rac1 Open,HOME=/oracle/app/oracle/product/db/191900,STABLE
2 ONLINE ONLINE rac2 Open,HOME=/oracle/app/oracle/product/db/191900,STABLE
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。