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进程将在启动重新平衡操作时启动。