Oracle Flex ASM

Oracle Flex ASM 允许 Oracle ASM 实例运行在与数据库服务器分离的物理服务器上。通过这种部署,更大的 Oracle ASM 实例集群可以支持更多的数据库客户端,同时减少整个系统的 Oracle ASM占用空间。当使用 Oracle Flex ASM 时,Oracle ASM 客户端被配置为直接访问存储。

 

使用 Oracle Flex ASM,可以将所有存储需求合并到一组磁盘组中。所有这些磁盘组都由运行在单个集群中的一小组 Oracle ASM 实例装载和管理。可以通过基数设置指定 Oracle ASM 实例的数量。默认值是三个实例。

集群是一组提供组成员关系服务的节点。每个集群都有一个全局惟一的名称。每个集群都有一个或多个 Hub 节点。中心节点可以访问 Oracle ASM 磁盘。每个集群至少有一个专用网络和一个公共网络。如果集群使用 Oracle ASM 存储,那么它至少有一个 Oracle ASM 网络。一个单一的网络可以被用作私有和 ASM 网络。出于安全原因,Oracle ASM 网络不应该是公开的。集群中只能运行一个 Oracle Flex ASM 配置。

在 Oracle Flex ASM 中,一个 ASM 实例可以在多个配置中运行:

  • 直接访问 ASM 磁盘的本地 ASM 客户端(标准ASM集群)

  • Oracle Flex ASM 客户端直接访问 Oracle ASM 磁盘

  • 通过 Oracle ASM 代理实例进行 Oracle ACFS 访问

  • 使用 Oracle IOServer (IOS) 基于网络连接到 Oracle ASM 磁盘组

一、简  介

Oracle Real Application Cluster (RAC) 是 Oracle 解决方案中的一个著名产品,用于保持业务数据的高可用性。Oracle RAC 允许在所有集群节点之间共享负载,采用 N-1 容错配置来应对节点故障,其中 N 是节点总数。Oracle RAC 一直在不断改进每个版本,此次也不例外。新的 12.1.0.1 版包含“Flex ASM”和“Flex 集群”两个属性,支持面向云计算的环境的各种苛刻需求。

Oracle RAC 12c 引入了两个新概念:

中心节点: 和以前的版本一样,它们通过专用网络相互连接,并且可以直接访问共享存储。这些节点可以直接访问 Oracle 集群注册表 (OCR) 和表决磁盘 (VD)。

叶节点: 这些节点是轻型节点,彼此不互连,也不能像中心节点一样访问共享存储。每个叶节点与所连接的中心节点通信,并通过所连接的中心节点连接到集群。

此拓扑允许松散耦合的应用服务器与紧密耦合的数据库服务器形成一个集群。紧密耦合的服务器是中心服务器,与集群中的其他中心服务器共享数据库、OCR 和表决设备的存储并进行对等通信。松耦合的服务器是叶服务器,与集群中的单个中心服务器形成松散通信关联,不需要与集群中的其他中心服务器或叶服务器共享存储,也不需要与之进行对等通信,只与所关联的中心服务器通信。在 12.1.0.1 中,叶服务器旨在提高应用的高可用性和实现多层资源管理。

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

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

二、Oracle Flex 集群

从架构上来说,Oracle Flex 集群包括一个中心和叶架构,其中只有中心节点可以直接访问 Oracle 集群注册表 (OCR) 和表决磁盘 (VD)。但是应用可以通过叶节点访问数据库,而不必在叶节点上运行 ASM 实例。通过中心节点连接到数据库使得它对应用透明。

图 1:描绘了一个典型的 Oracle Flex 集群,包含 4 个叶节点和 2 个中心节点。简单地说,Oracle Flex 集群需要 Oracle Flex ASM。

Oracle Flex ASM_第1张图片

三、Oracle Flex ASM 的实现方面

Oracle Flex ASM 可通过两种方式实现:

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

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

  • 纯 12c Flex ASM(相同版本)

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

使用 Oracle Flex ASM 的 Oracle RAC 12c

Oracle Flex ASM_第2张图片

标准 Oracle Flex ASM 配置:

Oracle Flex ASM_第3张图片

FLEX ASM后ASM实例变少了

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

Oracle Flex ASM_第4张图片

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

[oracle@oel6-112-rac1 Desktop]$ hostname
oel6-112-rac1.localdomain

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

[oracle@oel6-112-rac1 Desktop]$ ps -ef | grep pmon
oracle    3325     1  0 17:39 ?        00:00:00 asm_pmon_+ASM1
oracle    3813     1  0 17:40 ?        00:00:00 mdb_pmon_-MGMTDB
oracle    5806     1  0 17:42 ?        00:00:00 ora_pmon_orcl1
oracle    6193     1  0 17:42 ?        00:00:00 apx_pmon_+APX1

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

[oracle@oel6-112-rac1 Desktop]$ srvctl status asm
ASM is running on oel6-112-rac2,oel6-112-rac1

4. 在实例 1 (rac1) 中检查集群状态

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

5. 用于检查 Oracle Flex ASM 是否启用的命令 (rac1)

[oracle@oel6-112-rac1 Desktop]$ asmcmd
ASMCMD> showclustermode 
ASM cluster : Flex mode enabled
ASMCMD> showclusterstate
Normal

6. 用于更改 ASM 基数的命令 (rac1)

[oracle@oel6-112-rac1 Desktop]$ srvctl status asm -detail
ASM is running on oel6-112-rac2,oel6-112-rac1
ASM is enabled.
[oracle@oel6-112-rac1 Desktop]$ srvctl config asm -detail
ASM home: u01/app/12.1.0/grid
Password file: +DATA/orapwASM
ASM listener: LISTENER
ASM is enabled.
ASM instance count: 3
Cluster ASM listener: ASMNET1LSNR_ASM

7. 用于检查 Oracle Flex ASM 是否启用的命令 (rac2)

[oracle@oel6-112-rac2 Desktop]$ asmcmd
ASMCMD> showclustermode
ASM cluster : Flex mode enabled
ASMCMD> showclusterstate
Normal
ASMCMD> exit

8. 如何更改 ASM 基数 (rac2)

[oracle@oel6-112-rac2 Desktop]$ srvctl config  asm -detail
ASM home: u01/app/12.1.0/grid
Password file: +DATA/orapwASM
ASM listener: LISTENER
ASM is enabled.
ASM instance count: 3
Cluster ASM listener: ASMNET1LSNR_ASM

9. 在 RAC 数据库实例 1 (rac1) 中关闭 ASM 实例

[oracle@oel6-112-rac1 Desktop]$ srvctl stop asm -node oel6-112-rac1 -stopoption abort -force

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

[oracle@oel6-112-rac1 Desktop]$ srvctl status asm
PRCR-1070 : Failed to check if resource ora.asm is registered
Cannot communicate with crsd

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

[oracle@oel6-112-rac1 Desktop]$ crsctl check cluster
CRS-4535: Cannot communicate with Cluster Ready Services
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

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

[oracle@oel6-112-rac1 Desktop]$ ps -ef | grep pmon
oracle    3813     1  0 17:40 ?        00:00:00 mdb_pmon_-MGMTDB
oracle    5806     1  0 17:42 ?        00:00:00 ora_pmon_orcl1
oracle    6193     1  0 17:42 ?        00:00:00 apx_pmon_+APX1

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

13. 在 RAC 数据库实例 1 (rac1) 中检查没有 ASM 实例的正在运行的 RAC 数据库实例的状态

[oracle@oel6-112-rac1 Desktop]$ . oraenv
ORACLE_SID = [orcl1] ? orcl1
ORACLE_HOME = [/home/oracle] ? u01/app/oracle/product/12.1.0/db_1
The Oracle base remains unchanged with value u01/app/oracle

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

[oracle@oel6-112-rac1 Desktop]$ sqlplus nolog
SQL*Plus: Release 12.1.0.1.0 Production on Wed Sep 25 18:24:36 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

SQL> connect sys/oracle@orcl as sysdba
Connected.

SQL> select instance_name,instance_number from gv$instance;

INSTANCE_NAME           INSTANCE_NUMBER
-------------------------------------------
orcl2                         2
orcl1                         1
SQL> select instance_name,instance_number from v$instance;


INSTANCE_NAME           INSTANCE_NUMBER
-------------------------------------------
orcl2                         2

SQL> connect sys/oracle@orcl as sysdba
Connected.

SQL> select instance_name,instance_number from gv$instance;

INSTANCE_NAME           INSTANCE_NUMBER
-------------------------------------------
orcl1                         1

15. 从 RAC 数据库实例 1 (rac1) 连接到 RAC 数据库实例 2 (rac2) 的 ASM 实例

[oracle@oel6-112-rac1 Desktop]$ . oraenv
ORACLE_SID = [orcl1] ? +ASM2
ORACLE_HOME = [/home/oracle] ? u01/app/12.1.0/grid
The Oracle base remains unchanged with value u01/app/oracle

[oracle@oel6-112-rac1 Desktop]$ asmcmd --privilege sysasm --inst +ASM2

ASMCMD> lsdg
State    Type    Rebal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  EXTERN  N         512   4096  1048576     15342     4782                0            4782              0             Y  DATA/
ASMCMD>

总结:数据库实例使用一个专用 ASM 实例,我们强制该 ASM 实例被停止工作来模拟故障,因此数据库实例重新连接到另一节点(在本示例中为节点 2 (rac2))上的现有 ASM 实例。可以看到对于一个任意一个节点的ASM 实例的意外关闭/启动,都不会影响该节点上的数据库状态,这大大增强了RAC 的高可用性。

Oracle Database 11.2 或早期版本

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

Oracle Flex ASM_第5张图片

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

login as: oracle
[email protected]'s 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

下面是 Flex ASM 安装程序的屏幕截图。

选择选项“Advanced Installation”

Oracle Flex ASM_第6张图片

有三个存储选项:

标准 ASM

  • 12c 之前的 ASM 配置模式

Oracle Flex ASM

  • 推荐

非 ASM 托管的存储

Oracle Flex ASM_第7张图片

六、管理 Flex ASM:

  • 无需 Flex ASM 特定的实例参数

  • ASM 服务器实例使用自动内存管理 (AMM)

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

 
  

复制代码

  1. [grid@rac12node1 ~]$ hostname
    rac12node1
  • 检查 ASM 实例和 RAC 数据库实例的状态

 
  

复制代码

  1. [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 实例的状态

 
  

复制代码

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

 
  

复制代码

  1. [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)

 
  

复制代码

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

 
  

复制代码

  1. [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)

 
  

复制代码

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

 
  

复制代码

  1. [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用户下:

 
  

复制代码

  1. 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 实例

 
  

复制代码

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

 
  

复制代码

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

 
  

复制代码

  1. [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 数据库的状态

 
  

复制代码

  1. [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) 登录数据库实例

 
  

复制代码

  1. [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的客户端访问。

 
  

复制代码

  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

 
  

复制代码

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

---强制连接到+ASM2

 
  

复制代码

  1. [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初始状态:

 
  

复制代码

  1. 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实例:

 
  

复制代码

  1. [grid@rac12node1 ~]$ srvctl stop asm -node rac12node1 -stopoption abort -force

再次查看节点2 asm连接信息,查看节点2上访问ASM实例的客户端,有了来自节点1的客户端访问。

 
  

复制代码

  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 中的关联数据库实例也无法启动,从而导致该数据库无法访问。

Oracle Flex ASM_第8张图片

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

 
  

复制代码

  1. login as: oracle
    [email protected] password:
    Last login: Fri Sep 27 06:05:44 2013

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

 
  

复制代码

  1. [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 实例的状态

 
  

复制代码

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

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

 
  

复制代码

  1. [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 实例

 
  

复制代码

  1. [oracle@rac1 ~]$ srvctl stop asm -n rac1 -o abort -f

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

 
  

复制代码

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

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

 
  

复制代码

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

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

Oracle 18c 12c RAC flex asm特性测试

在11g rac中asm实例与oracle实例通常需要在同一个节点上,一旦节点上的asm实例异常终止,其所对应的oracle实例也会被终止,单节点数据库失败。然而在18c rac中默认已开启flex asm特性,单节点asm实例中断并不会影响oracle数据库的业务,反而会自动连接存活节点上的asm实例。

实际经过测试发现此FLEX特性在12C R2(12.2.0.1)就已存在

下面是18c与12.1.0.2的功能测试

一、Oracle 18c
1 查看rac集群模式

[root@rac1 ~]# asmcmd showclustermode
ASM cluster : Flex mode enabled - Direct Storage Access
默认已开启flex特性
  • 1
  • 2
  • 3

2 查看节点asm实例状态

[root@rac1 ~]# srvctl status asm -detail
ASM is running on rac1,rac2 ----->asm在两个节点上运行
ASM is enabled.
ASM instance +ASM1 is running on node rac1
Number of connected clients: 2
Client names: orcl1:orcl:rac-18c rac1:_OCR:rac-18c
ASM instance +ASM2 is running on node rac2
Number of connected clients: 3
Client names: -MGMTDB:_mgmtdb:rac-18c orcl2:orcl:rac-18c rac2:_OCR:rac-18c
  • 1

3 查看数据库实例状态

[root@rac1 ~]# srvctl status database -d orcl -detail 
Instance orcl1 is running on node rac1  
Instance orcl1 is connected to ASM instance +ASM1 ---->此时节点1上的orcl实例连接的是+ASM1

Instance orcl2 is running on node rac2
Instance orcl2 is connected to ASM instance +ASM2
  • 1

4 强制关闭节点1上的asm实例

[root@rac1 ~]# ps -ef|grep pmon
grid       3517      1  0 14:50 ?        00:00:00 asm_pmon_+ASM1
oracle     3828      1  0 14:50 ?        00:00:00 ora_pmon_orcl1

[root@rac1 ~]# srvctl stop asm -node rac1 -stopoption 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
  • 1

5 查看asm实例信息

[root@rac1 ~]# srvctl status asm
ASM is running on rac2  ---->此时asm只在节点2上运行

[root@rac1 ~]# srvctl status database -d orcl -detail
Instance orcl1 is running on node rac1
Instance orcl1 is connected to ASM instance +ASM2 -->节点1已切换到节点2上的asm实例
Instance orcl2 is running on node rac2
Instance orcl2 is connected to ASM instance +ASM2

[root@rac1 ~]# srvctl status asm -detail
ASM is running on rac2
ASM is enabled.
ASM instance +ASM2 is running on node rac2
Number of connected clients: 4
Client names: -MGMTDB:_mgmtdb:rac-18c orcl1:orcl:rac-18c orcl2:orcl:rac-18c rac2:_OCR:rac-18c

6 测试节点1上的数据库

```sql
[oracle@rac1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Fri Feb 15 14:58:18 2019
Version 18.3.0.0.0

Copyright © 1982, 2018, Oracle.  All rights reserved.


Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> select status from v$instance;

STATUS
------------
OPEN

SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ WRITE

在节点1上数据库实例并未受到影响

7 再次启动节点1的asm实例

[root@rac1 ~]# srvctl start asm -node rac1
[root@rac1 ~]# srvctl status asm -detail  
ASM is running on rac1,rac2 --->asm实例又重新恢复
ASM is enabled.
ASM instance +ASM1 is running on node rac1
Number of connected clients: 2
Client names: orcl1:orcl:rac-18c rac1:_OCR:rac-18c
ASM instance +ASM2 is running on node rac2
Number of connected clients: 3
Client names: -MGMTDB:_mgmtdb:rac-18c orcl2:orcl:rac-18c rac2:_OCR:rac-18c

Oracle 12.1.0.2

1 查看集群模式

[grid@rac1 ~]$ asmcmd showclustermode
ASM cluster : Flex mode disabled
  • 1
  • 2

未开启flex

2 手动kill asm进程

[grid@rac1 ~]$ ps -ef|grep pmon
grid      13836      1  0 15:52 ?        00:00:00 asm_pmon_+ASM1
grid      14200      1  0 15:52 ?        00:00:00 mdb_pmon_-MGMTDB
grid      31316  12331  0 16:26 pts/0    00:00:00 grep --color=auto pmon

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

[grid@rac1 ~]$ srvctl status database -d orcl
Instance orcl1 is not running on node rac1
Instance orcl2 is running on node rac2

[grid@rac1 ~]$ kill -9 13836
  • 1

3 查看节点1状态

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

[grid@rac1 ~]$ srvctl status database -d orcl
Instance orcl1 is not running on node rac1
Instance orcl2 is running on node rac2

oracle 集群无法启动 报错CRS-0804 PROC-26

集群alert日志中报错如下,PROC-26: Error while accessing the physical storage Storage这里还以为是存储的问题,还让存储的人看了存储,在这里其实不是存储的问题

2018-04-05 15:16:53.918 [CRSD(2697)]CRS-8500: Oracle Clusterware CRSD process is starting with operating system process ID 2697
2018-04-05 15:17:00.608 [CRSD(2697)]CRS-1013: The OCR location in an ASM disk group is inaccessible. Details in /u01/app/grid/diag/crs//crs/trace/crsd.trc.
2018-04-05 15:17:00.615 [CRSD(2697)]CRS-0804: Cluster Ready Service aborted due to Oracle Cluster Registry error [PROC-26: Error while accessing the physical storage Storage layer error [Insufficient quorum to open OCR devices] [0]]. Details at (:CRSD00111:) in /u01/app/grid/diag/crs//crs/trace/crsd.trc.
1
2
3
trace 文件中报错如下error=ORA-01017: invalid username/password

: USRTHRD:368556352: {0:9:3} 6425 Error 4 querying length of attr ASM_STATIC_DISCOVERY_ADDRESS

: CLSCRED:368556352: (:CLSCRED1079:)clsCredOcrKeyExists: Obj dom : SYSTEM.credentials.domains.root.ASM.Self.af16666dbxxxxxxxbfda990c1a2fee1d.root not found
: USRTHRD:368556352: {0:9:3} 6210 Error 4 opening dom root in 0x7fb51026f530

:kgfn.c@6356: kgfnGetNodeType: flags=0x10
:kgfn.c@6369: kgfnGetNodeType: ntyp=1
:kgfn.c@4644: kgfnConnect2: kgfnGetBeqData failed
:kgfn.c@4680: kgfnConnect: srvr valid
:kgfn.c@5972: kgfnConnect2Int: sysasm=0 envflags=0x10 srvrflags=0x1 unam=crsuser__asm_001 password is NOT NULL pstr=_ocr
:kgfn.c@6121: kgfnConnect2Int: hosts=1
:kgfn.c@6134: kgfnConnect2Int: cstr=(DESCRIPTION=(TRANSPORT_CONNECT_TIMEOUT=60)(EXPIRE_TIME=1)(LOAD_BALANCE=ON)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=192.xxx.16.24)(PORT=1522)))(CONNECT_DATA=(SERVICE_NAME=+ASM)))
:kgfn.c@6200: kgfnConnect2Int: OCISessionBegin failed
:kgfn.c@1602: kgfnRecordErrPriv: status=-1 at kgfn.c:6284
:kgfn.c@1648: kgfnRecordErrPriv: 1017 error=ORA-01017: invalid username/password; logon denied
 
问题原因:
The “SYSTEM.credentials.domains.root.ASM.Self.af16666dbxxxxxxxbfda990c1a2fee1d.root not found” 说明是 “crsuser__asm_001” 用户损坏或者是空。

解决办法:
1.重建数据库的密码文件:参考((Doc ID 2139591.1))
2.最快速的临时解决办法就是grid用户启动ASM实例
然后root用户用启动资源的方式启动CRS进程
crsctl start res ora.crsd -init

知识补充:
oracle 12C的集群默认是fixed asm模式,在这种模式下CRSUSER__ASM_001被授予CRSD,asmcmd等使用的sysasm角色,而ORACLE_001被授予数据库使用的sysdba角色。
它们用于在Flex ASM模式下内部与远程ASM实例进行通信。

 

  ORACLE_001用户提供了在Flex ASM配置中对DB实例的认证。
没有ORACLE_001用户,数据库实例无法访问远程ASM Flex实例

Flex ASM环境中crsd无法启动造成Grid Infrastructure (GI) 启动失败 (Doc ID 2504902.1)

Oracle Flex ASM_第9张图片


适用于:

Oracle Database Cloud Service - 版本 N/A 和更高版本
Oracle Database - Enterprise Edition - 版本 12.2.0.1 和更高版本
Oracle Database Cloud Schema Service - 版本 N/A 和更高版本
Oracle Database Exadata Cloud Machine - 版本 N/A 和更高版本
Oracle Cloud Infrastructure - Database Service - 版本 N/A 和更高版本
本文档所含信息适用于所有平台

症状

在一个Flex ASM环境里, Grid Infrastructure (GI) 启动失败, 而这时其它的一个或者多个节点上GI正在运行,
并且 "crsctl stat res -t -init" 的输出显示除了ora.crsd以外其它资源都是起来的。
这时 ora.crsd 的状态是offline 或者 intermediate。

集群的 alert.log 报如下错误:

2018-04-05 15:16:53.918 [CRSD(2697)]CRS-8500: Oracle Clusterware CRSD process is starting with operating system process ID 2697
2018-04-05 15:17:00.608 [CRSD(2697)]CRS-1013: The OCR location in an ASM disk group is inaccessible. Details in /u01/app/grid/diag/crs/sp1frhodb102/crs/trace/crsd.trc.
2018-04-05 15:17:00.615 [CRSD(2697)]CRS-0804: Cluster Ready Service aborted due to Oracle Cluster Registry error [PROC-26: Error while accessing the physical storage Storage layer error [Insufficient quorum to open OCR devices] [0]]. Details at (:CRSD00111:) in /u01/app/grid/diag/crs/sp1frhodb102/crs/trace/crsd.trc.

跟踪文件 crsd.trc 报如下错误:

2018-04-05 15:17:01.732 : CLSCRED:2919112768: (:CLSCRED0101:)clsCredDomInitRootDom: Using user given storage context for repository access.
2018-04-05 15:17:01.757 : OCRRAW:2919112768: 8033 Error 4 querying length of attr ASM_DISCOVERY_ADDRESS

2018-04-05 15:17:01.761 : OCRRAW:2919112768: 8033 Error 4 querying length of attr ASM_STATIC_DISCOVERY_ADDRESS

2018-04-05 15:17:01.798 : CLSCRED:2919112768: (:CLSCRED1079:)clsCredOcrKeyExists: Obj dom : SYSTEM.credentials.domains.root.ASM.Self.076fa97b2ac84f70ff7035254e98f38d.root not found
2018-04-05 15:17:01.798 : OCRRAW:2919112768: 7755 Error 4 opening dom root in 0x4d37e30

2018-04-05 15:17:01.816 : OCRRAW:2919112768: kgfnConnect2: kgfnGetBeqData failed

2018-04-05 15:17:01.816*:kgfn.c@4933: kgfnConnect2: kgfnGetBeqData failed
2018-04-05 15:17:01.816 : CSSCLNT:2919112768: clsssinit: initialized context: (0x4f23d50) flags 0x104
2018-04-05 15:17:01.821 : CSSCLNT:2919112768: clsssterm: terminating context (0x4f23d50)
2018-04-05 15:17:01.862 : OCRRAW:2919112768: kgfnConnect2Int: cstr=(DESCRIPTION=(TCP_USER_TIMEOUT=1)(TRANSPORT_CONNECT_TIMEOUT=60)(EXPIRE_TIME=1)(ADDRESS_LIST=(LOAD_BALANCE=ON)(ADDRESS=(PROTOCOL=tcp)(HOST=nn.nn.255.13))(PORT=1526)))(CONNECT_DATA=(SERVICE_NAME=+ASM)))

2018-04-05 15:17:01.862*:kgfn.c@6685: kgfnConnect2Int: cstr=(DESCRIPTION=(TCP_USER_TIMEOUT=1)(TRANSPORT_CONNECT_TIMEOUT=60)(EXPIRE_TIME=1)(ADDRESS_LIST=(LOAD_BALANCE=ON)(ADDRESS=(PROTOCOL=tcp)(HOST=nn.nn.255.13)(PORT=1526)))(CONNECT_DATA=(SERVICE_NAME=+ASM)))
2018-04-05 15:17:01.862*:kgfn.c@6853: kgfnConnect2Int: OCISessionBegin failed
2018-04-05 15:17:03.139 : OCRRAW:2919112768: kgfnRecordErr 1017 OCI error:
ORA-01017: invalid username/password; logon denied

2018-04-05 15:17:03.139*:kgfn.c@1707: kgfnRecordErrPriv: 1017 error=ORA-01017: invalid username/password; logon denied

2018-04-05 15:17:03.140 : default:2919112768: clsCredDomClose: Credctx deleted 0x4d45890
2018-04-05 15:17:03.140 : OCRRAW:2919112768: kgfnConnect2: failed to connect

2018-04-05 15:17:03.140*:kgfn.c@5253: kgfnConnect2: failed to connect
2018-04-05 15:17:03.140 : OCRRAW:2919112768: kgfnConnect2Retry: failed to connect connect after 1 attempts, 143s elapsed

2018-04-05 15:17:03.140 : OCRRAW:2919112768: kgfo_kge2slos error stack at kgfoAl06: ORA-01017: invalid username/password; logon denied
ORA-27300: OS system dependent operation:sslssunreghdlr failed with status: 0
ORA-27301: OS failure message: Error 0
ORA-27302: failure occurred at: sskgpreset1
ORA-15077: could not locate ASM instance serving a required diskgroup

原因

通常有如下原因:

1) sqlnet.ora 里有
SQLNET.AUTHENTICATION_SERVICES=none

这项设置使得crsd连接到其它节点上的远程ASM实例所需要的任何OS认证,都变得失效。

2) ASM 密码不对

3) ASMlistener 子网与为私有interconnect配置不匹配。
执行 "oifcfg getif" 能看到 private interconnect (cluster interconnect) 所在的子网。

 这个问题的报错在SQLNET.AUTHENTICATION_SERVICES=all时也会出现。

解决方案

1) 如果是sqlnet.ora 里有 SQLNET.AUTHENTICATION_SERVICES=none 或 SQLNET.AUTHENTICATION_SERVICES=all 的情况

1) 从 Grid Home SQLNET.ORA 文件 (位于 $ORACLE_HOME/network/admin) 里清除 "SQLNET.AUTHENTICATION_SERVICES=none" 或 "SQLNET.AUTHENTICATION_SERVICES=all"

2) 以强制方式重启 CRS

crsctl stop crs -f
crsctl start crs

参考 "Unable to startup CRS as ASM failed to startup with "ORA-01017: invalid username/password; logon denied Document 1681849.1"

 2) ASM 密码不对的情况 (这是在 sqlnet.ora 文件没有问题的情况下的可能的故障原因)

1)  按 MOS 文章 " How to recreate shared ASM password file in 12c GI cluster Document 1929673.1" 所指示的重建ASM 密码

2) 以强制方式重启 CRS

crsctl stop crs -f
crsctl start crs

 3) ASMlistener 子网(subnet)与所配置的 interconnect 不匹配

按文章 Document 283684.1 里段落 "C. For 12c and 18c Oracle Clusterware with Flex ASM" 的步骤 3,重建ASMlistener。

一个快速的规避方法是在本地节点上使用sqlplus手动启动。
如果手动启动asm几分钟后ora.crsd还是没有online, 则以root身份执行"crsctl start res ora.crsd -init" 。

 

ODA: CRS Could Not Start on Node Due to Invalid ASM Credentials for The "crsuser__asm_001" Clusterware User (Doc ID 2139591.1)

 

APPLIES TO:

Oracle Database Appliance Software - Version 2.1.0.1 to 12.1.2.6 [Release 2.1 to 12.1]
Oracle Cloud Infrastructure - Database Service - Version N/A and later
Oracle Database Cloud Exadata Service - Version N/A and later
Oracle Database Backup Service - Version N/A and later
Oracle Database Cloud Service - Version N/A and later
Information in this document applies to any platform.

SYMPTOMS

While this note was originally created for the Oracle Database Appliance (ODA), the same symptoms and resolution can apply to Exadata, SuperCluster, RAC or other configurations.
Treat the ODA references as and example only.


1) CRS (clusterware) could not start on the  node due to the next errors (as reported in the clusterware alert.log):

.
.
.
2016-05-17 16:25:28.420 [OCTSSD(15491)]CRS-2401: The Cluster Time Synchronization Service started on host 2.
2016-05-17 16:25:28.454 [OCTSSD(15491)]CRS-2409: The clock on host 2 is not synchronous with the mean cluster time. No action has been taken as the Cluster Time Synchronization Service is running in observer mode.
2016-05-17 16:25:42.360 [ORAROOTAGENT(14660)]CRS-5019: All OCR locations are on ASM disk groups [RECO], and none of these disk groups are mounted. Details are at "(:CLSN00140:)" in "/diag/crs/2/crs/trace/ohasd_orarootagent_root.trc".
.
.
.

2) "ohasd_orarootagent_root.trc" reports that the ASM credentials are not present:

.
.
.
2016-05-17 16:34:05.131647*:kgfn.c@5281: kgfnGetBeqData: kgfnTgtInit failed, inst=NULL flags=0x6000
2016-05-17 16:34:05.147179 : CLSNS:368556352: clsns_SetTraceLevel:trace level set to 1.
2016-05-17 16:34:05.167937 : GPNP:368556352: clsgpnp_dbmsGetItem_profile: [at clsgpnp_dbms.c:345] Result: (0) CLSGPNP_OK. (:GPNP00401:)got ASM-Profile.Mode='remote'
2016-05-17 16:34:05.169362 : default:368556352: Inited LSF context: 0x7fb5xxxx23c0
2016-05-17 16:34:05.170801 : CLSCRED:368556352: clsCredCommonInit: Inited singleton credctx.
2016-05-17 16:34:05.170808 : CLSCRED:368556352: (:CLSCRED0101:)clsCredDomInitRootDom: Using user given storage context for repository access.
2016-05-17 16:34:05.199781 : USRTHRD:368556352: {0:9:3} 6425 Error 4 querying length of attr ASM_DISCOVERY_ADDRESS

2016-05-17 16:34:05.205101 : USRTHRD:368556352: {0:9:3} 6425 Error 4 querying length of attr ASM_STATIC_DISCOVERY_ADDRESS

2016-05-17 16:34:05.251694 : CLSCRED:368556352: (:CLSCRED1079:)clsCredOcrKeyExists: Obj dom : SYSTEM.credentials.domains.root.ASM.Self.af16666dbxxxxxxxbfda990c1a2fee1d.root not found
2016-05-17 16:34:05.251777 : USRTHRD:368556352: {0:9:3} 6210 Error 4 opening dom root in 0x7fb51026f530

2016-05-17 16:34:05.251777*:kgfn.c@6356: kgfnGetNodeType: flags=0x10
2016-05-17 16:34:05.251777*:kgfn.c@6369: kgfnGetNodeType: ntyp=1
2016-05-17 16:34:05.251777*:kgfn.c@4644: kgfnConnect2: kgfnGetBeqData failed
2016-05-17 16:34:05.251777*:kgfn.c@4680: kgfnConnect: srvr valid
2016-05-17 16:34:05.251777*:kgfn.c@5972: kgfnConnect2Int: sysasm=0 envflags=0x10 srvrflags=0x1 unam=crsuser__asm_001 password is NOT NULL pstr=_ocr
2016-05-17 16:34:05.251777*:kgfn.c@6121: kgfnConnect2Int: hosts=1
2016-05-17 16:34:05.251777*:kgfn.c@6134: kgfnConnect2Int: cstr=(DESCRIPTION=(TRANSPORT_CONNECT_TIMEOUT=60)(EXPIRE_TIME=1)(LOAD_BALANCE=ON)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=192.xxx.16.24)(PORT=1522)))(CONNECT_DATA=(SERVICE_NAME=+ASM)))
2016-05-17 16:34:05.251777*:kgfn.c@6200: kgfnConnect2Int: OCISessionBegin failed
2016-05-17 16:34:05.251777*:kgfn.c@1602: kgfnRecordErrPriv: status=-1 at kgfn.c:6284
2016-05-17 16:34:05.251777*:kgfn.c@1648: kgfnRecordErrPriv: 1017 error=ORA-01017: invalid username/password; logon denied
.
.
.

CHANGES

CAUSE

 The "SYSTEM.credentials.domains.root.ASM.Self.af16666dbxxxxxxxbfda990c1a2fee1d.root not found" indicates that the ASM credentials for the "crsuser__asm_001" clusterware user are corrupted or NULL.

SOLUTION

1) Therefore, ASM credentials for the "crsuser__asm_001" clusterware user need to be recreated as follows:

1.1) Obtain the credentials password for the "crsuser__asm_001" clusterware user:

[root@1 log]# . oraenv
ORACLE_SID = [root] ? +ASM1
The Oracle Base has been set to

[root@1 log]# crsctl query credmaint -path ASM/Self -credtype userpass
Path Credtype ID Attrs

/ASM/Self/af16666dbxxxxxxxbfda990c1a2fee1d userpass 0 create_time=2015
-11-12 18:42:57,
modify_time=2015
-11-12 18:42:57,
expiration_time=
NEVER,bootstrap=
FALSE

[root@1 log]# crsctl get credmaint -path /ASM/Self/af16666dbxxxxxxxbfda990c1a2fee1d -credtype userpass -id 0 -attr user -local
crsuser__asm_001

[root@1 log]# crsctl get credmaint -path /ASM/Self/af16666dbxxxxxxxbfda990c1a2fee1d -credtype userpass -id 0 -attr passwd -local

cvLIgJg09m1xxxxxxxxMOBSgnhO2q

1.2) Set the new password to the "crsuser__asm_001" clusterware user:

[root@1 log]# su - grid

[grid@1 ~]$ . oraenv
ORACLE_SID = [grid] ? +ASM1
The Oracle base has been set to /u01/app/grid

[grid@1 ~]$ asmcmd lspwusr
Username sysdba sysoper sysasm
SYS TRUE TRUE FALSE
CRSUSER__ASM_001 TRUE FALSE TRUE
ASMSNMP TRUE FALSE TRUE

[grid@1 ~]$ asmcmd orapwusr --modify CRSUSER__ASM_001
Enter password: *****************************

Note: Here you need to type the password (e.g. "cvLIgJg09m1xxxxxxxxMOBSgnhO2q") from the last step from point "1.1" above.

1.3) Then start the CRS (clusterware) on the affected ODA node (e.g. second node):

[root@1 log]# crsctl start crs

1.4) Verify that the CRS and all the services successfully started on the affected ODA node (e.g. second node):

[root@2 bin]# crsctl stat res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr
ONLINE ONLINE 1 STABLE
ONLINE ONLINE 2 STABLE
ora.DATA_01.dg
ONLINE ONLINE 1 STABLE
ONLINE ONLINE 2 STABLE
ora.LISTENER.lsnr
ONLINE ONLINE 1 STABLE
ONLINE ONLINE 2 STABLE
ora.RECO.ACFSVOL.advm
ONLINE ONLINE 1 Volume device /dev/asm/acfsvol-3xx is on
line,STABLE
ONLINE ONLINE 2 Volume device /dev/asm/acfsvol-3xx is on
line,STABLE
ora.RECO.DATAFSVOL.advm
ONLINE ONLINE 1 Volume device /dev/asm/datafsvol-3xx is
online,STABLE
ONLINE ONLINE 2 Volume device /dev/asm/datafsvol-3xx is
online,STABLE
ora.RECO.dg
ONLINE ONLINE 1 STABLE
ONLINE ONLINE 2 STABLE
ora.REDO.dg
ONLINE ONLINE 1 STABLE
ONLINE ONLINE 2 STABLE
ora.net1.network
ONLINE ONLINE 1 STABLE
ONLINE ONLINE 2 STABLE
ora.ons
ONLINE ONLINE 1 STABLE
ONLINE ONLINE 2 STABLE
ora.proxy_advm
ONLINE ONLINE 1 STABLE
ONLINE ONLINE 2 STABLE
ora.reco.acfsvol.acfs
ONLINE ONLINE 1 mounted on /cloudfs,STABLE
ONLINE ONLINE 2 mounted on /cloudfs,STABLE
ora.reco.datafsvol.acfs
ONLINE ONLINE 1 mounted on /odadatafs,STABLE
ONLINE ONLINE 2 mounted on /odadatafs,STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE 1 STABLE
ora.MGMTLSNR
1 ONLINE ONLINE 1 169.xxx.89.152 192.x
xx.16.24 192.xxx.17.24
24,STABLE
ora.asm
1 ONLINE ONLINE 1 Started,STABLE
2 ONLINE ONLINE 2 Started,STABLE
ora.cvu
1 ONLINE ONLINE 1 STABLE
ora.mgmtdb
1 ONLINE ONLINE 1 Open,STABLE
ora.nascxthzndev.db
1 ONLINE ONLINE 1 Open,STABLE
ora.1.vip
1 ONLINE ONLINE 1 STABLE
ora.2.vip
1 ONLINE ONLINE 2 STABLE
ora.oc4j
1 ONLINE ONLINE 1 STABLE
ora.scan1.vip
1 ONLINE ONLINE 1 STABLE
--------------------------------------------------------------------------------
[root@2 bin]#

2) Finally, you need to backup the ASM password file to another diskgroup as follows:

2.1) Obtain the ASM password current location:

[root@1 log]# su - grid

[grid@1 ~]$ . oraenv
ORACLE_SID = [grid] ? +ASM1
The Oracle base has been set to /u01/app/grid

[grid@1 grid]$ asmcmd pwget --asm
+DATA_01/orapwasm

2.2) List the diskgroup and select the target diskgroup (e.g. +RECO), which will be used to backup the ASM password file:

[grid@1 grid]$ asmcmd lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED HIGH N 512 4096 1048576 4669440 2594999 491520 701159 0 N DATA_01/
MOUNTED HIGH N 512 4096 1048576 6416800 2799145 641680 719155 0 Y RECO/
MOUNTED HIGH N 512 4096 4194304 280016 223868 140008 27953 0 N REDO/

2.3) Copy the ASM password file to the new diskgroup:

[grid@1 grid]$ asmcmd pwcopy +DATA_01/orapwasm +RECO/orapwasm_backup
copying +DATA_01/orapwasm -> +RECO/orapwasm_backup

2.4) Verify that the ASM password file was copied to the target diskgroup:

[grid@1 grid]$ asmcmd ls -l +RECO/orapwasm_backup
Type Redund Striped Time Sys Name
PASSWORD HIGH COARSE MAY 18 17:00:00 N orapwasm_backup => +RECO/ASM/PASSWORD/pwdasm.381.91xxx7251
[grid@1 grid]$

3) If the ASM password file is corrupted again, then you can restore it from backup as follows:

3.1) Restore the password file from backup to the original diskgroup:

[grid@1 grid]$ asmcmd pwcopy +RECO/orapwasm_backup +DATA_01/orapwasm_new
copying +RECO/orapwasm_backup -> +DATA_01/orapwasm_new

3.2) Set the new ASM password file:

[grid@1 grid]$ asmcmd pwset --asm +DATA_01/orapwasm_new

3.3) Verify the new ASM password file is set:

[grid@1 grid]$ asmcmd pwget --asm
+DATA_01/orapwasm_new

在12c GI中如何重建共享ASM密码文件 (Doc ID 2440135.1)

适用于:

Oracle Database Cloud Schema Service - 版本 N/A 和更高版本
Gen 1 Exadata Cloud at Customer (Oracle Exadata Database Cloud Machine) - 版本 N/A 和更高版本
Oracle Cloud Infrastructure - Database Service - 版本 N/A 和更高版本
Oracle Database Exadata Express Cloud Service - 版本 N/A 和更高版本
Oracle Database Cloud Exadata Service - 版本 N/A 和更高版本
本文档所含信息适用于所有平台

目标

本说明提供了为各种不同版本的集群件重新创建共享 ASM 密码文件的步骤。
请确保遵循您正在使用的版本的部分,因为命令和步骤可能不同。

解决方案

 注意:在随后的图像、示例和文档中,用户详细信息、集群名称、主机名、目录路径、文件名等代表虚构示例(仅用于提供说明性示例)。 与真实的人或实体有任何相似之处,纯属巧合,并非以任何方式有意。

最佳实践是备份ASM密码文件,如果存储密码文件的磁盘组出现故障,我们可以通过如下步骤轻松还原:

1. 备份密码文件

ASMCMD> pwcopy +DATA/orapwASM /tmp/asm.pwd
copying +DATA/orapwASM -> /tmp/asm.pwd

2. 如果密码文件出现问题,我们可以这样还原它

ASMCMD> pwcopy --asm /tmp/asm.pwd +DATA/orapwASM -f
copying /tmp/asm.pwd -> +DATA/orapwASM
ASMCMD> ls -l
Type Redund Striped Time Sys Name
N ASM/
N _mgmtdb/
Y cehaovm-cluster/
PASSWORD UNPROT COARSE SEP 19 09:00:00 N orapwasm => +DATA/ASM/PASSWORD/pwdasm.257.955101541

 

对19c以及之后的版本

1) 对于19.8 和之后的版本,引入了新的asmcmd命令“credverify” 和 “credfix”, 以检查和修正ASM的credential问题。

2) 对于19.7 和之前的版本,检查是否针对之前的RU创建了Bug 30887501 的补丁。

   您需要在19.7和之前的版本中安装补丁 30887501,这样才能使用新的asmcmd 命令“credverify” 和 “credfix”。

   请参考下面的文档:
   How to recreate shared ASM password file in 19c Grid Infrastructure (GI) Document 2717306.1

 对 12C R1

步骤1: 使用SYS和ASMSNMP用户创建密码文件

ASMCMD> pwcreate --asm <+OCR-DG>/orapwASM
ASMCMD> orapwusr --grant sysasm sys
ASMCMD> orapwusr --add asmsnmp
Enter password: ********
ASMCMD> orapwusr --grant sysdba asmsnmp

如果“pwcreate”报错ORA-15005,首先删除现存的密码文件:

ASMCMD> rm /orapwASM

步骤二: 找到CRSD连接用的用户名和密码

$ crsctl query credmaint -path ASM/Self -credtype userpass
Path Credtype ID Attrs

/ASM/Self/6d161f1b2156aa846819userpass 0 create_time=2014-09-16 00:05:52, modify_time=2014-09-16 00:05:52, expiration_time=NEVER,bootstrap=FALSE 

注意:输出的第一列”path”将会被接下来的两个命令使用

$ crsctl get credmaint -path /ASM/Self/6d161f1b2156aa846819 -credtype userpass -id 0 -attr user -local
crsuser__asm_001                     ====>> 这是用户名

$ crsctl get credmaint -path /ASM/Self/6d161f1b2156aa846819 -credtype userpass -id 0 -attr passwd -local
hKcb3Tx2Uifvx8LZ8PP              ====>> 这是密码


 步骤三 : 创建CRSD连接使用的用户

ASMCMD> orapwusr --add crsuser__asm_001
Enter password: *****************************
ASMCMD> orapwusr --grant sysdba crsuser__asm_001
ASMCMD> orapwusr --grant sysasm crsuser__asm_001

注意:打字输入步骤二获得的密码,使用复制粘贴可能导致CRS重启出现问题。


步骤四 :确认用户列表

ASMCMD> lspwusr
Username sysdba sysoper sysasm
SYS TRUE TRUE TRUE
CRSUSER__ASM_001 TRUE FALSE TRUE
ASMSNMP TRUE FALSE FALSE

如果没有遵循这个流程,在创建ASM密码文件之后,在非本地的节点,ora.crsd将会不能启动,因为ora.storage资源会报如下错误,并记录在/crs//crs/trace/ohasd_orarootagent_root.trc中
 

2014-09-09 00:04:34.060702*:kgfn.c@6286: kgfnConnect2Int: OCISessionBegin failed
2014-09-09 00:04:34.060702*:kgfn.c@1606: kgfnRecordErrPriv: status=-1 at kgfn.c:6370
2014-09-09 00:04:34.060702*:kgfn.c@1652: kgfnRecordErrPriv: 1017 error=ORA-01017: invalid username/password; logon denied

或者

2014-09-24 22:11:41.799924*:kgfn.c@6200: kgfnConnect2Int: OCISessionBegin failed
2014-09-24 22:11:41.799924*:kgfn.c@1602: kgfnRecordErrPriv: status=-1 at kgfn.c:6284
2014-09-24 22:11:41.799924*:kgfn.c@1648: kgfnRecordErrPriv: 1031 error=ORA-01031: insufficient privileges

注意:根据Bug 25847218,上述流程仅仅适用于Flex-ASM配置。

对 12c R2和18c

步骤一:使用sys和asmsnmp用户创建ASM密码文件

$ asmcmd lspwusr
Username sysdba sysoper sysasm
SYS TRUE TRUE TRUE
CRSUSER__ASM_001 TRUE FALSE TRUE
ASMSNMP TRUE FALSE FALSE

$ asmcmd pwget --asm
+DATA/orapwASM

ASMCMD> pwcopy +DATA/orapwASM /tmp/asm.pwd
copying +DATA/orapwASM -> /tmp/asm.pwd

ASMCMD> pwcreate --asm +DATA/orapwASMnew '' -f
ASMCMD> pwget --asm
+DATA/orapwasmnew
ASMCMD> lspwusr
Username sysdba sysoper sysasm
SYS TRUE TRUE FALSE
ASMCMD> orapwusr --grant sysasm SYS
ASMCMD> orapwusr --add ASMSNMP
Enter password: *********<<<<<<<<<<<<<<<<<<<<<
ASMCMD> orapwusr --grant sysdba ASMSNMP
ASMCMD> lspwusr
Username sysdba sysoper sysasm
SYS TRUE TRUE TRUE
ASMSNMP TRUE FALSE FALSE

步骤二:找到CRSD连接用的用户名和密码,从12.2开始,根据设计,"QUERY CREDMAINT"不可用了

$ crsctl query credmaint -path ASM/Self
Path Credtype ID Attrs

Credmaint 是一个内部选项,因此没有文档记录。它在一些内部脚本中被用来配置不同的服务。

打印出OCR的内容如下

$ $GRID_HOME/bin/ocrdump /tmp/ocr.dmp
PROT-310: Not all keys were dumped due to permissions.
$ vi /tmp/ocr.dmp

--搜索如下内容
SYSTEM.ASM.CREDENTIALS.USERS.CRSUSER__ASM_001]
ORATEXT : 3889bffae7aa8eaa6001d:oracle<<<<<<<<<<<<<<<<<<<<<<这是我们获取密码的凭证
SECURITY : {USER_PERMISSION : PROCR_ALL_ACCESS, GROUP_PERMISSION : PROCR_READ, OTHER_PERMISSION : PROCR_NONE, USER_NAME : oracle, GROUP_NAME : oinstall}

$ crsctl get credmaint -path /ASM/Self/3889bffae7aa8eaa6001d -credtype userpass -id 0 -attr user -local
CRSUSER__ASM_001

注意: 在18c中忽略上面执行的命令

$ crsctl get credmaint -path /ASM/Self/3889bffae7aa8eaa6001d -credtype userpass -id 0 -attr passwd -local
VWadfKGuVslNz4XANSl<<<<<<<<<这是密码
 

步骤三:创建CRSD连接用的用户

ASMCMD> orapwusr --add CRSUSER__ASM_001
Enter password: *****************************<<<<<<<<从步骤二中获取的密码
ASMCMD> lspwusr
Username sysdba sysoper sysasm
SYS TRUE TRUE TRUE
ASMSNMP TRUE FALSE FALSE
CRSUSER__ASM_001 FALSE FALSE FALSE
ASMCMD> orapwusr --grant sysdba CRSUSER__ASM_001
ASMCMD> orapwusr --grant sysasm CRSUSER__ASM_001
ASMCMD> lspwusr
Username sysdba sysoper sysasm
SYS TRUE TRUE TRUE
ASMSNMP TRUE FALSE FALSE
CRSUSER__ASM_001 TRUE FALSE TRUE

[oracle@~]$ srvctl config asm
ASM home:
Password file: +DATA/orapwasmnew
Backup of Password file:
ASM listener: LISTENER
ASM instance count: 3
Cluster ASM listener: ASMNET1LSNR_ASM

注意:打字输入步骤二获得的密码,使用复制粘贴可能导致CRS重启出现问题。

在flex ASM环境,我们应该在重建密码文件之后增加ORACLE_001用户(从ocrdump中获得SYSTEM.ASM.CREDENTIALS.USERS.oracle_001的ORATEXT)

# crsctl get credmaint -path
/ASM/Self/aa2cabbfaa8db7080b462d/oracle -credtype userpass -id 0
-attr user

oracle_001

# crsctl get credmaint -path
/ASM/Self/aa2cabbfaa8db7080b462d/oracle -credtype userpass -id 0
-attr passwd

sx29ipxal1znxE94VtD

$ asmcmd lspwusr

Username sysdba sysoper sysasm

 ASMSNMP TRUE FALSE  SYS TRUE TRUE TRUE

ASMSNMP TRUE FALSE FALSE   

 CRSUSER__ASM_001 TRUE FALSE TRUE

asmcmd orapwusr --add oracle_001

Enter password: *****************************

注意:在这个例子中密码是sx29ipxal1znxE94VtD,因此需要通过上面的‘Enter password:’提示来提供它

$ asmcmd orapwusr --grant sysdba oracle_001

$ asmcmd lspwusr

Username sysdba sysoper sysasm

SYS TRUE TRUE TRUE

ASMSNMP TRUE FALSE FALSE

CRSUSER__ASM_001 TRUE FALSE TRUE

ORACLE_001 TRUE FALSE FALSE

 

ORACLE_001用户提供了在Flex ASM配置中对DB实例的认证。
没有ORACLE_001用户,数据库实例无法访问远程ASM Flex实例,会有如下错误报出:

$ srvctl start database -d

PRCR-1079 : Failed to start resource ora..db
CRS-5017: The resource action "ora..db start" encountered the following error:
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '+RECO//spfile.ora'
ORA-17503: ksfdopn:2 Failed to open file +RECO//spfile.ora
ORA-01017: invalid username/password; logon denied
ORA-01017: invalid username/password; logon denied
ORA-01017: invalid username/password; logon denied
ORA-15077: could not locate ASM instance serving a required diskgroup
For details refer to "(:CLSN00107:)" in"/u01/app/grid/diag/crs//crs/trace/crsd_oraagent_oracle.trc".
CRS-2674: Start of 'ora..db' on '' failed
CRS-2632: There are no more servers to try to place resource 'ora..db' on that would satisfy its placement policy

你可能感兴趣的:(oracle,数据库)