资讯专栏INFORMATION COLUMN

深入了解 Oracle Flex ASM 及其优点

IT那活儿 / 2508人阅读
深入了解 Oracle Flex ASM 及其优点
一. 简 介

在 Oracle 12c 之前,对于要使用 ASM 的数据库实例来说,所有节点上的 ASM 实例必须已处于运行状态,才能启动数据库实例。如果 ASM 实例未运行,则意味着在存储级使用 ASM 的数据库实例不能启动。这实际上意味着无论采用何种技术(即 RAC、ASM 和共享存储),均不能访问数据库实例。

随着 Oracle 12c 的推出,一个名为 Oracle Flex ASM 的特性解除了上述限制,它的一个主要特性是故障切换到集群中的其他节点。本质上是一个中心和叶架构,Oracle Clusterware 通过一个替代 ASM 实例将故障节点的连接将无缝转移到另一个成员节点。在给定集群中运行的 ASM 实例数被称作 ASM 基数,默认值为 3。但此基数值可以使用 Clusterware 命令修改。


二. Oracle Flex ASM的实现方面

Oracle Flex ASM 可通过两种方式实现:
  • 纯 12c Flex ASM(相同版本)

  • Grid Infrasctructure (GI) 和数据库都运行在 Oracle 12c 上

  • Oracle 12c 之前的混合版本(不同版本)

  • 和平常一样,ASM 实例将在每个节点上运行,Flex 配置支持 12c 之前的数据库。使用 ASM 磁盘组的兼容性参数管理各数据库实例之间的兼容性。这种方法的优点是,如果 Oracle 12c 数据库实例与一个 ASM 实例的连接断开,数据库连接将故障切换至其他服务器上的另一个 ASM 实例。通过将基数设置为 all 即可以实现这种故障切换。


使用Oracle Flex ASM的Oracle RAC 12c

标准 Oracle Flex ASM 配置:

 Oracle Flex ASM 配置上的 ASM 实例故障:

  • 登录 RAC 数据库实例 1 (rac1)
[grid@rac12node1 ~]$ hostname
rac12node1
  • 检查 ASM 实例和 RAC 数据库实例的状态

[grid@rac12node1 ~]$ ps -ef | grep pmon
grid    2038   25582 0  16:37 pts/1    00:00:00 grep pmon
grid    11838      1 0  15:04 ?        00:00:00 asm_pmon_+ASM1
oracle  12830      1 0  15:05 ?        00:00:00 ora_pmon_rac12db1
  • 从实例 1 (rac1) 检查 RAC 数据库实例中 ASM 实例的状态

[grid@rac12node1 ~]$ srvctl status asm
ASM is running on rac12node1,rac12node2
  • 在实例 1 (rac1) 中检查集群状态

[grid@rac12node1 ~]$ crsctl check cluster
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
  • 用于检查 Oracle Flex ASM 是否启用的命令 (rac1)

[grid@rac12node1 ~]$ asmcmd
ASMCMD> showclustermode
ASM cluster : Flex mode enabled
ASMCMD> showclusterstate
Normal
ASMCMD>
  • 用于更改 ASM 基数的命令 (rac1)

[grid@rac12node1 ~]$ srvctl status asm -detail
ASM is running on rac12node1,rac12node2
ASM is enabled.
ASM instance +ASM1 is running on node rac12node1
Number of connected clients: 2
Client names: rac12db1:rac12db:rac12no-cluster rac12node1:_OCR:rac12no-cluster
ASM instance +ASM2 is running on node rac12node2
Number of connected clients: 3
Client names: -MGMTDB:_mgmtdb:rac12no-cluster rac12db2:rac12db:rac12no-cluster rac12node2:_OCR:rac12no-cluster
[grid@rac12node1 ~]$
  • 用于检查 Oracle Flex ASM 是否启用的命令 (rac2)

[grid@rac12node2 ~]$ asmcmd
ASMCMD> showclustermode
ASM cluster : Flex mode enabled
ASMCMD> showclusterstate
Normal
ASMCMD>
  • 如何更改 ASM 基数 (rac2)

[grid@rac12node2 ~]$ srvctl config asm -detail
ASM home:
Password file: +ocrdg/orapwASM
Backup of Password file:
ASM listener: LISTENER
ASM is enabled.
ASM is individually enabled on nodes: 
ASM is individually disabled on nodes: 
ASM instance count: 3
Cluster ASM listener: ASMNET1LSNR_ASM
[grid@rac12node2 ~]$
  • 查看节点2上访问ASM实例的客户端。

节点2初始状态,grid用户下:

set line 200
col INSTANCE_NAME for a60
select distinct instance_name,db_name,status from v$asm_client;

INSTANCE_NAME                            DB_NAME         STATUS
---------------------------------- ------------------ -----------------------
+ASM2                                   +ASM            CONNECTED
-MGMTDB                                 _mgmtdb         CONNECTED
rac12db2                                rac12db         CONNECTED
rac12node2                              _OCR            CONNECTED
  • 在 RAC 数据库实例 1 (rac1) 中关闭 ASM 实例

[grid@rac12node1 ~]$ srvctl stop asm -node rac12node1 -stopoption abort -force
  • 在 RAC 数据库实例 1 (rac1) 中检查 ASM 实例的状态

[grid@rac12node1 ~]$ srvctl status asm
ASM is running on rac12node2
  • 在 RAC 数据库实例 1 (rac1) 中检查集群服务的状态

[grid@rac12node1 ~]$ crsctl check cluster
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
  • 在实例 1 (rac1) 中检查 ASM 和 RAC 数据库的状态

[grid@rac12node1 ~]$ ps -ef | grep pmon
grid    3339 25582   0 16:42 pts/1    00:00:00 grep pmon
oracle 12830     1   0 15:05 ?        00:00:00 ora_pmon_rac12db1

注:在这里,数据库实例与特定节点中运行的特定 ASM 实例关联。如果因为某种原因,ASM 实例无法启动/服务关闭,数据库实例仍然可以启动,因为数据库实例将查找同一集群中运行的 ASM 实例。图 3 描绘了 Flex ASM 的高可用特性。

  • 从 RAC 数据库实例 1 (rac1) 登录数据库实例

[oracle@rac12node1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Thu Oct 17 16:45:05 2019

Copyright (c) 1982, 2016, Oracle. All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>
 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                       1
rac12db2                       2

SQL>
 select instance_name,instance_number from v$instance;

INSTANCE_NAME    INSTANCE_NUMBER
---------------- ---------------
rac12db1                       1

SQL>

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            CONNECTED
rac12db1                        rac12db            CONNECTED
rac12db2                        rac12db            CONNECTED
rac12node2                      _OCR               CONNECTED
Flex ASM可以在ASM实例意外终止后(节点 1),让受影响节点作为客户端访问远程节点(节点2)的ASM实例。
  • asmcmd连接查看

---强制连接到+ASM1

[grid@rac12node1 ~]$ asmcmd --privilege sysasm --inst +ASM1
Connected to an idle instance.

---强制连接到+ASM2

[grid@rac12node1 ~]$ asmcmd --privilege sysasm --inst +ASM2
ASMCMD> 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> lsdg
State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED 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 200
col INSTANCE_NAME for a60
select distinct instance_name,db_name,status from v$asm_client;

INSTANCE_NAME DB_NAME STATUS
----------------------------------------------- ------------------------ --------------------------
+ASM2 +ASM CONNECTED
-MGMTDB _mgmtdb CONNECTED
rac12db2 rac12db CONNECTED
rac12node2 _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 CONNECTED
rac12db1 rac12db CONNECTED
rac12db2 rac12db CONNECTED
rac12node2 _OCR CONNECTED


三. Oracle Database 11.2 或早期版本

如前面针对 Oracle 12c 的介绍所述,ASM 与数据库实例的关联本质上是特定的。这意味着,如果 ASM 实例无法启动,该节点/ASM 中的关联数据库实例也无法启动,从而导致该数据库无法访问。

1. 登录 RAC 数据库实例 1 (rac1)

login as: oracle
oracle@192.168.xx.xxs password:
Last login: Fri Sep 27 06:05:44 2013

2. 检查 ASM 实例和 RAC 数据库实例的状态:

[oracle@rac1 ~]$ ps -ef | grep pmon
oracle 3053     1  0 05:56 ? 00:00:00 asm_pmon_+ASM1
oracle 3849     1  0 05:57 ? 00:00:00 ora_pmon_flavia1

3. 在 RAC 数据库实例 1 (rac1) 中检查 ASM 实例的状态

[oracle@rac1 ~]$ srvctl status asm
ASM is running on rac2,rac1

4. 在 RAC 数据库实例 1 (rac1) 中检查集群的状态

[oracle@rac1 ~]$ crsctl check cluster
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-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 asm
ASM is running on rac2

7. 检查 ASM 实例和 RAC 数据库实例 (rac1) 的状态

[oracle@rac1 ~]$ ps -ef | grep pmon
oracle 7885  5795  0 06:20 pts/0    00:00:00 grep pmon

总结:数据库实例与 ASM 实例强关联。如果 ASM 实例发生故障,同一节点上的数据库实例也会发生故障。


四. 为何使用Oracle Flex ASM

  • Oracle Flex ASM 支持 Oracle Database 12c 客户端使用更大的 LUN 大小。
  • 支持的最大磁盘组数为 511。

  • 可以灵活地重命名磁盘组中的 ASM 磁盘。

  • ASM 实例的补丁级验证

  • 滚动补丁期间禁用补丁级验证

  • 复制物理元数据


五. Oracle Flex ASM中的网络增强

  • 在早期版本中,集群要求:

  • 一个供客户端应用访问的公共网络

    一个或多个用于集群内节点间通信(包括 ASM 通信)的专用网络

  • Flex ASM 增加 ASM 网络,可用于 ASM 与其客户端之间的通信,以便隔离和分流 ASM 通信。


六. 部署 Flex ASM

在12.2.0.1版本中,已经强制使用Flex ASM,在安装是无需选择,Flex ASM已经默认集成在12.2.0.1版本中


END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129880.html

相关文章

  • 深入字节码 -- 计算方法执行时间

    摘要:什么是字节码程序通过编译之后生成文件就是字节码集合正是有这样一种中间码字节码,使得等函数语言只用实现一个编译器即可运行在上。 什么是字节码? java程序通过javac编译之后生成文件.class就是字节码集合,正是有这样一种中间码(字节码),使得scala/groovy/clojure等函数语言只用实现一个编译器即可运行在JVM上。看看一段简单代码。 public long ...

    娣辩孩 评论0 收藏0
  • Android 性能监控系列一(原理篇)

    摘要:全称应用性能管理监控后面我会通过一系列的文章来介绍的原理框架设计与实现等等。在应用构建期间,通过修改字节码的方式来进行字节码插桩就是实现自动化的方案之一。 showImg(https://segmentfault.com/img/bVbbRX6?w=1995&h=1273); 欢迎关注微信公众号:BaronTalk,获取更多精彩好文! 一. 前言 性能问题是导致 App 用户流失的罪魁...

    yacheng 评论0 收藏0
  • DBASK问答集萃第四期

    摘要:问题九库控制文件扩展报错库的扩展报错,用的是裸设备,和还是原来大小,主库的没有报错,并且大小没有变,求解释。专家解答从报错可以看出,控制文件从个块扩展到个块时报错,而裸设备最大只支持个块,无法扩展,可以尝试将参数改小,避免控制文件报错。 链接描述引言 近期我们在DBASK小程序新关联了运维之美、高端存储知识、一森咖记、运维咖啡吧等数据领域的公众号,欢迎大家阅读分享。 问答集萃 接下来,...

    SKYZACK 评论0 收藏0
  • 为何Spring MVC可获取到方法参数名,而MyBatis却不行?【享学Spring MVC】

    每篇一句 胡适:多谈些问题,少聊些主义 前言 Spring MVC和MyBatis作为当下最为流行的两个框架,大家平时开发中都在用。如果你往深了一步去思考,你应该会有这样的疑问: 在使用Spring MVC的时候,你即使不使用注解,只要参数名和请求参数的key对应上了,就能自动完成数值的封装 在使用MyBatis(接口模式)时,接口方法向xml里的SQL语句传参时,必须(当然不是100%的必须,...

    孙淑建 评论0 收藏0
  • Asm.js: Javascript的编译目标

    摘要:来自于应用的一个新领域编译成的应用它是应用的一个全新流派,由的项目催生而来。所有外部数据在一个称为堆的对象中存储并被引用。到目前为止,大部分的使用情况下,代码性能是至关重要的比如运行游戏,图像,处理语言翻译和库。 正如许多开发者一样,我也为Asm.js的前景而感到兴奋不已。最近的新闻——Asm.js正在被Firefox支持——引起了我的兴趣。同样感兴趣的还有Mozilla和Epic声明...

    用户84 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<