随着 Oracle 12c 的推出,一个名为 Oracle Flex ASM 的特性解除了上述限制,它的一个主要特性是故障切换到集群中的其他节点。本质上是一个中心和叶架构,Oracle Clusterware 通过一个替代 ASM 实例将故障节点的连接将无缝转移到另一个成员节点。在给定集群中运行的 ASM 实例数被称作 ASM 基数,默认值为 3。但此基数值可以使用 Clusterware 命令修改。
纯 12c Flex ASM(相同版本)
Oracle 12c 之前的混合版本(不同版本)
Grid Infrasctructure (GI) 和数据库都运行在 Oracle 12c 上
和平常一样,ASM 实例将在每个节点上运行,Flex 配置支持 12c 之前的数据库。使用 ASM 磁盘组的兼容性参数管理各数据库实例之间的兼容性。这种方法的优点是,如果 Oracle 12c 数据库实例与一个 ASM 实例的连接断开,数据库连接将故障切换至其他服务器上的另一个 ASM 实例。通过将基数设置为 all 即可以实现这种故障切换。
使用Oracle Flex ASM的Oracle RAC 12c
Oracle Flex ASM 配置上的 ASM 实例故障:
登录 RAC 数据库实例 1 (rac1)
[grid@rac12node1 ~]$ hostnamerac12node1
检查 ASM 实例和 RAC 数据库实例的状态
[grid@rac12node1 ~]$ ps -ef | grep pmongrid 2038 25582 0 16:37 pts/1 00:00:00 grep pmongrid 11838 1 0 15:04 ? 00:00:00 asm_pmon_+ASM1oracle 12830 1 0 15:05 ? 00:00:00 ora_pmon_rac12db1
从实例 1 (rac1) 检查 RAC 数据库实例中 ASM 实例的状态
[grid@rac12node1 ~]$ srvctl status asmASM is running on rac12node1,rac12node2
在实例 1 (rac1) 中检查集群状态
[grid@rac12node1 ~]$ crsctl check clusterCRS-4537: Cluster Ready Services is onlineCRS-4529: Cluster Synchronization Services is onlineCRS-4533: Event Manager is online
用于检查 Oracle Flex ASM 是否启用的命令 (rac1)
[grid@rac12node1 ~]$ asmcmdASMCMD> showclustermode ASM cluster : Flex mode enabledASMCMD> showclusterstateNormalASMCMD>
用于更改 ASM 基数的命令 (rac1)
[grid@rac12node1 ~]$ srvctl status asm -detailASM is running on rac12node1,rac12node2ASM is enabled.ASM instance +ASM1 is running on node rac12node1Number of connected clients: 2Client names: rac12db1:rac12db:rac12no-cluster rac12node1:_OCR:rac12no-clusterASM instance +ASM2 is running on node rac12node2Number of connected clients: 3Client names: -MGMTDB:_mgmtdb:rac12no-cluster rac12db2:rac12db:rac12no-cluster rac12node2:_OCR:rac12no-cluster[grid@rac12node1 ~]$
用于检查 Oracle Flex ASM 是否启用的命令 (rac2)
[grid@rac12node2 ~]$ asmcmdASMCMD> showclustermodeASM cluster : Flex mode enabledASMCMD> showclusterstateNormalASMCMD>
如何更改 ASM 基数 (rac2)
[grid@rac12node2 ~]$ srvctl config asm -detailASM home: <CRS home>Password file: +ocrdg/orapwASMBackup of Password file: ASM listener: LISTENERASM is enabled.ASM is individually enabled on nodes: ASM is individually disabled on nodes: ASM instance count: 3Cluster ASM listener: ASMNET1LSNR_ASM[grid@rac12node2 ~]$
查看节点2上访问ASM实例的客户端。
节点2初始状态,grid用户下:
set line 200col INSTANCE_NAME for a60select distinct instance_name,db_name,status from v$asm_client; INSTANCE_NAME DB_NAME STATUS---------------------------------- ------------------ -----------------------+ASM2 +ASM CONNECTED-MGMTDB _mgmtdb CONNECTEDrac12db2 rac12db CONNECTEDrac12node2 _OCR CONNECTED
在 RAC 数据库实例 1 (rac1) 中关闭 ASM 实例
[grid@rac12node1 ~]$ srvctl stop asm -node rac12node1 -stopoption abort -force
在 RAC 数据库实例 1 (rac1) 中检查 ASM 实例的状态
[grid@rac12node1 ~]$ srvctl status asmASM is running on rac12node2
在 RAC 数据库实例 1 (rac1) 中检查集群服务的状态
[grid@rac12node1 ~]$ crsctl check clusterCRS-4537: Cluster Ready Services is onlineCRS-4529: Cluster Synchronization Services is onlineCRS-4533: Event Manager is online
在实例 1 (rac1) 中检查 ASM 和 RAC 数据库的状态
[grid@rac12node1 ~]$ ps -ef | grep pmongrid 3339 25582 0 16:42 pts/1 00:00:00 grep pmonoracle 12830 1 0 15:05 ? 00:00:00 ora_pmon_rac12db1
注:在这里,数据库实例与特定节点中运行的特定 ASM 实例关联。如果因为某种原因,ASM 实例无法启动/服务关闭,数据库实例仍然可以启动,因为数据库实例将查找同一集群中运行的 ASM 实例。图 3 描绘了 Flex ASM 的高可用特性。
从 RAC 数据库实例 1 (rac1) 登录数据库实例
[oracle@rac12node1 ~]$ sqlplus as sysdbaSQL*Plus: Release 12.2.0.1.0 Production on Thu Oct 17 16:45:05 2019Copyright (c) 1982, 2016, Oracle. All rights reserved.Connected to:Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit ProductionSQL> select open_mode from v$database;OPEN_MODE--------------------READ WRITE ---在节点1上数据库实例并未受到影响SQL> select instance_name,instance_number from gv$instance;INSTANCE_NAME INSTANCE_NUMBER---------------- ---------------rac12db1 1rac12db2 2SQL> select instance_name,instance_number from v$instance;INSTANCE_NAME INSTANCE_NUMBER---------------- ---------------rac12db1 1SQL>
grid用户下:
查看节点2 asm连接信息,查看节点2上访问ASM实例的客户端,有了来自节点1的客户端访问。
SQL> select distinct instance_name,db_name,status from v$asm_client; INSTANCE_NAME DB_NAME STATUS---------------------------- ---------------- -----------------------+ASM2 +ASM CONNECTED-MGMTDB _mgmtdb CONNECTEDrac12db1 rac12db CONNECTEDrac12db2 rac12db CONNECTEDrac12node2 _OCR CONNECTED
asmcmd连接查看
---强制连接到+ASM1
[grid@rac12node1 ~]$ asmcmd --privilege sysasm --inst +ASM1Connected to an idle instance.
---强制连接到+ASM2
[grid@rac12node1 ~]$ asmcmd --privilege sysasm --inst +ASM2ASMCMD> lsct 查看asm实例连接情况DB_Name Status Software_Version Compatible_version Instance_Name Disk_Group+ASM CONNECTED 12.2.0.1.0 12.2.0.1.0 +ASM2 DATADG +ASM CONNECTED 12.2.0.1.0 12.2.0.1.0 +ASM2 MGMTDG +ASM CONNECTED 12.2.0.1.0 12.2.0.1.0 +ASM2 OCRDG _mgmtdb CONNECTED 12.2.0.1.0 12.2.0.0.0 -MGMTDB MGMTDG rac12db CONNECTED 12.2.0.1.0 12.2.0.0.0 rac12db1 DATADG rac12db CONNECTED 12.2.0.1.0 12.2.0.0.0 rac12db2 DATADG _OCR CONNECTED - - rac12node2 OCRDG ASMCMD> lsdgState Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files NameMOUNTED EXTERN N 512 512 4096 4194304 8192 1824 0 1824 0 N DATADG/MOUNTED EXTERN N 512 512 4096 4194304 40960 34232 0 34232 0 N MGMTDG/MOUNTED EXTERN N 512 512 4096 4194304 3072 2736 0 2736 0 Y OCRDG/ASMCMD>
总结:数据库实例使用一个专用 ASM 实例,我们强制该 ASM 实例被停止工作来模拟故障,因此数据库实例重新连接到另一节点(在本示例中为节点 2 (rac2))上的现有 ASM 实例。
查看节点2上访问ASM实例的客户端,有了来自节点1的客户端访问。
节点2初始状态:
set line 200col INSTANCE_NAME for a60select distinct instance_name,db_name,status from v$asm_client; INSTANCE_NAME DB_NAME STATUS----------------------------------------------- ------------------------ --------------------------+ASM2 +ASM CONNECTED-MGMTDB _mgmtdb CONNECTEDrac12db2 rac12db CONNECTEDrac12node2 _OCR CONNECTED手动关掉节点1 asm实例:[grid@rac12node1 ~]$ srvctl stop asm -node rac12node1 -stopoption abort -force
手动关掉节点1 asm实例:
[grid@rac12node1 ~]$ srvctl stop asm -node rac12node1 -stopoption abort -force
再次查看节点2 asm连接信息,查看节点2上访问ASM实例的客户端,有了来自节点1的客户端访问。
SQL> select distinct instance_name,db_name,status from v$asm_client; INSTANCE_NAME DB_NAME STATUS-------------------------------------------- ---------------------- -------------------------------+ASM2 +ASM CONNECTED-MGMTDB _mgmtdb CONNECTEDrac12db1 rac12db CONNECTEDrac12db2 rac12db CONNECTEDrac12node2 _OCR CONNECTED

1. 登录 RAC 数据库实例 1 (rac1)
login as: oracleoracle@192.168.xx.xx's password:Last login: Fri Sep 27 06:05:44 2013
2. 检查 ASM 实例和 RAC 数据库实例的状态:
[oracle@rac1 ~]$ ps -ef | grep pmonoracle 3053 1 0 05:56 ? 00:00:00 asm_pmon_+ASM1oracle 3849 1 0 05:57 ? 00:00:00 ora_pmon_flavia1
3. 在 RAC 数据库实例 1 (rac1) 中检查 ASM 实例的状态
[oracle@rac1 ~]$ srvctl status asmASM is running on rac2,rac1
4. 在 RAC 数据库实例 1 (rac1) 中检查集群的状态
[oracle@rac1 ~]$ crsctl check clusterCRS-4537: Cluster Ready Services is onlineCRS-4529: Cluster Synchronization Services is onlineCRS-4533: Event Manager is online
5. 在 RAC 数据库实例 1 (rac1) 中停止 ASM 实例
[oracle@rac1 ~]$ srvctl stop asm -n rac1 -o abort -f
6. 在 RAC 数据库实例 1 (rac1) 中检查 ASM 实例的状态
[oracle@rac1 ~]$ srvctl status asmASM is running on rac2
7. 检查 ASM 实例和 RAC 数据库实例 (rac1) 的状态
[oracle@rac1 ~]$ ps -ef | grep pmonoracle 7885 5795 0 06:20 pts/0 00:00:00 grep pmon
总结:数据库实例与 ASM 实例强关联。如果 ASM 实例发生故障,同一节点上的数据库实例也会发生故障。
Oracle Flex ASM 支持 Oracle Database 12c 客户端使用更大的 LUN 大小。 支持的最大磁盘组数为 511。
可以灵活地重命名磁盘组中的 ASM 磁盘。
ASM 实例的补丁级验证
复制物理元数据
滚动补丁期间禁用补丁级验证
在早期版本中,集群要求:
Flex ASM 增加 ASM 网络,可用于 ASM 与其客户端之间的通信,以便隔离和分流 ASM 通信。
一个供客户端应用访问的公共网络
一个或多个用于集群内节点间通信(包括 ASM 通信)的专用网络

更多精彩干货分享
点击下方名片关注
IT那活儿





