1.1.5 ASM体系结构

ASM将数据文件和其他数据库结构分成区间,将区间分配到磁盘组中的所有磁盘上来提高性能和可靠性。并非是镜像整个磁盘卷,ASM会镜像数据库对象以提供根据类型镜像和条带化数据库对象的灵活性。如果底层磁盘硬件已经启用了RAID,或是存储区域网络(storage area network, SAN)的一部分,或是网络附加存储(network-attached storage, NAS)设备的一部分,就会根据情况完全不条带化对象。

ASM的另一项重要功能是自动重新平衡。如果需要增加磁盘空间,可以将其他磁盘设备添加到磁盘组中,ASM 会将相称的文件数量从一个或多个现有磁盘移到新磁盘上,来维护整个I/O在所有磁盘上的平衡。这一切操作在后台进行,而磁盘文件中包含的数据库对象依然联机,可供用户使用。如果重新平衡操作期间对I/O子系统影响颇大,可以使用初始化参数来降低重新平衡的速度。

ASM要求使用特殊类型的Oracle实例来提供传统Oracle实例和文件系统之间的接口;ASM软件组件随Oracle数据库软件提供,在选择整个数据库的存储类型和创建数据库时,始终可以选择该组件。

使用ASM时,也可以将ASM磁盘组与手动Oracle数据文件管理技术结合使用。例如,ASM存储中可能有所有的表空间,但有在一个服务器的文件系统上创建的表空间,以便能更方便地将其传输到另一个数据库中。无论如何,ASM的易用性和性能为最终使用ASM磁盘组来满足所有存储需求提供了强有力的依据。

Oracle Database 10g中引入的两个Oracle后台进程支持ASM实例:重新平衡程序(rebalancer, RBAL)和ARBn。RBAL协调磁盘组的磁盘活动,在添加或卸下磁盘时执行重新平衡操作。ARBn中的n可以是数字0到9,该进程在磁盘组中的磁盘之间执行实际区间移动。

从Oracle Database 10g开始,对于使用ASM磁盘的RDBMS实例,有两个新的后台进程:ASMB和RBAL。ASMB执行数据库和ASM实例间的通信,而RBAL代表数据库打开和关闭磁盘组中的磁盘。这是与ASM实例中的RBAL相同的进程,它们执行相关(但不同)的功能。换言之,进程行为因实例类型而异。

练习1-1

查找ASM和RDBMS实例中与ASM相关的新进程

在本练习中,你将在Linux服务器上确定RDBMS实例和ASM实例的新后台进程。在Linux上,每个Oracle进程都有自己的线程。可以联合Oracle动态性能视图V$BGPROCESS和V$SESSION,也可以使用Linux ps -ef命令,并搜索包含ASM或RDBMS实例名的命令名。

(1)查询/etc/oratab来了解ASM和RDBMS实例的名称:

        [oracle@oel63 ~]$ tail /etc/oratab
        #
        # Multiple entries with the same $ORACLE_SID are not allowed.
        #
        #
        +ASM:/u01/app/product/12.1.0/grid:N:         # line added by Agent
        complref:/u01/app/oracle/product/12.1.0/dbhome_1:N:     # line added by Agent
        cdb01:/u01/app/oracle/product/12.1.0/dbhome_1:N:   # line added by Agent

        [oracle@oel63 ~]$

(2)为RDBMS实例设置ORACLE_SID环境变量,在本例中是complref:

        [oracle@dw ~]$ export ORACLE_SID=complref

(3)连接到RDBMS实例,并查询V$SESSION和V$BGPROCESS以获得一系列正在运行的进程:

        [oracle@dw ~]$ sqlplus / as sysdba

        SQL*Plus: Release 12.1.0.1.0 Production on Sun Feb 2 22:40:52 2014
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.

    Connected to:
    Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
    With the Partitioning, Automatic Storage Management, OLAP, Advanced
    Analytics and Real Application Testing options

    SQL> select sid, serial#, process, name, description
      2>   from v$session join v$bgprocess using(paddr);
          SID    SERIAL#  PROCESS   NAME   DESCRIPTION
    ---------- ---------- --------------- -----------------------------------
          237          1  2886      PMON   process cleanup
          1            1  2893      VKTM   Virtual Keeper of TiMe process
          119          1  2897      GEN0   generic0
    . . .
          238          1  2899      MMAN   Memory Manager
          358          1  2912      DBW0   db writer process 0
          127          3  3005      TMON   Transport Monitor
          3            1  2914      LGWR   Redo etc.
          121          1  2916      CKPT   checkpoint
          6            7  3011      FBDA   Flashback Data Archiver Process
          4            1  2922      SMON   System Monitor Process
          362          1  3009      SMCO   Space Manager Process
    . . .
          360          1  2928      RBAL   ASM Rebalance master
          5            1  2930      ASMB   ASM Background
          124          1  2942      MARK   mark AU for resync coordinator
          123          1  2932      MMON   Manageability Monitor Process
          242          1  2934      MMNL   Manageability Monitor Process 2

    24 rows selected.
    SQL>

注意列表底部的RBAL和ASMB进程。

(4)可以使用PID列来确定Linux进程号,并直接查询此Linux进程:

    SQL> ! ps -f -p 2928
    UID       PID  PPID  C STIME TTY         TIME CMD
    oracle   2928    1  0 21:31 ?       00:00:00 ora_rbal_complref
    SQL>

(5)接下来,通过为ASM实例(+ASM)设置ORACLE_SID环境变量来检查ASM后台进程:

    [oracle@oel63 ~]$ . oraenv
    ORACLE_SID = [+ASM] ? +ASM

(6)连接到ASM实例,查询V$SESSION和V$BGPROCESS来获得一系列正在运行的进程:

    [oracle@dw ~]$ sqlplus / as sysasm
    . . .
    SQL> select sid, serial#, process, name, description
      2>  from v$session join v$bgprocess using(paddr);
              SID  SERIAL# PROCESS  NAME  DESCRIPTION
        ---------- ------- -------- ----- ------------------------------
              283        1 2810     PMON  process cleanup
              1          1 2814     VKTM  Virtual Keeper of TiMe process
              3          1 2832     CKPT  checkpoint
              4          1 2840     GMON  diskgroup monitor
              142        1 2818     GEN0  generic0
              425        1 2812     PSP0  process spawner 0
              145        1 2842     MMON  Manageability Monitor Process
              427        1 2830     LGWR  Redo etc.
              284        1 2820     MMAN  Memory Manager
              285        1 2828     DBW0  db writer process 0
              428        1 2838     RBAL  ASM Rebalance master
              287        1 2844     MMNL  Manageability Monitor Process 2
              144        1 2834     SMON  System Monitor Process
              143        1 2826     DIA0  diagnosibility process 0
              2          1 2824     DIAG  diagnosibility process
              286        1 2836     LREG  Listener Registration
              147        1 2868     ASMB  ASM Background
        17 rows selected.
        SQL>

注意列表中的新进程RBAL和ASMB。ARBn进程将在启动重新平衡操作时启动。