ASM介绍及管理

2023年 11月 24日 90.3k 0

• 简介ASM及描述使用ASM 的好处

• 管理ASM 实例(SQL*plus、asmcmd和Oracle Enterprise Manager )

• 指定ASM 兼容性属性

• 创建和删除ASM 磁盘组

• 扩展ASM 磁盘组

• 通过使用各种实用程序检索ASM 元数据

Automatic Storage Management

Automatic Storage Management (ASM) 将文件系统与卷管理器纵向集成在一起,这是一项专门为Oracle DB 文件建立的技术。使用ASM 可管理单个对称多处理(SMP) 计算机,或通过管理集群的多个节点来支持Oracle Real Application Clusters (RAC)。

ASM 在所有可用的资源中分布输入/输出(I/O) 负载,以在免除手动I/O 优化的同时优化性能。ASM 帮助DBA 管理动态数据库环境,让DBA 在不关闭数据库的情况下,通过增加数据库的大小来调整存储分配。

ASM 通过提供数据的冗余副本来提供容错能力,ASM 也可以建立在供应商提供的存储机制上。数据管理是通过为数据类选择所需的可靠性和性能特性(而不是逐个文件地进行人为交互)来实现的。

通过自动处理手动存储,ASM 功能节省了DBA 的时间,从而提高了管理员管理更多和更大数据库的能力,而且效率也会更高。

 

ASM:主要功能和优点

• 对文件而不是逻辑卷进行条带化

• 提供联机磁盘重新配置和动态重新平衡功能

• 允许调整重新平衡速度

• 以每个文件为基础提供冗余

• 只支持Oracle DB 文件

• 可识别集群

• 可自动安装

ASM 将文件划分为区(不同于前面讨论的数据文件区),而且将每个文件的区均匀分布在所有磁盘上。ASM 使用索引技术跟踪每个区的位置。存储容量发生变化时,ASM 不会重新对所有数据进行条带化,而是根据添加或删除的存储量,按比例移动一定数量的数据,以重新平均分配文件,并在磁盘间保持负载平衡。此操作可在数据库处于活动状态时执行。可以提高重新平衡操作的速度,以便更快地完成操作;也可以降低速度,以减少对I/O 子系统的影响。ASM 还提供了镜像保护,因此不必再购买第三方的逻辑卷管理器。

ASM 的一个特有优势是可基于文件而不是卷进行镜像。因此,同一磁盘组可以包含镜像文件或非镜像文件的组合。

ASM 支持数据文件、日志文件、控制文件、归档日志、Recovery Manager (RMAN) 备份集及其它Oracle DB 文件类型。ASM 还支持RAC,这样就不再需要集群逻辑卷管理器或集群文件系统。

ASM:概念

ASM 不会妨碍先前存在的数据库功能。现有数据库能够像平常一样工作。可以将新文件创建为ASM 文件,继续按原有的方式管理现有文件,也可以最终将这些文件移植到ASM。

 图表描述了使用ASM 的Oracle DB 中的各种存储组件之间存在的关系。图表的左侧部分和中间部分显示了在以前版本中存在的关系。

右侧部分是ASM 引入的新概念。

数据库文件可以存储为ASM 文件。新层次的顶部是ASM 磁盘组。任何单个ASM 文件只能包含在一个磁盘组中。

不过,一个磁盘组中可以包含属于多个数据库的多个文件,并且单个数据库可以使用来自多个磁盘组的存储空间。

一个磁盘组由多个ASM 磁盘组成,但每个ASM 磁盘只能属于一个磁盘组。

ASM 文件总是分布在该磁盘组中的所有ASM 磁盘上。

ASM 磁盘按分配单元进行分区。分配单元(AU) 是ASM 分配的最小连续磁盘空间。

创建磁盘组时,可以将ASM AU 大小设置为2 的幂(1、2、4、8、16、32 或64),范围在1 MB 到64 MB 之间。

对于使用大量顺序读取操作的数据仓库应用程序,较大的AU 大小通常会更有优势。

注:图中的图形只显示了一种ASM 文件:数据文件。不过,ASM 也可用于存储其它类型的数据库文件。

 

ASM 对于管理员的好处

使用ASM 可以免除:

• I/O 性能优化

• 数据文件移动和重新组织

• 文件名管理

• 逻辑卷管理

• 文件系统管理

• 集群文件系统管理

• 裸设备管理

 

1、使用ASM 可以显著减少:

• 逻辑单元号(LUN) 管理

– 逻辑单元数量较少,大小较大

• 数据库管理员对系统管理员的依赖性

• 手动执行维护任务时可能发生的错误

2、使用ASM 可以免除非ASM 存储环境中许多必不可少的任务。其中包括:

• I/O 性能优化:ASM 采用条带化和镜像所有内容的策略,且执行自动重新平衡操作,这意味着不再需要旨在平衡磁盘使用以及消除磁盘热点的I/O 性能优化。

• 数据文件移动和重新组织:不再需要更改数据文件的位置来满足性能要求和空间约束条件。

• 文件名管理:不再需要定义和强制执行文件命名策略。

• 逻辑卷、文件系统、集群文件系统和裸设备管理:不再需要这些存储元素。

3、使用ASM 可以减少下列重要方面的工作,从而提供更多好处:

• 逻辑单元号(LUN) 管理工作减少,因为ASM 通常需要的逻辑单元较少且大小较大。

• 数据库管理员与系统管理员之间通常存在的依赖性将大大减少。例如,添加新数据文件或将磁盘资源从一个磁盘组移至另一磁盘组时不再需要系统管理员干预。

• 手动执行维护任务时可能发生的错误将大大减少。例如,使用常规文件系统时,新建数据文件时可能不慎违反了文件命名惯例,导致数据库的其余部分不支持该文件。

 

ASM 实例

ASM 实例是ASM 的进程和内存组件的组合。

每次启动ASM 或数据库时,都会分配名为系统全局区(SGA) 的共享内存区域并启动Oracle ASM 或数据库后台进程。

后台进程和SGA 的组合称为Oracle ASM 实例或Oracle DB 实例。

ASM 实例中的SGA 与数据库实例中的SGA 在内存分配和使用方面是不同的。

 

ASM 实例中的SGA 分为四个主要区域,如下所示:

• 共享池:用于元数据信息

• 大型池:用于并行操作

• ASM 高速缓存:用于在重新平衡操作期间读取和写入块

• 空闲内存:可用的未分配内存

 

ASM 的建议最低内存量为256 MB。ASM 实例默认启用自动内存管理,该功能将动态优化各个SGA 内存组件的大小。

ASM 实例所需的内存量将取决于ASM 管理的磁盘空间量。

ASM 实例的第二部分是后台进程。ASM 实例可以具有许多后台进程;并不是所有进程始终都会出现。

 

ASM 功能的后台进程分为必需和可选两种。其中一些进程如下所示:

• ARCn:归档进程

• CKPT:检查点进程

• DBWn:数据库写进程

• DIAG:诊断进程

• Jnnn:作业队列进程

• LGWR:日志写进程

• PMON:进程监视器进程

• PSP0:进程衍生进程

• QMNn:队列监视器进程

• RECO:恢复器进程

• SMON:系统监视器进程

• VKTM:虚拟计时器进程

• MMAN:内存管理器进程

以上进程列表不是完整列表。对于ASM 实例,这些进程并不总是执行它们在数据库实例中执行的任务。

例如,数据库实例中的LGWR进程负责将更改向量从SGA 的日志缓冲区部分复制到磁盘上的联机重做日志。

ASM 实例的SGA 中不包含日志缓冲区,该实例也不使用联机重做日志。

ASM 实例中的LGWR进程将事件记录信息复制到ASM 磁盘组。

如果ASM 是以集群方式建立的,则将在ASM 实例中运行与集群管理相关的附加进程。

其中一些进程如下所示:

• LMON:全局入队服务监视器进程

• LMDn:全局入队服务守护程序

• LMSn:全局高速缓存服务进程

• LCKn:锁定进程

 

ASM 组件:ASM 实例 - 主要进程

ASM 实例的主要进程负责与ASM 相关的活动。

 

ASM 实例使用专用的后台进程完成其大部分功能。

RBAL进程在自动存储管理实例中协调磁盘组的重新平衡活动。它负责对自动存储管理磁盘执行全局打开操作。

ARBn进程在自动存储管理实例中执行实际的重新平衡数据区移动。可能同时存在多个这样的进程,这些进程名为ARB0、ARB1等等。

GMON进程维护ASM 磁盘组中的磁盘成员资格。在向脱机磁盘写入失败后,MARK进程将ASM 分配单元标记为过时。

Onnn进程表示客户机/服务器连接的服务器端。启动实例时将出现这些进程,之后它们将消失。

它们形成与ASM 实例的一组连接,用于交换消息,仅在需要时才出现。

PZ9n进程表示一个或多个并行从属进程,当ASM 同时在多台计算机上以集群配置运行时,可以使用该进程提取数据。

 

ASM 实例初始化参数

 

INSTANCE_TYPE = ASM

ASM_POWER_LIMIT = 1

ASM_DISKSTRING = '/dev/sda1','/dev/sdb*'

ASM_DISKGROUPS = DATA2, FRA

ASM_PREFERRED_READ_FAILURE_GROUPS = DATA.FailGroup2

DIAGNOSTIC_DEST = /u01/app/oracle

LARGE_POOL_SIZE = 12M

REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE

 

ASM 实例由参数文件控制,其方式与常规数据库实例相同。通常设置的参数包括:

• INSTANCE_TYPE应该设置且必须为ASM,表示ASM 实例,标识要启动的实例是ASM,而不是数据库实例。这是唯一一个必须定义的参数。对于数据库实例,该参数值设置为RDBMS。

• ASM_POWER_LIMIT:控制重新平衡操作的速度即指定磁盘rebalance的程度。值的范围从1 到11,11 表示最快。如果省略,该值默认为1。指定的级别越高,则rebalance的操作就会越快被完成,当然这也意味着这个时间段内将占用更多的资源,指定级别较低的话,随人rebalance操作会耗时更久,但对当前系统的IO及负载影响会更少,这需要根据实际情况衡量。另外,这个参数指定的只是一个默认值,在操作过程中,即可以随时动态更改,也可以在语句级命令行时指定power,覆盖该默认值。

修改ASM实例初始化参数文件的命令规则与数据库初始化参数完全相同,比如说:

SQL> alter system set asm_power_limit=5;

System altered.

• ASM_DISKSTRING是一个与操作系统相关的值,ASM 使用它来限制搜索时考虑的磁盘集即是设置ASM启动时检查的磁盘,该选项可以同时指定多个值,并且支持通配符。比如只检查/DEV/SD*。默认值为空字符串,为空的话,表示ASM将查找系统中所有ASM拥有读写权限的设备。这在大多数情况下就足够了。如上所示的约束性更强的值可以减少ASM 执行搜索所需的时间,从而提高磁盘组装载次数。

• ASM_DISKGROUPS:是ASM 实例启动时或使用ALTER DISKGROUP ALL MOUNT命令时,ASM 实例要装载的磁盘组的名称列表。如果为空的话,那么实际就仅仅启动到nomount状态。如果使用SPFILE的话,该参数一般不需要手动修改,ASM能够自动更新该初始化参数中的值。

Oracle Restart 会装载列为相关磁盘组的磁盘组,即使这些磁盘组未与ASM_DISKGROUPS参数列在一起也是如此。该参数没有默认值。

• ASM_PREFERRED_READ_FAILURE_GROUPS指定包含首选读取磁盘的故障组。对于包含数据的镜像副本且有一个副本非常接近于服务器的扩展或延伸集群数据库,该参数非常有用。

• DIAGNOSTIC_DEST指定自动诊断资料档案库(ADR) 主目录的位置。此目录下有跟踪文件、预警日志、核心文件和意外事件文件。此参数的默认值由ORACLE_BASE的值派生。

• LARGE_POOL_SIZE指定大型池分配堆的大小(以字节表示)。大型池分配堆用于共享服务器系统中的会话内存,供消息缓冲区的并行执行和磁盘I/O 缓冲区的备份进程使用。ASM 实例使用自动内存管理,所以此参数用作大型池不能低于的最小大小。

• REMOTE_LOGIN_PASSWORDFILE指定Oracle 软件是否检查口令文件。默认值为EXCLUSIVE。

上面列出的八个参数是需要为ASM 实例创建的唯一几个非默认参数。ASM 实例与数据库实例不同,因为并不是所有的数据库参数都对ASM 实例有效。在全部344 个数据库实例参数中,大约有74 个参数可以用于ASM 实例。对于上面未列出的其它参数,虽然其默认值对于大多数安装来说应该已经足够了,但也可以根据需要进行设置。

注:ASM 实例默认启用自动内存管理,即使未明确设置MEMORY_TARGET参数也是如此。

该参数是全面ASM 内存管理唯一需要设置的参数。Oracle Corporation 强烈建议对ASM 实例使用自动内存管理。

 

数据库实例与ASM 之间的交互

文件创建过程可以很好地说明数据库实例与ASM 之间发生的交互。文件创建过程如下所示:

1. 数据库请求创建文件。

2. ASM 前台进程创建一个持续操作目录(COD) 条目并在磁盘组中为新的文件分配空间。

3. ASMB 数据库进程接收新文件的区映射。

4. 现在文件处于打开状态,数据库进程直接初始化该文件。

5. 初始化后,数据库进程请求提交文件创建。这会导致ASM 前台进程清除COD 条目并将文件标记为已创建。

6. 文件提交确认会隐式关闭该文件。将来发生I/O 时,数据库实例需要重新打开该文件。

 

此示例强调了关于ASM 体系结构的重要两点:

• 数据库实例和ASM 实例协同工作。数据库实例必须与ASM 交互,以便将数据库文件映射到ASM 区。

数据库实例还接收与ASM 操作(例如磁盘组重新平衡)相关的持续消息流,这类操作可能锁定或移动ASM 区。

• 数据库I/O 不通过ASM 实例来传输。实际上,数据库直接根据ASM 文件执行I/O 操作,如步骤4 所示。

 

ASM 实例:动态性能视图

对于任何实例而言,其主要功能之一就是存储基于内存的元数据表。这些表以前缀X$开头并且通常不进行记录。

以前缀V$开头的一系列动态性能视图用于以定制形式显示X$内存表中包含的数据。这类信息以只读方式提供,仅具有权限的管理员可以访问。

使用SQL 语言从ASM 检索这类信息。

ASM 实例托管基于内存的元数据表,这些表通过动态性能视图呈现。

• ASM 实用程序使用SQL 语言访问这些表来检索仅含元数据的信息

• 包含许多专用的ASM 相关视图,例如:

 

sys@mesdbbackup> select * from dict where table_name like 'V$ASM_%';

TABLE_NAME                     COMMENTS

------------------------------ --------------------------------------------------

V$ASM_ACFSSNAPSHOTS            Synonym for V_$ASM_ACFSSNAPSHOTS

V$ASM_ACFSVOLUMES              Synonym for V_$ASM_ACFSVOLUMES

V$ASM_ACFS_ENCRYPTION_INFO     Synonym for V_$ASM_ACFS_ENCRYPTION_INFO

V$ASM_ACFS_SECURITY_INFO       Synonym for V_$ASM_ACFS_SECURITY_INFO

V$ASM_ALIAS                    Synonym for V_$ASM_ALIAS--记录文件别名信息

V$ASM_ATTRIBUTE                Synonym for V_$ASM_ATTRIBUTE

V$ASM_CLIENT                   Synonym for V_$ASM_CLIENT--返回当前连接的客户端实例信息

V$ASM_DISK                     Synonym for V_$ASM_DISK---V$ASM_DISK*相关视图中记录的是ASM管理的磁盘及磁盘组信息

V$ASM_DISKGROUP                Synonym for V_$ASM_DISKGROUP

V$ASM_DISKGROUP_STAT           Synonym for V_$ASM_DISKGROUP_STAT

V$ASM_DISK_IOSTAT              Synonym for V_$ASM_DISK_IOSTAT

V$ASM_DISK_STAT                Synonym for V_$ASM_DISK_STAT

V$ASM_FILE                     Synonym for V_$ASM_FILE

V$ASM_FILESYSTEM               Synonym for V_$ASM_FILESYSTEM

V$ASM_OPERATION                Synonym for V_$ASM_OPERATION--记录当前磁盘的操作信息

V$ASM_TEMPLATE                 Synonym for V_$ASM_TEMPLATE

V$ASM_USER                     Synonym for V_$ASM_USER

V$ASM_USERGROUP                Synonym for V_$ASM_USERGROUP

V$ASM_USERGROUP_MEMBER         Synonym for V_$ASM_USERGROUP_MEMBER

V$ASM_VOLUME                   Synonym for V_$ASM_VOLUME

V$ASM_VOLUME_STAT              Synonym for V_$ASM_VOLUME_STAT

21 rows selected.

如下:

sys@mesdbbackup> select GROUP_NUMBER ,NAME ,STATE,TYPE  from v$asm_diskgroup;

GROUP_NUMBER NAME                           STATE       TYPE

------------ ------------------------------ ----------- ------

           1 DATA                           CONNECTED   NORMAL

           2 RECOVERY                       MOUNTED     NORMAL

sys@mesdbbackup> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,STATE from v$asm_disk;

GROUP_NUMBER DISK_NUMBER NAME                           PATH            STATE

------------ ----------- ------------------------------ --------------- --------

           2           0 RECOVERY_0000                  /dev/asm-diskd  NORMAL

           2           1 RECOVERY_0001                  /dev/asm-diske  NORMAL

           1           1 DATA_0001                      /dev/asm-diskc  NORMAL

           1           0 DATA_0000                      /dev/asm-diskb  NORMAL

上面列出了包含ASM 相关元数据的最常用动态性能视图。还有数百个其它动态性能视图,但是其中大多数视图都是空的,因为它们需要数据库实例装载数据库控制文件。ASM 实例不装载数据库控制文件。

 

ASM 系统权限

• ASM 实例没有数据字典,所以连接ASM 只能使用下列系统权限。

ASM 实例没有数据字典,所以连接ASM 实例只能使用以下三种系统权限之一:SYSASM、SYSDBA或 SYSOPER。

下面的列表讲述了这些ASM 系统权限。

• SYSASM:该权限提供对ASM 实例的全部管理权限。

• SYSDBA:该权限授予对ASM 中存储的数据的访问权限,在当前版本中还授予SYSASM管理权限。

• SYSOPER:该权限授予使用一组非破坏性ALTER DISKGROUP命令以及启动和停止ASM 实例的权限。不允许使用CREATE DISKGROUP等其它命令。

 

安装ASM 时,使用操作系统组对 SYSASM、SYSDBA和 SYSOPER权限进行验证。

Oracle Universal Installer (OUI) 实用程序将这些组分别称为OSASM、OSDBA和 OSOPER组,即OSASM组是授予了 SYSASM权限的操作系统组。

OSASM、OSDBA和 OSOPER组值的建议名称分别为 asmadmin、asmdba和 asmoper。

因此,SYSASM是数据库使用的名称,OSASM是OUI 实用程序使用的名称,而 asmadmin是操作系统使用的名称。它们都是指同一组用户。

第一次创建ASM 实例时,只定义sys和 asmsnmp这两个ASM 用户。

 创建SYS用户时,会自动为其分配SYSASM权限。

使用Oracle Enterprise Manager 管理ASM 用户

Oracle Enterprise Manager 允许你管理通过远程连接(使用口令文件验证)访问ASM 的用户。这些用户是专门为ASM 实例保留的。

仅当你作为SYSASM用户连接时才具有此功能。如果你作为SYSDBA或SYSOPER用户连接,该功能将隐藏。

• 单击“Creat(创建)”按钮时将显示“Create User(创建用户)”页。

• 单击“Edit(编辑)”按钮时将显示“Edit User(编辑用户)”页。

• 通过单击“Delete(删除)”按钮可以删除创建的用户。

注:要以SYSASM角色登录ASM,请单击该页顶部的“Preferences(首选项)”链接,然后单击“Preferred Credentials(首选×××明)”链接。此时你将在目标类型列表中看到ASM。单击ASM 目标类型旁边的“Set Credentials(设置×××明)”图标,定义具有SYSASM权限的帐户和口令。你需要从Database Control 中注销并再次登录,更改才会生效。

  • 启动和停止ASM 实例使用SQL*Plus

使用SQL*Plus 启动和停止ASM 实例与启动和停止数据库实例的方式相似。

$ . oraenv

ORACLE_SID = [orcl] ? +ASM

The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is 

/u01/app/oracle

$ sqlplus / AS SYSASM

SQL*Plus: Release 11.2.0.1.0 - Production on Wed Jul 8 20:46:46 2009

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

Connected to an idle instance.

SQL> startup

ASM instance started

Total System Global Area 284565504 bytes

Fixed Size 1336028 bytes

Variable Size 258063652 bytes

ASM Cache 25165824 bytes

ASM diskgroups mounted

ASM diskgroups volume enabled

SQL> shutdown abort

 

SQL> select name,state from v$asm_diskgroup;

NAME                           STATE

------------------------------ -----------

DATA                           MOUNTED

RECOVERY                       MOUNTED

SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS

---------------- ------------

+ASM             STARTED

在SQL*Plus 中使用STARTUP命令启动ASM 实例,其方式与启动Oracle DB 实例的方式相似。启动ASM 实例时,请注意以下几点:

• 要使用SQL*Plus 连接ASM 实例,请将 ORACLE_SID环境变量设置为ASM SID。单实例数据的默认ASM SID 为 +ASM,Oracle RAC 节点的默认ASM SID 是+ASMnode_number,其中node_number是节点的编号。oraenv脚本将设置ORACLE_BASE、ORACLE_SID、ORACLE_HOME和 PATH变量。

• 初始化参数文件必须包含下面的条目:

INSTANCE_TYPE = ASM 

该参数指示正在启动ASM 实例,而不是数据库实例。

• 运行STARTUP命令时,该命令尝试装载初始化参数ASM_DISKGROUPS指定的磁盘组,而不是尝试装载和打开某个数据库。如果尚未为 ASM_DISKGROUPS输入值,稍后可以通过ALTER DISKGROUP...MOUNT命令装载磁盘组。

下面的列表讲述了与ASM 相关的 STARTUP命令参数。

• FORCE:在重新启动ASM 实例之前向它发出SHUTDOWN ABORT。

• MOUNT或 OPEN:装载ASM_DISKGROUPS初始化参数中指定的磁盘组。这是未指定命令参数时的默认值。

• NOMOUNT:启动ASM 实例而不装载任何磁盘组。

• RESTRICT:在受限模式下启动实例。RESTRICT子句可以与 MOUNT、NOMOUNT和OPEN子句组合使用。

在受限模式下,数据库实例不能使用磁盘组。即,数据库无法打开磁盘组中的文件。

另外,如果磁盘组是由某个实例在受限模式下装载的,则该磁盘组无法由集群中的任何其它实例装载。通过受限模式,你可以在磁盘组上执行维护任务,而不会受到客户机的干扰。在磁盘组处于受限模式下时执行重新平衡操作,就不再需要在集群环境中的ASM 实例之间传递锁定和取消锁定区映射消息。这样可以提高重新平衡操作的整体吞吐量。在维护期间结束时,你必须显式卸载该磁盘组并在正常模式下重新装载该磁盘组。

在SQL*Plus 中运行SHUTDOWN命令时将启动ASM 关闭进程。在运行此命令之前,请确保已设置ORACLE_SID和 ORACLE_HOME环境变量,从而你可以连接到ASM 实例。

Oracle 强烈建议你在尝试关闭ASM 实例之前关闭使用该ASM 实例的所有数据库实例。

下面的列表讲述了与ASM 相关的 SHUTDOWN命令参数。

• NORMAL:ASM 在卸载所有磁盘组并关闭ASM 实例之前,将等待任何正在进行的SQL 完成执行。在关闭实例之前,ASM 将等待所有当前连接的用户从该实例断开。如果任何数据库实例与ASM 实例连接,则 SHUTDOWN命令将返回错误并保持ASM 实例继续运行。NORMAL是默认关闭模式。

• IMMEDIATE或 TRANSACTIONAL:ASM 在卸载所有磁盘组并关闭ASM 实例之前,将等待任何正在进行的SQL 完成执行。ASM 不等待当前与实例连接的用户断开连接。如果任何数据库实例与ASM 实例连接,则 SHUTDOWN命令将返回错误并保持ASM 实例继续运行。

• ABORT:ASM 实例立即关闭,而不按顺序卸载磁盘组。这将导致下次启动ASM 时进行恢复操作。如果有任何数据库实例与ASM 实例连接,则该数据库实例也将中止。

注:有连接的RDBMS 实例时,不应用NORMAL、IMMEDIATE和 TRANSACTIONAL形式的关闭,而将返回下面的错误:

SQL> shutdown

ORA-15097: cannot SHUTDOWN ASM instance with connected client (process 14372)

ASM是依赖于CSS守护进程的,因此在启动ASM实例前要确保css守护进程已经启动  。  CSS(Cluster Synchronization Services) 守护进程用来维持ASM 及客户端数据库实例间的一致性同步,如果是通过dbca建库的话,那么CSS守护进程默认即会启动(跟随系统reboot)。

启动和停止ASM 实例使用srvctl

可以使用Server Control 实用程序(srvctl) 启动和停止ASM 实例。

$ . oraenv

ORACLE_SID = [orcl] ? +ASM

The Oracle base for 

ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is 

/u01/app/oracle

$ srvctl start asm -o mount

$ srvctl stop asm -f

可以使用Server Control 实用程序(srvctl) 检查ASM 实例的状态。

$ srvctl status asm

ASM is running on edrsr25p1

使用srvctl启动和停止ASM 实例

可以使用Server Control 实用程序(srvctl) 启动和停止ASM 实例以及由Grid Infrastructure 管理的其它资源。srvctl实用程序位于Grid Infrastructure 的ORACLE_HOME/bin位置下和数据库安装的 ORACLE_HOME/bin位置下。管理ASM、

监听程序或Oracle Restart 时,应该使用位于Grid Infrastructure ORACLE_HOME中的srvctl实用程序。

可以下列方式使用 srvctl实用程序来控制ASM:

• 启动ASM 实例。

srvctl start asm [-o ] 

是有效的实例启动选项

(FORCE、MOUNT、OPEN、NOMOUNT或RESTRICT)之一(可选)

• 停止ASM 实例。

srvctl stop asm [-o ] -f 

是有效的实例关闭选项

(NORMAL、IMMEDIATE、TRANSACTIONAL或 ABORT)之一(可选),

–f 是强制

• 报告ASM 实例的状态。

srvctl status asm

启动和停止ASM 实例使用asmcmd

asmcmd实用程序提供了一个访问ASM 的命令行界面,无需使用SQL 语言。

$ . oraenv

ORACLE_SID = [orcl] ? +ASM

The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is 

/u01/app/oracle

$ asmcmd

Connected to an idle instance.

ASMCMD> startup

ASM instance started

Total System Global Area 284565504 bytes

Fixed Size 1336028 bytes

Variable Size 258063652 bytes

ASM Cache 25165824 bytes

ASM diskgroups mounted

ASM diskgroups volume enabled

ASMCMD> shutdown --abort

ASM instance shut down

Connected to an idle instance.

使用asmcmd启动和停止ASM 实例

用于管理的ASM 元数据位于ASM 实例内包含的动态性能视图内。通常通过ASM 实用程序使用SQL 语言来访问这些视图。要求了解SQL 语言增加了掌握ASM 的学习时间,而且SQL 语言培训通常不在系统管理员和存储管理员的学习范围内。asmcmd实用程序提供了一个类似伪Shell 的环境,可以接受UNIX 格式的语法执行常用的ASM 管理任务。

它可以用于管理Oracle ASM 实例、磁盘组、磁盘组的文件访问控制、磁盘组内的文件和目录、磁盘组的模板以及卷。

可以使用 asmcmd实用程序启动和关闭ASM 实例。支持的启动选项包括:

--nomount(在不装载磁盘组的情况下启动ASM 实例)

--restrict(启动ASM 实例并限制数据库使用)

--pfile

(使用定制pfile 启动ASM 实例)

支持的关闭选项包括:

--immediate(立即执行关闭)

--abort(中止所有现有操作)

磁盘组概览

磁盘组是一个或多个磁盘的逻辑分组,ASM 将其作为一个集合来管理。每个磁盘组都包含与自身相关联的元数据。在概念上,ASM 磁盘组类似于典型存储区域网络中的逻辑卷。

从磁盘组内分配文件空间。磁盘组中存储的文件的内容将在该磁盘组的磁盘中平均分布或条带化,以便消除热点并在各磁盘上提供一致的性能。每个ASM 文件都完全包含在一个磁盘组中。但是,一个磁盘组可以包含属于多个数据库的文件,而一个数据库可以使用来自多个磁盘组的不同文件。

磁盘组的关键属性是它的冗余设置。有三种可能的磁盘组冗余设置:

• 外部冗余,其中ASM 不提供任何镜像,磁盘都假设为高度可靠。

• 正常冗余,其中ASM 默认支持双向镜像,从而保证在较不可靠的存储上实现数据完整性。

• 高冗余,其中ASM 默认支持三向镜像,从而更好地保证数据完整性。

ASM 最多支持创建63 个磁盘组;但是,对于大多数安装,你很少会需要很多磁盘组。

 

ASM磁盘组的管理方式比较多,比如DBCA、EM、SQL*PLUS等都可以操作,还有oracle专门提供了ASMCMD命令行方式,像操作文件系统一样来操作磁盘组。

ASM 磁盘

ASM 磁盘:

• 是为ASM 磁盘组预配的存储设备

• 通过正常O/S 接口来访问

• 必须可由ASM 所有者读取和写入

• 必须可由集群中的所有节点访问

• 在不同的节点上可以有不同的O/S 名称或路径

• 可以是:

– 整个物理磁盘或物理磁盘的分区

– 存储阵列中的磁盘或分区

– 逻辑卷(LV) 或逻辑单元(LUN) 

– 网络连接文件(NFS) 

ASM 磁盘组包含一个或多个ASM 磁盘。

ASM 磁盘必须可由集群中所有大,能够提供高效的后续访问

• 允许的AU 大小:

– 1、2、4、8、16、32 或64 MB 节点的ASM 所有者读取和写入。

ASM 磁盘可以是磁盘上的分区,但是Oracle 强烈建议不要与其它应用程序程序共享ASM 使用的物理磁盘。这是因为在应用ASM 条带化和镜像策略时,磁盘组内的各个ASM 磁盘的I/O 性能必须相似且一致,才能获得最佳性能。在ASM 和其它应用程序之间共享设备会难以确保磁盘性能相似且一致。

集群中不同节点上的ASM 磁盘的O/S 设备名称不必相同。ASM 通过读取ASM 磁盘的标头来识别磁盘组的成员。

通常,ASM 磁盘是以存储阵列中的裸LUN 提供给ASM 的。另外,ASM 磁盘还可以是远程NFS 文件器中的文件。

分配单元

ASM 磁盘划分为分配单元(AU):

• 在创建磁盘组时可以配置AU 大小。

• AU 默认大小为1 MB:

– 足够小,能够被数据库缓存;但又足够

– 在超大型数据库(VLDB) 中或使用专门的存储硬件时,较大的AU 可能非常有用

在ASM 磁盘内,空间划分为分配单元(AU)。AU 默认大小是1 MB,该大小足够小,不会变为热点,但又足够大,能够提供高效的后续访问。创建磁盘组时可以设置AU 大小。你无法更改磁盘组的AU 大小。在超大型数据库(VLDB) 中或使用专门的存储硬件时,较大的AU 大小可能会很有用。如果经常访问某个AU,则数据库内核会将其缓存以便实现更高的访问效率。

ASM 文件

ASM 文件:

• 是由AU 组成的ASM 区的集合

– 可变大小的区支持大型文件

• 对数据库内核显示为普通文件

• 文件名以“+”开头

– 例如,

+DATA/orcl/datafile/system.256.689832921

• 可以与可选的文件名别名相关联

– 例如,+DATA/dbfiles/mydb/system01.dbf

• 在磁盘组中的磁盘中平均分布

• 根据磁盘组中定义的策略进行镜像

ASM 呈现一组文件供ASM 的客户机使用。ASM 文件由一组分配单元组成,这些文件对数据库内核显示为普通文件。

每个ASM 文件都具有唯一的系统生成的名称。

 

生成格式为:+diskgroup/dbname/file_type/file_type_tag.file.incarnation ,

• +diskgroup :磁盘组名称;  

• dbname :数据库的DB_UNIQUE_NAME参数值;   

• file_type :创建的文件类型,比如CONTROLFILE/DATAFILE/ONLINELOG/ARCHIVELOG/TEMPFILE/BACKUPSET/FLASHBAC

K等等;   

•  file_type_tag  :文件类型的标签,比如表空间对应的通常为该表空间名称;   

•   file.incarnation  :文件序号+incarnation,用来确保文件的唯一; 

 

sys@mesdbbackup> alter tablespace INVENTORY add datafile '+DATA';

Tablespace altered.

ASMCMD> pwd

+data/test0924/datafile

ASMCMD> ls

INVENTORY.266.829658135

 

示例显示了一个完全限定的ASM 文件名的示例。完全限定的ASM 文件名表示一个层次结构,其开头是加号与磁盘组名称的组合。磁盘组名称后是数据库名称和文件类型。最后的元素由标记名称、文件编号和原型编号组成。可以创建别名(可选),为管理员提供一种更用户友好的方式来引用ASM 文件。

文件使用条带化和镜像所有内容(SAME) 策略在磁盘组的各ASM 磁盘中平均分布。

ASM 本身支持大多数与数据库相关的文件类型,例如数据文件、日志文件、控制文件、

RMAN 备份及其它文件。在Oracle Database 11g发行版2 之前,ASM 仅支持与Oracle DB 相关的文件,无法用于存储和管理ASCII 跟踪文件和预警日志、Oracle 二进制文件、

Oracle 集群注册表(OCR) 和集群表决磁盘。Oracle Database 11g发行版2 提供在ASM 上运行通用文件系统的方式,从而消除了上述限制。

区映射

ASM 通过称为区映射的元数据跟踪文件的分布。区映射是一个表,将文件中的数据区映射到磁盘上的分配单元。

文件区与分配单元之间的关系如下所示。区包含:

• 一个AU 用于前20,000 个区(0-19999) 

•4 个AU 用于接下来的20,000 个区(20000-39999) 

• 16 个AU 用于40,000 以上的区

将可变大小的区与大型分配单元结合使用,可满足非常大的ASM 文件的需要。

条带化粒度

ASM 用于负载平衡的条带化策略与用于等待时间的条带化策略不同:

• 对于负载平衡,粗粒度条带化将多个分配单元连接起来使用。

– 例如:

在ASM 中,条带化主要具有两种用途:

• 在磁盘组的所有磁盘中执行I/O 负载平衡。

• 改善I/O 等待时间。

粗粒度条带化在磁盘组的各磁盘中分布分配单元。这用于为磁盘组提供负载平衡。分配文件时,ASM 会在所有磁盘中平均分布分配单元。有时分布无法非常平均,但是随着时间的流逝,会变得几乎相等。上图显示了一个具有五个分配单元的文件,这些分配单元在条带化之后,分布在一个外部冗余磁盘组的五个磁盘中,该磁盘组共包含八个磁盘。

对于前20,000 个区,区大小等于AU 大小。从第20,001 个区到第40,000 个区,该区组总是一次分配8 个区,区大小等于4 倍AU 大小。如果AU 大小为1 MB,这意味着ASM 文件将一次增大64 MB (8 * 4 * 1 MB)。如果文件采用粗粒度条带化,则它将在8 个区中进行条带化,条带大小为1 AU。条带化始终在AU 级别进行,而不是在区级别。因此,无论文件多大,粗粒度文件的每个AU 都与该文件的前一个AU 所在的磁盘不同。在第40,000 个区之后,仍旧是每次分配8 个区,但区大小等于16 倍AU 大小。

细粒度条带化

细粒度条带化在分配单元组中放置128 KB 条带单元来改善等待时间。

• 磁盘组具有8 个磁盘和外部冗余

• 使用默认的AU 大小:1 MB 

• 第一个1 MB 区在8 个AU 中以128 KB 条带形式写入

细粒度条带化将数据区拆分为128 KB 的块,然后在许多磁盘中分布每个区的负载,从而改善特定类型文件的等待时间。默认情况下,细粒度条带化用于控制文件和联机重做日志文件。

图显示了细粒度条带化的工作原理。在此示例中,新文件的第一个1 MB 区最终占用8 个不同分配单元中的第一个128 KB 块,这8 个分配单元分布在磁盘组的八个磁盘中。因此,1 MB 的读取或写入分布在八个磁盘(而不是一个磁盘)中。

  • 细粒度条带化

示例:

• 磁盘组具有8 个磁盘和外部冗余

• 使用默认的AU 大小:1 MB 

• 下一个1 MB 区以128 KB 条带的形式在相同的8 个分配单元中写入,直到这些分配单元写满

继续前面的示例,空间中的下一个1 MB 区将分布在相同分配单元组的每个单元的第二个128 KB 块中。这种模式将继续,直到第一组分配单元写满,然后分配另一组。

ASM 故障组

• 共享需要容错的一项公用资源的一组磁盘

• 镜像的区副本存储在不同的故障组中

• 存储硬件指示故障组边界

– 分离磁盘控制器的示例:

在磁盘组内,可以将一些磁盘归到故障组中。故障组是存储或数据库管理员指定ASM 镜像操作的硬件边界的一种方式。

例如,可以将连接到一个磁盘控制器的所有磁盘指定为某个公用故障组的磁盘。这样,将在连接到不同控制器的磁盘上镜像文件区。另外,管理员可以配置ASM 来选择默认故障组策略。默认策略是每个磁盘位于自己的故障组中。

你可以使用所需的任何标准将磁盘归到故障组中。故障组可以用于避免单个磁盘、磁盘控制器、I/O 网络组件以及甚至整个存储系统的故障。通常,管理员将分析其存储环境并对故障组进行组织来消除特定故障情况。

由数据库或存储管理员确定其安装的最佳故障组配置。

条带化和镜像示例

一个共含八个磁盘的正常冗余磁盘组,其中的磁盘分布在两个故障组中。

条带化和镜像示例

本页中的图显示了一个正常冗余磁盘组中条带化和镜像的示例。红块表示一个包含五个区的文件,这些区在条带化后,分布在磁盘组(共八个磁盘)的五个磁盘中。蓝块表示文件区的镜像副本。请注意,无论区在各个磁盘和故障组中如何分布,每个区在一个故障组中仅有一个副本。

分配文件时,主区的分配用于保证性能,辅助副本的分配用于保证完整性。因此,默认情况下,所有数据库读取都针对主区进行。

 

ASM如何处理磁盘故障

ASM中的磁盘组可分成两类,普通磁盘组和failure磁盘组,后者又与ASM的荣誉方式有所关联。

普通磁盘组就是标准的存储单元,ASM可以向其可访问的磁盘组中读写数据,failure磁盘组是为了提高数据的高可用性。

ASM中的磁盘荣誉策略分成三类,外部冗余,标准冗余和高度冗余,其中外部冗余与failure磁盘组无关,如果设置了标准冗余和高度冗余,那么该磁盘组就必须拥有failure磁盘组。

标准冗余,ASM要求改磁盘组至少要拥有两个failure磁盘组,即提供双倍镜像保护,对于同一份数据(ASM中镜像单位不是磁盘,也不是块,而是一种AU的单位,该单位大小默认是1M)将有主从两份镜像,并且ASM通过算法来自动确保主、从镜像不会存在于同一份failure 磁盘组,这样就保障了就算整个failure 磁盘组都损坏,数据也不会丢失。至于高度冗余(High Redundancy)就更安全了,它至少需要三个failure 磁盘组,也就是一份AU有一主多从的镜像,理论上将更加安全。

如果磁盘发生损坏,那么损坏的磁盘默认自动offlice并被drop掉,不过该磁盘所在的磁盘组仍将保持MOUNT状态,如果该盘有镜像的话,那么应用不会有影响,镜像盘将自动实现接管--只要不是所有failure磁盘组都损坏掉,否则的话,该磁盘组将自动DISMOUNT。

故障示例

如果磁盘H 发生故障,则将根据正常镜像在正常磁盘上重新创建该磁盘包含的区。

此处扩展了上一页中的示例,假设磁盘H 发生故障,无法再访问其包含的数据。该故障要求恢复故障磁盘上的所有区并将这些区复制到另一磁盘。

区3 和5 的正常副本将复制到同一故障组中另一磁盘的空闲区域。在此示例中,区5 将从磁盘B 复制到磁盘F,区3 将从磁盘C 复制到磁盘G。

磁盘发生故障后的最后一步是ASM 从磁盘组中删除故障磁盘。

删除磁盘基本上会触发相同的过程;不过,在删除磁盘时,要被删除的磁盘上的区首先会复制到可用替代位置。

 

ASM 扩展性 

• 最多支持63个磁盘组;  

•最多支持10000个磁盘;  

•最大支持4pb/磁盘;  

•最大支持40 exabyte/ASM存储;   

•最大支持1百W个文件/磁盘组;   

•外部冗余时单个文件最大35tb,标准冗余时单个文件最大5.8tb,高冗余度时单个文件最大3.9tb。

管理磁盘组

ASM 实例的主要目的是管理磁盘组和保护其数据。ASM 实例还将文件分布传送到数据库实例。这样,数据库实例就可以直接访问磁盘组中存储的文件。

有多个磁盘组管理命令。执行这些命令都需要SYSASM或SYSDBA权限,且必须从ASM 实例发出。

你可以添加新磁盘组。还可以修改现有磁盘组来添加新磁盘、删除现有磁盘以及执行许多其它操作。可以删除现有磁盘组。

创建和删除磁盘组使用SQL*Plus

CREATE DISKGROUP语句,该语句的语法如下: 

CREATE DISKGROUP diskgroup_name 

  [ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ] 

  [ FAILGROUP failgroup_name ] 

  DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ] ...; 

•首先要指定的就是磁盘组名称(diskgroup_name);  

•指定冗余度,有三个选择:HIGH(高度冗余>三路)、NORMAL(标准冗余--双路)和XTERNAL(外

部存储冗余);   

•选择是否指定FAILGROUP(如果选择非external则必须指定);   

•指定该磁盘组中的成员(对应的LUN),在指定成员时一般ASM能够自动检测出磁盘的容量,不过

如果DBA基于某些方面的考虑,希望限制ASM使用的空间的话,也可以在指定成员过程中,顺

便指定大小(只要指定的大小不超出磁盘实际容量),在添加成员时,ASM也会自动检查磁盘头以

确定该磁盘是否被加入到其它的磁盘组中,当发现该盘已加入其它磁盘组的话,你可以通过

FORCE选项来强制修改该盘所属磁盘组。 

$ . oraenv

ORACLE_SID = [orcl] ? +ASM

The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is 

/u01/app/oracle

$ sqlplus / AS SYSASM

SQL*Plus: Release 11.2.0.1.0 - Production on Wed Jul 8 20:46:46 2009

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

..

SQL> CREATE DISKGROUP dgroupA NORMAL REDUNDANCY 

FAILGROUP controller1 DISK 

'/devices/A1' NAME diskA1 SIZE 120G FORCE, 

'/devices/A2', 

FAILGROUP controller2 DISK 

'/devices/B1', 

'/devices/B2'; 

SQL> DROP DISKGROUP dgroupA INCLUDING CONTENTS;

创建和删除磁盘组

假设ASM 磁盘搜索在/dev目录中找到了下列磁盘:A1、A2、B1和B2。另外,假设磁盘A1和A2的磁盘控制器不同于B1和B2的磁盘控制器。第一个示例说明如何配置名为DGROUPA的磁盘组,其包含两个故障组:CONTROLLER1和ONTROLLER2。该示例还对该磁盘组使用默认冗余属性NORMAL REDUNDANCY。你还可以提供磁盘名称和磁盘的大小(可选)。如果你不提供此信息,ASM 会创建默认名称并尝试确定磁盘的大小。如果无法确定大小,将返回错误。FORCE指示指定的磁盘应该添加到指定的磁盘组,即使该磁盘已经格式化为某个ASM 磁盘组的成员。对未格式化为某个ASM 磁盘组的成员的磁盘使用FORCE选项将返回错误。

第二个语句所示,你可以删除磁盘组及其所有文件。为了避免意外删除,如果磁盘组除内部ASM 元数据外还包含任何其它文件,则必须指定INCLUDING CONTENTS选项。必须先装载磁盘组才能将其删除。在确保未打开任何磁盘组文件后,将从磁盘组中删除该组及其所有驱动器。然后,将覆盖每个磁盘的标头来清除ASM 格式信息。

向磁盘组添加磁盘

ALTER DISKGROUP dgroupA ADD DISK

'/dev/sde1' NAME A5,

'/dev/sdf1' NAME A6,

'/dev/sdg1' NAME A7,

'/dev/sdh1' NAME A8;

ALTER DISKGROUP dgroupA ADD DISK '/devices/A*';

磁盘格式化---------->磁盘组重新平衡

向磁盘组添加磁盘

此示例显示如何向磁盘组添加磁盘。可以执行ALTER DISKGROUP ADD DISK命令来添加磁盘。第一个语句向DGROUPA磁盘组添加四个新磁盘。

第二个语句说明搜索字符串的相互影响。请考虑下列配置:

/devices/A1是磁盘组DGROUPA的成员。

/devices/A2是磁盘组DGROUPA的成员。

/devices/A3是磁盘组DGROUPA的成员。

/devices/A4是候选磁盘。

第二个命令将A4添加到DGROUPA磁盘组。该命令将忽略其它磁盘,即使它们与搜索字符串相匹配,因为它们已经是DGROUPA磁盘组的一部分。上图显示当你向磁盘组添加磁盘时,ASM 实例会确保该磁盘是可寻址且可用的。然后会对该磁盘进行格式化和重新平衡。重新平衡过程比较耗费时间,因为该过程会将所有文件的区移至新磁盘。

注:重新平衡不会阻止任何数据库操作。重新平衡过程主要影响系统的I/O 负载。重新平衡的能力越高,对系统施加的I/O 负载越多,可用于数据库I/O 的I/O 带宽也就越少。

 

当发生添加/删除磁盘组中磁盘的操作时,ASM能够自动平衡。对于普通的删除操作(无force选项),被删除的磁盘在该上数据被有效处理前并不会立刻释放,同样,新增磁盘时,在重分配工作完成前,该盘也不会承担I/O负载的工作。要监控后台进行的操作,可以通过V$ASM_OPERATION视图查询。

如果希望ALTER DISKGROUP语句完成所有工作才返回的话,可以在执行时附加REBALANCE WAIT子句,这样该语句就会等待自动平衡的操作,直接所有操作完成才返回结果,当然在等待期间,如果你不想等待,使用CTRL+C终端既可以获得控制权,而平衡的操作不受影响,会在后台继续进行。

其它ALTER命令

从dgroupA删除磁盘:

ALTER DISKGROUP dgroupADROP DISK A5;

在单个命令中添加和删除磁盘:

ALTER DISKGROUP dgroupA 

DROP DISKA6

ADD FAILGROUPcontroller3 DISK '/dev/sdi1'NAME A9;

取消磁盘删除操作:

ALTER DISKGROUP dgroupA UNDROP DISKS;

其它ALTER命令

第一个语句显示如何从DGROUPA磁盘组中删除一个磁盘。

第二个语句显示如何在单个命令中添加和删除磁盘。这种方式的一大优点就是在该命令完成后才开始重新平衡操作。

第三个语句显示如何取消磁盘删除操作。

当删除磁盘时,ASM发现平衡不过来时(比如剩下的磁盘空间不足以存放所有数据时),删除操作也会失败,这种情况要么先删数据,要么取消删除的操作。

只要删除操作还没有真正完成,就可以取消删除磁盘的操作,

UNDROP命令仅对磁盘的暂挂删除操作起作用;它对于已经完成的删除操作没有影响。

如果需要,可以使用下面的语句对DGROUPB磁盘组进行重新平衡:

ALTER DISKGROUP dgroupB REBALANCE POWER 5; 

此命令通常是不需要的,因为在添加、删除磁盘或调整磁盘大小时会自动执行该操作。

但是如果你希望使用POWER子句覆盖由初始化参数ASM_POWER_LIMIT定义的默认速度,此命令非常有用。通过重新输入具有新级别的命令,可以更改正在进行的重新平衡操作的能力级别。能力级别为零会导致重新平衡操作中断,直到隐式或显式重新调用该命令。

下面的语句可以卸载DGROUPA:

ALTER DISKGROUP dgroupA DISMOUNT; 

通过MOUNT和DISMOUNT选项,你可以使一个或多个磁盘组对数据库实例可用或不可用。

在支持单实例的集群ASM 环境中,当该实例故障转移到另一节点时,手动卸载和装载功能非常有用。

不管你是加还是山磁盘组中的磁盘,ASM都能自动进行平衡,确保该磁盘组中的每块盘存储的数据量平均,以实现最优化的IO性能,并且这一过程不会对数据造成影响。

手动平衡磁盘组

一般情况下ASM都会自动对其下的磁盘组进行平衡,不过ORACLE也提供了手动平衡磁盘组的方式,通过alter diskgroup ... power 语句。前面提到过磁盘组的平衡度有1到11多个级别,默认是按照ASM_POWER_LIMIT初始化参数中设置的值,手动平衡的话,设置的平衡度可以与初始化参数中并不相同,例如,设置磁盘组平衡度为6,语句如下:

SQL> alter diskgroup DATA rebalance power 6;

Diskgroup altered.

  手动平衡磁盘组可能涉及大量的工作,该操作可能费时较久,因此DBA在执行该语句时,一定要注意该操作对IO 性能的影响。 

 另外再次强调,上述语句将很快返回diskgroup altered的提示,但这并不表示操作真正完成,它只是反馈语句提交而已,查看磁盘后台的操作,可以通过v$asm_operator视图,或者在语句执行时增加wait子句,这样ASM将会等到操作真正完成时,才返回提示信息。 

 

管理目录

ASM 磁盘组中文件和目录的管理自动化水平相当高,应该说基本上完全不需要DBA参与,当然,也是可以手动修改的。 

  创建新目录: 

SQL> alter diskgroup asmdisk2 add directory '+ASMDISK2/JSS1'; 

Diskgroup altered. 

  修改目录名: 

SQL> alter diskgroup asmdisk2 rename directory '+ASMDISK2/JSS1'   to '+ASMDISK2/JSS2'; 

Diskgroup altered. 

  删除目录名: 

SQL> alter diskgroup asmdisk2 drop directory '+ASMDISK2/JSS2'; 

Diskgroup altered. 

  实际上,ASM中目录和文件的管理,也可以通过ASMCMD命令行方式进行,该命令行进入之后,是一个类似文件系统的管理界面,ORACLE提供了一些最基础的,如cd、ls、mkdir、rm等等几个有限的操作命令。

管理别名

当系统自动产生的名称太过复杂不怎么好记,DBA可以通过别名,为它创建一个简单化的名称,而又不会对其现有名称造成任何影响。ASM中创建别名是通过alter diskgroup的alias子句实现,支持增加/修改/删除等多项操作。V$ASM_ALIAS视图中可以查询到当前实例中创建的别名。

  例如,增加别名: 

SQL> alter diskgroup asmdisk2 add alias '+ASMDISK2/repdb/datafile/temp01.dbf' for '+ASMDISK2/repdb/TEMPFILE/TEMP.267.714576831'; 

Diskgroup altered. 

  修改别名: 

SQL> alter diskgroup asmdisk2 rename alias '+ASMDISK2/repdb/datafile/temp01.dbf' to '+ASMDISK2/repdb/TEMPFILE/temp01.dbf'; 

Diskgroup altered. 

  删除别名: 

SQL> alter diskgroup asmdisk2 drop alias '+ASMDISK2/repdb/TEMPFILE/temp01.dbf'; 

Diskgroup altered. 

 不管是添加/删除或是修改别名,对原有文件路径均不会有影响。 

使用Oracle Enterprise Manager 管理ASM

Oracle Enterprise Manager (EM) 是Oracle 的管理工具系列,管理对象涵盖数据库、中间件、应用程序、网络、IT 基础结构及其它。Oracle Enterprise Manager 是一个基于浏览器的环境,为常见ASM 管理任务提供了一个点击式替代方案。

ASM 磁盘组兼容性

• 每个磁盘组的兼容性都可以分别控制:

– ASM 兼容性控制磁盘上ASM 元数据结构。

– RDBMS 兼容性控制最低使用者客户机级别。

– ADVM 兼容性确定磁盘组是否可以包含Oracle ASM 卷。

• 设置磁盘组兼容性的操作是不可逆的。

适用于ASM 磁盘组的兼容性有三种:涉及描述磁盘组的持久性数据结构,客户机(磁盘组的使用者)的功能,以及能否在磁盘组中包含卷。这些属性分别称为“ASM 兼容性”、“RDBMS 兼容性”和“ADVM 兼容性”。每个磁盘组的兼容性都可以独立控制。这是支持包含Oracle Database 10g和Oracle Database 11g磁盘组的异构环境所必需的。

这三种兼容性设置是每个ASM 磁盘组的属性:

•RDBMS 兼容性是指RDBMS 实例的最低兼容版本,此设置将允许该实例装载磁盘组。

该兼容性确定了ASM 实例与数据库(RDBMS) 实例间交换消息的格式。ASM 实例可以支持以不同兼容性设置运行的不同RDBMS 客户机。每个实例的数据库兼容版本设置必须高于或等于该数据库使用的所有磁盘组的RDBMS 兼容性。数据库实例与ASM 实例通常在不同的Oracle 主目录中运行。这意味着数据库实例可以运行与ASM 实例不同的软件版本。数据库实例第一次连接到ASM 实例时,系统会协定这两个实例都支持的最高版本。

数据库的兼容性参数设置、数据库的软件版本以及磁盘组的RDBMS 兼容性设置确定了数据库实例能否装载给定的磁盘组。

•ASM 兼容性是指控制磁盘上ASM 元数据的数据结构格式的持久性兼容性设置。

磁盘组的ASM 兼容性级别必须始终高于或等于同一磁盘组的RDBMS 兼容性级别。

ASM 兼容性只与ASM 元数据的格式相关。文件内容的格式取决于数据库实例。例如,可以将某个磁盘组的ASM 兼容性设置为11.0,而将该磁盘组的RDBMS 兼容性设置为10.1。这意味着该磁盘组只能由软件版本为11.0 或更高的ASM 软件管理,而软件版本高于或等于10.1 的任何数据库客户机都可以使用该磁盘组。

• ADVM 兼容性属性确定磁盘组能否包含Oracle ASM 卷。该值必须设置为11.2 或更高。设置该属性前,必须确保COMPATIBLE.ASM的值为11.2 或更高。此外,还必须加载ADVM 卷驱动程序。

仅当持久性磁盘结构或消息传送协议发生更改时,才需要提高磁盘组的兼容性。但是,提高磁盘组兼容性是一个不可逆的操作。可以使用CREATE DISKGROUP命令或ALTER DISKGROUP命令来设置磁盘组兼容性。

注:除了磁盘组兼容性,兼容参数(数据库兼容版本)确定了启用的功能;该参数适用于数据库或ASM 实例,具体取决于instance_type参数。例如,将该参数设置为10.1 将禁止使用Oracle Database 11g中引入的任何新功能(磁盘联机/脱机、可变区等)。

ASM 磁盘组属性

CREATE DISKGROUP DATA2 NORMAL REDUNDANCY 

DISK '/dev/sda1','/dev/sdb1'

ATTRIBUTE 'compatible.asm'='11.2';

每当创建或更改ASM 磁盘组时,都可以使用CREATE DISKGROUP和ALTER DISKGROUP命令新增的ATTRIBUTE子句更改其属性。图中的表简要概述了这些属性:

•ASM 允许使用在创建磁盘组时指定的不同分配单元(AU) 大小。AU 大小可以是1、2、4、8、16、32 或64 MB。

•RDBMS 兼容性:有关详细信息,请参阅“ASM 磁盘组兼容性”一节。

•ASM 兼容性:有关详细信息,请参阅“ASM 磁盘组兼容性”一节。

• 可以用分钟(M)、小时(H) 或天(D) 为单位指定DISK_REPAIR_TIME。如果省略单位,则使用默认值H。如果省略此属性,则使用默认值3.6H。可以使用ALTER DISKGROUP ... DISK OFFLINE语句覆盖此属性。

• 还可以为指定的模板指定冗余属性。

• 还可以为指定的模板指定条带化属性。

注:对于每个已定义的磁盘组,可以通过V$ASM_ATTRIBUTE固定视图查看所有已定义的属性。

使用Oracle Enterprise Manager 编辑磁盘组属性

Oracle Enterprise Manager 提供了一种简便方式用于存储和检索与磁盘组相关的环境设置。

在“Create Disk Group(创建磁盘组)”页和“Edit Advanced Attributes for Disk Group(编辑磁盘组的高级属性)”页中都可以设置兼容属性。仅“Edit Advanced Attributes for Disk Group(编辑磁盘组的高级属性)”页中添加了disk_repair_time属性。

注:对于低于11g的ASM 实例,默认ASM 兼容性和客户机兼容性都为10.1。对于11gASM 实例,默认ASM 兼容性为11.2,数据库兼容性为10.1。

检索ASM 元数据

• 使用SQL*Plus:

SQL> SELECT f.type, f.redundancy, f.striped, f.modification_date, 

a.system_created, a.name FROM v$asm_alias a, v$asm_file f WHERE 

a.file_number = f.file_number and a.group_number = f.group_number 

and type='DATAFILE';

TYPE REDUND STRIPE MODIFICAT S NAME

-------- ------ ------ --------- - ---------------------DATAFILE MIRROR COARSE 08-JUL-09 Y SYSTEM.256.689832921

DATAFILE MIRROR COARSE 08-JUL-09 Y SYSAUX.257.689832923

..

• 使用asmcmd:

ASMCMD> ls -l +DATA/orcl/datafile

Type Redund Striped Time Sys Name

DATAFILE MIRROR COARSE JUL 08 21:00:00 Y SYSTEM.256.689832921

DATAFILE MIRROR COARSE JUL 08 21:00:00 Y SYSAUX.257.689832923

..

检索ASM 元数据

ASM 实例托管基于内存的元数据表,这些表通过动态性能视图呈现。可以使用SQL*Plus、asmcmd或Oracle Enterprise Manager 查询该数据。

使用SQL*Plus 需要具有SQL 语言知识,可能要联接多个动态性能视图来检索相关信息。

第一个示例显示v$asm_file和v$asm_alias之间建立了一个联接,以便显示关于数据库的数据文件的元数据。如果针对ASM 实例执行此查询,根据语法的定义方式,将检索多个数据库的数据文件。需要使用附加过滤条件才能将输出限定为单个数据库。

asmcmd实用程序的优点在于,不需要SQL 语言知识就能连接到ASM 实例并检索元数据。

它使用与UNIX 表示法类似的样式。此幻灯片上的第二个示例使用asmcmd命令来检索SQL 示例中的元数据。此示例的另一个优点是输出限制为单个数据库的数据文件,因为列出的路径包含数据库名称orcl和文件类型datafile。因此,对于asmcmd中显示的目录,需要使用WHERE子句设置SQL 过滤条件才能给出相同结果。

注:在Oracle Enterprise Manager Database Control 中,只需在各个ASM Web 页中浏览就能查看大多数ASM 元数据。

ASM 快速镜像重新同步概览

ASM 快速镜像重新同步可以显著减少重新同步临时故障磁盘所需的时间。如果某个磁盘因临时故障而脱机,ASM 将跟踪在中断期间发生修改的区。临时故障被修复后,ASM 可以快速地仅重新同步在中断期间受影响的ASM 磁盘区。

此功能假设受影响的ASM 磁盘的内容未被破坏或修改。

某个ASM 磁盘路径出现故障时,如果您已设置了相应磁盘组的DISK_REPAIR_TIME属性,则ASM 磁盘会脱机,但不会被删除。此属性的设置确定了ASM 可容忍的磁盘中断持续时间;如果中断在此时间范围内,则修复完成后仍可重新同步。注:跟踪机制对每个修改的分配单元使用1 位。这样可确保跟踪机制非常高效。

• 简介ASM及描述使用ASM 的好处

• 管理ASM 实例(SQL*plus、asmcmd和Oracle Enterprise Manager )

• 指定ASM 兼容性属性

• 创建和删除ASM 磁盘组

• 扩展ASM 磁盘组

• 通过使用各种实用程序检索ASM 元数据

Automatic Storage Management

Automatic Storage Management (ASM) 将文件系统与卷管理器纵向集成在一起,这是一项专门为Oracle DB 文件建立的技术。使用ASM 可管理单个对称多处理(SMP) 计算机,或通过管理集群的多个节点来支持Oracle Real Application Clusters (RAC)。

ASM 在所有可用的资源中分布输入/输出(I/O) 负载,以在免除手动I/O 优化的同时优化性能。ASM 帮助DBA 管理动态数据库环境,让DBA 在不关闭数据库的情况下,通过增加数据库的大小来调整存储分配。

ASM 通过提供数据的冗余副本来提供容错能力,ASM 也可以建立在供应商提供的存储机制上。数据管理是通过为数据类选择所需的可靠性和性能特性(而不是逐个文件地进行人为交互)来实现的。

通过自动处理手动存储,ASM 功能节省了DBA 的时间,从而提高了管理员管理更多和更大数据库的能力,而且效率也会更高。

 

ASM:主要功能和优点

• 对文件而不是逻辑卷进行条带化

• 提供联机磁盘重新配置和动态重新平衡功能

• 允许调整重新平衡速度

• 以每个文件为基础提供冗余

• 只支持Oracle DB 文件

• 可识别集群

• 可自动安装

ASM 将文件划分为区(不同于前面讨论的数据文件区),而且将每个文件的区均匀分布在所有磁盘上。ASM 使用索引技术跟踪每个区的位置。存储容量发生变化时,ASM 不会重新对所有数据进行条带化,而是根据添加或删除的存储量,按比例移动一定数量的数据,以重新平均分配文件,并在磁盘间保持负载平衡。此操作可在数据库处于活动状态时执行。可以提高重新平衡操作的速度,以便更快地完成操作;也可以降低速度,以减少对I/O 子系统的影响。ASM 还提供了镜像保护,因此不必再购买第三方的逻辑卷管理器。

ASM 的一个特有优势是可基于文件而不是卷进行镜像。因此,同一磁盘组可以包含镜像文件或非镜像文件的组合。

ASM 支持数据文件、日志文件、控制文件、归档日志、Recovery Manager (RMAN) 备份集及其它Oracle DB 文件类型。ASM 还支持RAC,这样就不再需要集群逻辑卷管理器或集群文件系统。

ASM:概念

ASM 不会妨碍先前存在的数据库功能。现有数据库能够像平常一样工作。可以将新文件创建为ASM 文件,继续按原有的方式管理现有文件,也可以最终将这些文件移植到ASM。

ASM介绍及管理-1

 图表描述了使用ASM 的Oracle DB 中的各种存储组件之间存在的关系。图表的左侧部分和中间部分显示了在以前版本中存在的关系。

右侧部分是ASM 引入的新概念。

数据库文件可以存储为ASM 文件。新层次的顶部是ASM 磁盘组。任何单个ASM 文件只能包含在一个磁盘组中。

不过,一个磁盘组中可以包含属于多个数据库的多个文件,并且单个数据库可以使用来自多个磁盘组的存储空间。

一个磁盘组由多个ASM 磁盘组成,但每个ASM 磁盘只能属于一个磁盘组。

ASM 文件总是分布在该磁盘组中的所有ASM 磁盘上。

ASM 磁盘按分配单元进行分区。分配单元(AU) 是ASM 分配的最小连续磁盘空间。

创建磁盘组时,可以将ASM AU 大小设置为2 的幂(1、2、4、8、16、32 或64),范围在1 MB 到64 MB 之间。

对于使用大量顺序读取操作的数据仓库应用程序,较大的AU 大小通常会更有优势。

注:图中的图形只显示了一种ASM 文件:数据文件。不过,ASM 也可用于存储其它类型的数据库文件。

 

ASM 对于管理员的好处

使用ASM 可以免除:

• I/O 性能优化

• 数据文件移动和重新组织

• 文件名管理

• 逻辑卷管理

• 文件系统管理

• 集群文件系统管理

• 裸设备管理

 

1、使用ASM 可以显著减少:

• 逻辑单元号(LUN) 管理

– 逻辑单元数量较少,大小较大

• 数据库管理员对系统管理员的依赖性

• 手动执行维护任务时可能发生的错误

2、使用ASM 可以免除非ASM 存储环境中许多必不可少的任务。其中包括:

• I/O 性能优化:ASM 采用条带化和镜像所有内容的策略,且执行自动重新平衡操作,这意味着不再需要旨在平衡磁盘使用以及消除磁盘热点的I/O 性能优化。

• 数据文件移动和重新组织:不再需要更改数据文件的位置来满足性能要求和空间约束条件。

• 文件名管理:不再需要定义和强制执行文件命名策略。

• 逻辑卷、文件系统、集群文件系统和裸设备管理:不再需要这些存储元素。

3、使用ASM 可以减少下列重要方面的工作,从而提供更多好处:

• 逻辑单元号(LUN) 管理工作减少,因为ASM 通常需要的逻辑单元较少且大小较大。

• 数据库管理员与系统管理员之间通常存在的依赖性将大大减少。例如,添加新数据文件或将磁盘资源从一个磁盘组移至另一磁盘组时不再需要系统管理员干预。

• 手动执行维护任务时可能发生的错误将大大减少。例如,使用常规文件系统时,新建数据文件时可能不慎违反了文件命名惯例,导致数据库的其余部分不支持该文件。

 

ASM 实例

ASM 实例是ASM 的进程和内存组件的组合。

ASM介绍及管理-2

每次启动ASM 或数据库时,都会分配名为系统全局区(SGA) 的共享内存区域并启动Oracle ASM 或数据库后台进程。

后台进程和SGA 的组合称为Oracle ASM 实例或Oracle DB 实例。

ASM 实例中的SGA 与数据库实例中的SGA 在内存分配和使用方面是不同的。

 

ASM 实例中的SGA 分为四个主要区域,如下所示:

• 共享池:用于元数据信息

• 大型池:用于并行操作

• ASM 高速缓存:用于在重新平衡操作期间读取和写入块

• 空闲内存:可用的未分配内存

 

ASM 的建议最低内存量为256 MB。ASM 实例默认启用自动内存管理,该功能将动态优化各个SGA 内存组件的大小。

ASM 实例所需的内存量将取决于ASM 管理的磁盘空间量。

ASM 实例的第二部分是后台进程。ASM 实例可以具有许多后台进程;并不是所有进程始终都会出现。

 

ASM 功能的后台进程分为必需和可选两种。其中一些进程如下所示:

• ARCn:归档进程

• CKPT:检查点进程

• DBWn:数据库写进程

• DIAG:诊断进程

• Jnnn:作业队列进程

• LGWR:日志写进程

• PMON:进程监视器进程

• PSP0:进程衍生进程

• QMNn:队列监视器进程

• RECO:恢复器进程

• SMON:系统监视器进程

• VKTM:虚拟计时器进程

• MMAN:内存管理器进程

以上进程列表不是完整列表。对于ASM 实例,这些进程并不总是执行它们在数据库实例中执行的任务。

例如,数据库实例中的LGWR进程负责将更改向量从SGA 的日志缓冲区部分复制到磁盘上的联机重做日志。

ASM 实例的SGA 中不包含日志缓冲区,该实例也不使用联机重做日志。

ASM 实例中的LGWR进程将事件记录信息复制到ASM 磁盘组。

如果ASM 是以集群方式建立的,则将在ASM 实例中运行与集群管理相关的附加进程。

其中一些进程如下所示:

• LMON:全局入队服务监视器进程

• LMDn:全局入队服务守护程序

• LMSn:全局高速缓存服务进程

• LCKn:锁定进程

 

ASM 组件:ASM 实例 - 主要进程

ASM 实例的主要进程负责与ASM 相关的活动。

ASM介绍及管理-3

 

ASM 实例使用专用的后台进程完成其大部分功能。

RBAL进程在自动存储管理实例中协调磁盘组的重新平衡活动。它负责对自动存储管理磁盘执行全局打开操作。

ARBn进程在自动存储管理实例中执行实际的重新平衡数据区移动。可能同时存在多个这样的进程,这些进程名为ARB0、ARB1等等。

GMON进程维护ASM 磁盘组中的磁盘成员资格。在向脱机磁盘写入失败后,MARK进程将ASM 分配单元标记为过时。

Onnn进程表示客户机/服务器连接的服务器端。启动实例时将出现这些进程,之后它们将消失。

它们形成与ASM 实例的一组连接,用于交换消息,仅在需要时才出现。

PZ9n进程表示一个或多个并行从属进程,当ASM 同时在多台计算机上以集群配置运行时,可以使用该进程提取数据。

 

ASM 实例初始化参数

 

INSTANCE_TYPE = ASM

ASM_POWER_LIMIT = 1

ASM_DISKSTRING = '/dev/sda1','/dev/sdb*'

ASM_DISKGROUPS = DATA2, FRA

ASM_PREFERRED_READ_FAILURE_GROUPS = DATA.FailGroup2

DIAGNOSTIC_DEST = /u01/app/oracle

LARGE_POOL_SIZE = 12M

REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE

 

ASM 实例由参数文件控制,其方式与常规数据库实例相同。通常设置的参数包括:

• INSTANCE_TYPE应该设置且必须为ASM,表示ASM 实例,标识要启动的实例是ASM,而不是数据库实例。这是唯一一个必须定义的参数。对于数据库实例,该参数值设置为RDBMS。

• ASM_POWER_LIMIT:控制重新平衡操作的速度即指定磁盘rebalance的程度。值的范围从1 到11,11 表示最快。如果省略,该值默认为1。指定的级别越高,则rebalance的操作就会越快被完成,当然这也意味着这个时间段内将占用更多的资源,指定级别较低的话,随人rebalance操作会耗时更久,但对当前系统的IO及负载影响会更少,这需要根据实际情况衡量。另外,这个参数指定的只是一个默认值,在操作过程中,即可以随时动态更改,也可以在语句级命令行时指定power,覆盖该默认值。

修改ASM实例初始化参数文件的命令规则与数据库初始化参数完全相同,比如说:

SQL> alter system set asm_power_limit=5;

System altered.

• ASM_DISKSTRING是一个与操作系统相关的值,ASM 使用它来限制搜索时考虑的磁盘集即是设置ASM启动时检查的磁盘,该选项可以同时指定多个值,并且支持通配符。比如只检查/DEV/SD*。默认值为空字符串,为空的话,表示ASM将查找系统中所有ASM拥有读写权限的设备。这在大多数情况下就足够了。如上所示的约束性更强的值可以减少ASM 执行搜索所需的时间,从而提高磁盘组装载次数。

• ASM_DISKGROUPS:是ASM 实例启动时或使用ALTER DISKGROUP ALL MOUNT命令时,ASM 实例要装载的磁盘组的名称列表。如果为空的话,那么实际就仅仅启动到nomount状态。如果使用SPFILE的话,该参数一般不需要手动修改,ASM能够自动更新该初始化参数中的值。

Oracle Restart 会装载列为相关磁盘组的磁盘组,即使这些磁盘组未与ASM_DISKGROUPS参数列在一起也是如此。该参数没有默认值。

• ASM_PREFERRED_READ_FAILURE_GROUPS指定包含首选读取磁盘的故障组。对于包含数据的镜像副本且有一个副本非常接近于服务器的扩展或延伸集群数据库,该参数非常有用。

• DIAGNOSTIC_DEST指定自动诊断资料档案库(ADR) 主目录的位置。此目录下有跟踪文件、预警日志、核心文件和意外事件文件。此参数的默认值由ORACLE_BASE的值派生。

• LARGE_POOL_SIZE指定大型池分配堆的大小(以字节表示)。大型池分配堆用于共享服务器系统中的会话内存,供消息缓冲区的并行执行和磁盘I/O 缓冲区的备份进程使用。ASM 实例使用自动内存管理,所以此参数用作大型池不能低于的最小大小。

• REMOTE_LOGIN_PASSWORDFILE指定Oracle 软件是否检查口令文件。默认值为EXCLUSIVE。

上面列出的八个参数是需要为ASM 实例创建的唯一几个非默认参数。ASM 实例与数据库实例不同,因为并不是所有的数据库参数都对ASM 实例有效。在全部344 个数据库实例参数中,大约有74 个参数可以用于ASM 实例。对于上面未列出的其它参数,虽然其默认值对于大多数安装来说应该已经足够了,但也可以根据需要进行设置。

注:ASM 实例默认启用自动内存管理,即使未明确设置MEMORY_TARGET参数也是如此。

该参数是全面ASM 内存管理唯一需要设置的参数。Oracle Corporation 强烈建议对ASM 实例使用自动内存管理。

 

数据库实例与ASM 之间的交互

ASM介绍及管理-4

文件创建过程可以很好地说明数据库实例与ASM 之间发生的交互。文件创建过程如下所示:

1. 数据库请求创建文件。

2. ASM 前台进程创建一个持续操作目录(COD) 条目并在磁盘组中为新的文件分配空间。

3. ASMB 数据库进程接收新文件的区映射。

4. 现在文件处于打开状态,数据库进程直接初始化该文件。

5. 初始化后,数据库进程请求提交文件创建。这会导致ASM 前台进程清除COD 条目并将文件标记为已创建。

6. 文件提交确认会隐式关闭该文件。将来发生I/O 时,数据库实例需要重新打开该文件。

 

此示例强调了关于ASM 体系结构的重要两点:

• 数据库实例和ASM 实例协同工作。数据库实例必须与ASM 交互,以便将数据库文件映射到ASM 区。

数据库实例还接收与ASM 操作(例如磁盘组重新平衡)相关的持续消息流,这类操作可能锁定或移动ASM 区。

• 数据库I/O 不通过ASM 实例来传输。实际上,数据库直接根据ASM 文件执行I/O 操作,如步骤4 所示。

 

ASM 实例:动态性能视图

对于任何实例而言,其主要功能之一就是存储基于内存的元数据表。这些表以前缀X$开头并且通常不进行记录。

以前缀V$开头的一系列动态性能视图用于以定制形式显示X$内存表中包含的数据。这类信息以只读方式提供,仅具有权限的管理员可以访问。

使用SQL 语言从ASM 检索这类信息。

ASM 实例托管基于内存的元数据表,这些表通过动态性能视图呈现。

• ASM 实用程序使用SQL 语言访问这些表来检索仅含元数据的信息

• 包含许多专用的ASM 相关视图,例如:

 

sys@mesdbbackup> select * from dict where table_name like 'V$ASM_%';

TABLE_NAME                     COMMENTS

------------------------------ --------------------------------------------------

V$ASM_ACFSSNAPSHOTS            Synonym for V_$ASM_ACFSSNAPSHOTS

V$ASM_ACFSVOLUMES              Synonym for V_$ASM_ACFSVOLUMES

V$ASM_ACFS_ENCRYPTION_INFO     Synonym for V_$ASM_ACFS_ENCRYPTION_INFO

V$ASM_ACFS_SECURITY_INFO       Synonym for V_$ASM_ACFS_SECURITY_INFO

V$ASM_ALIAS                    Synonym for V_$ASM_ALIAS--记录文件别名信息

V$ASM_ATTRIBUTE                Synonym for V_$ASM_ATTRIBUTE

V$ASM_CLIENT                   Synonym for V_$ASM_CLIENT--返回当前连接的客户端实例信息

V$ASM_DISK                     Synonym for V_$ASM_DISK---V$ASM_DISK*相关视图中记录的是ASM管理的磁盘及磁盘组信息

V$ASM_DISKGROUP                Synonym for V_$ASM_DISKGROUP

V$ASM_DISKGROUP_STAT           Synonym for V_$ASM_DISKGROUP_STAT

V$ASM_DISK_IOSTAT              Synonym for V_$ASM_DISK_IOSTAT

V$ASM_DISK_STAT                Synonym for V_$ASM_DISK_STAT

V$ASM_FILE                     Synonym for V_$ASM_FILE

V$ASM_FILESYSTEM               Synonym for V_$ASM_FILESYSTEM

V$ASM_OPERATION                Synonym for V_$ASM_OPERATION--记录当前磁盘的操作信息

V$ASM_TEMPLATE                 Synonym for V_$ASM_TEMPLATE

V$ASM_USER                     Synonym for V_$ASM_USER

V$ASM_USERGROUP                Synonym for V_$ASM_USERGROUP

V$ASM_USERGROUP_MEMBER         Synonym for V_$ASM_USERGROUP_MEMBER

V$ASM_VOLUME                   Synonym for V_$ASM_VOLUME

V$ASM_VOLUME_STAT              Synonym for V_$ASM_VOLUME_STAT

21 rows selected.

如下:

sys@mesdbbackup> select GROUP_NUMBER ,NAME ,STATE,TYPE  from v$asm_diskgroup;

GROUP_NUMBER NAME                           STATE       TYPE

------------ ------------------------------ ----------- ------

           1 DATA                           CONNECTED   NORMAL

           2 RECOVERY                       MOUNTED     NORMAL

sys@mesdbbackup> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,STATE from v$asm_disk;

GROUP_NUMBER DISK_NUMBER NAME                           PATH            STATE

------------ ----------- ------------------------------ --------------- --------

           2           0 RECOVERY_0000                  /dev/asm-diskd  NORMAL

           2           1 RECOVERY_0001                  /dev/asm-diske  NORMAL

           1           1 DATA_0001                      /dev/asm-diskc  NORMAL

           1           0 DATA_0000                      /dev/asm-diskb  NORMAL

上面列出了包含ASM 相关元数据的最常用动态性能视图。还有数百个其它动态性能视图,但是其中大多数视图都是空的,因为它们需要数据库实例装载数据库控制文件。ASM 实例不装载数据库控制文件。

 

ASM 系统权限

• ASM 实例没有数据字典,所以连接ASM 只能使用下列系统权限。

ASM介绍及管理-5

ASM 实例没有数据字典,所以连接ASM 实例只能使用以下三种系统权限之一:SYSASM、SYSDBA或 SYSOPER。

下面的列表讲述了这些ASM 系统权限。

• SYSASM:该权限提供对ASM 实例的全部管理权限。

• SYSDBA:该权限授予对ASM 中存储的数据的访问权限,在当前版本中还授予SYSASM管理权限。

• SYSOPER:该权限授予使用一组非破坏性ALTER DISKGROUP命令以及启动和停止ASM 实例的权限。不允许使用CREATE DISKGROUP等其它命令。

 

安装ASM 时,使用操作系统组对 SYSASM、SYSDBA和 SYSOPER权限进行验证。

Oracle Universal Installer (OUI) 实用程序将这些组分别称为OSASM、OSDBA和 OSOPER组,即OSASM组是授予了 SYSASM权限的操作系统组。

OSASM、OSDBA和 OSOPER组值的建议名称分别为 asmadmin、asmdba和 asmoper。

因此,SYSASM是数据库使用的名称,OSASM是OUI 实用程序使用的名称,而 asmadmin是操作系统使用的名称。它们都是指同一组用户。

第一次创建ASM 实例时,只定义sys和 asmsnmp这两个ASM 用户。

 创建SYS用户时,会自动为其分配SYSASM权限。

使用Oracle Enterprise Manager 管理ASM 用户

Oracle Enterprise Manager 允许你管理通过远程连接(使用口令文件验证)访问ASM 的用户。这些用户是专门为ASM 实例保留的。

仅当你作为SYSASM用户连接时才具有此功能。如果你作为SYSDBA或SYSOPER用户连接,该功能将隐藏。

• 单击“Creat(创建)”按钮时将显示“Create User(创建用户)”页。

• 单击“Edit(编辑)”按钮时将显示“Edit User(编辑用户)”页。

• 通过单击“Delete(删除)”按钮可以删除创建的用户。

注:要以SYSASM角色登录ASM,请单击该页顶部的“Preferences(首选项)”链接,然后单击“Preferred Credentials(首选×××明)”链接。此时你将在目标类型列表中看到ASM。单击ASM 目标类型旁边的“Set Credentials(设置×××明)”图标,定义具有SYSASM权限的帐户和口令。你需要从Database Control 中注销并再次登录,更改才会生效。

  • 启动和停止ASM 实例使用SQL*Plus

使用SQL*Plus 启动和停止ASM 实例与启动和停止数据库实例的方式相似。

$ . oraenv

ORACLE_SID = [orcl] ? +ASM

The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is 

/u01/app/oracle

$ sqlplus / AS SYSASM

SQL*Plus: Release 11.2.0.1.0 - Production on Wed Jul 8 20:46:46 2009

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

Connected to an idle instance.

SQL> startup

ASM instance started

Total System Global Area 284565504 bytes

Fixed Size 1336028 bytes

Variable Size 258063652 bytes

ASM Cache 25165824 bytes

ASM diskgroups mounted

ASM diskgroups volume enabled

SQL> shutdown abort

 

SQL> select name,state from v$asm_diskgroup;

NAME                           STATE

------------------------------ -----------

DATA                           MOUNTED

RECOVERY                       MOUNTED

SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS

---------------- ------------

+ASM             STARTED

在SQL*Plus 中使用STARTUP命令启动ASM 实例,其方式与启动Oracle DB 实例的方式相似。启动ASM 实例时,请注意以下几点:

• 要使用SQL*Plus 连接ASM 实例,请将 ORACLE_SID环境变量设置为ASM SID。单实例数据的默认ASM SID 为 +ASM,Oracle RAC 节点的默认ASM SID 是+ASMnode_number,其中node_number是节点的编号。oraenv脚本将设置ORACLE_BASE、ORACLE_SID、ORACLE_HOME和 PATH变量。

• 初始化参数文件必须包含下面的条目:

INSTANCE_TYPE = ASM 

该参数指示正在启动ASM 实例,而不是数据库实例。

• 运行STARTUP命令时,该命令尝试装载初始化参数ASM_DISKGROUPS指定的磁盘组,而不是尝试装载和打开某个数据库。如果尚未为 ASM_DISKGROUPS输入值,稍后可以通过ALTER DISKGROUP...MOUNT命令装载磁盘组。

下面的列表讲述了与ASM 相关的 STARTUP命令参数。

• FORCE:在重新启动ASM 实例之前向它发出SHUTDOWN ABORT。

• MOUNT或 OPEN:装载ASM_DISKGROUPS初始化参数中指定的磁盘组。这是未指定命令参数时的默认值。

• NOMOUNT:启动ASM 实例而不装载任何磁盘组。

• RESTRICT:在受限模式下启动实例。RESTRICT子句可以与 MOUNT、NOMOUNT和OPEN子句组合使用。

在受限模式下,数据库实例不能使用磁盘组。即,数据库无法打开磁盘组中的文件。

另外,如果磁盘组是由某个实例在受限模式下装载的,则该磁盘组无法由集群中的任何其它实例装载。通过受限模式,你可以在磁盘组上执行维护任务,而不会受到客户机的干扰。在磁盘组处于受限模式下时执行重新平衡操作,就不再需要在集群环境中的ASM 实例之间传递锁定和取消锁定区映射消息。这样可以提高重新平衡操作的整体吞吐量。在维护期间结束时,你必须显式卸载该磁盘组并在正常模式下重新装载该磁盘组。

在SQL*Plus 中运行SHUTDOWN命令时将启动ASM 关闭进程。在运行此命令之前,请确保已设置ORACLE_SID和 ORACLE_HOME环境变量,从而你可以连接到ASM 实例。

Oracle 强烈建议你在尝试关闭ASM 实例之前关闭使用该ASM 实例的所有数据库实例。

下面的列表讲述了与ASM 相关的 SHUTDOWN命令参数。

• NORMAL:ASM 在卸载所有磁盘组并关闭ASM 实例之前,将等待任何正在进行的SQL 完成执行。在关闭实例之前,ASM 将等待所有当前连接的用户从该实例断开。如果任何数据库实例与ASM 实例连接,则 SHUTDOWN命令将返回错误并保持ASM 实例继续运行。NORMAL是默认关闭模式。

• IMMEDIATE或 TRANSACTIONAL:ASM 在卸载所有磁盘组并关闭ASM 实例之前,将等待任何正在进行的SQL 完成执行。ASM 不等待当前与实例连接的用户断开连接。如果任何数据库实例与ASM 实例连接,则 SHUTDOWN命令将返回错误并保持ASM 实例继续运行。

• ABORT:ASM 实例立即关闭,而不按顺序卸载磁盘组。这将导致下次启动ASM 时进行恢复操作。如果有任何数据库实例与ASM 实例连接,则该数据库实例也将中止。

注:有连接的RDBMS 实例时,不应用NORMAL、IMMEDIATE和 TRANSACTIONAL形式的关闭,而将返回下面的错误:

SQL> shutdown

ORA-15097: cannot SHUTDOWN ASM instance with connected client (process 14372)

ASM是依赖于CSS守护进程的,因此在启动ASM实例前要确保css守护进程已经启动  。  CSS(Cluster Synchronization Services) 守护进程用来维持ASM 及客户端数据库实例间的一致性同步,如果是通过dbca建库的话,那么CSS守护进程默认即会启动(跟随系统reboot)。

启动和停止ASM 实例使用srvctl

可以使用Server Control 实用程序(srvctl) 启动和停止ASM 实例。

$ . oraenv

ORACLE_SID = [orcl] ? +ASM

The Oracle base for 

ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is 

/u01/app/oracle

$ srvctl start asm -o mount

$ srvctl stop asm -f

可以使用Server Control 实用程序(srvctl) 检查ASM 实例的状态。

$ srvctl status asm

ASM is running on edrsr25p1

使用srvctl启动和停止ASM 实例

可以使用Server Control 实用程序(srvctl) 启动和停止ASM 实例以及由Grid Infrastructure 管理的其它资源。srvctl实用程序位于Grid Infrastructure 的ORACLE_HOME/bin位置下和数据库安装的 ORACLE_HOME/bin位置下。管理ASM、

监听程序或Oracle Restart 时,应该使用位于Grid Infrastructure ORACLE_HOME中的srvctl实用程序。

可以下列方式使用 srvctl实用程序来控制ASM:

• 启动ASM 实例。

srvctl start asm [-o ] 

是有效的实例启动选项

(FORCE、MOUNT、OPEN、NOMOUNT或RESTRICT)之一(可选)

• 停止ASM 实例。

srvctl stop asm [-o ] -f 

是有效的实例关闭选项

(NORMAL、IMMEDIATE、TRANSACTIONAL或 ABORT)之一(可选),

–f 是强制

• 报告ASM 实例的状态。

srvctl status asm

启动和停止ASM 实例使用asmcmd

asmcmd实用程序提供了一个访问ASM 的命令行界面,无需使用SQL 语言。

$ . oraenv

ORACLE_SID = [orcl] ? +ASM

The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is 

/u01/app/oracle

$ asmcmd

Connected to an idle instance.

ASMCMD> startup

ASM instance started

Total System Global Area 284565504 bytes

Fixed Size 1336028 bytes

Variable Size 258063652 bytes

ASM Cache 25165824 bytes

ASM diskgroups mounted

ASM diskgroups volume enabled

ASMCMD> shutdown --abort

ASM instance shut down

Connected to an idle instance.

使用asmcmd启动和停止ASM 实例

用于管理的ASM 元数据位于ASM 实例内包含的动态性能视图内。通常通过ASM 实用程序使用SQL 语言来访问这些视图。要求了解SQL 语言增加了掌握ASM 的学习时间,而且SQL 语言培训通常不在系统管理员和存储管理员的学习范围内。asmcmd实用程序提供了一个类似伪Shell 的环境,可以接受UNIX 格式的语法执行常用的ASM 管理任务。

它可以用于管理Oracle ASM 实例、磁盘组、磁盘组的文件访问控制、磁盘组内的文件和目录、磁盘组的模板以及卷。

可以使用 asmcmd实用程序启动和关闭ASM 实例。支持的启动选项包括:

--nomount(在不装载磁盘组的情况下启动ASM 实例)

--restrict(启动ASM 实例并限制数据库使用)

--pfile

(使用定制pfile 启动ASM 实例)

支持的关闭选项包括:

--immediate(立即执行关闭)

--abort(中止所有现有操作)

磁盘组概览

ASM介绍及管理-6

磁盘组是一个或多个磁盘的逻辑分组,ASM 将其作为一个集合来管理。每个磁盘组都包含与自身相关联的元数据。在概念上,ASM 磁盘组类似于典型存储区域网络中的逻辑卷。

从磁盘组内分配文件空间。磁盘组中存储的文件的内容将在该磁盘组的磁盘中平均分布或条带化,以便消除热点并在各磁盘上提供一致的性能。每个ASM 文件都完全包含在一个磁盘组中。但是,一个磁盘组可以包含属于多个数据库的文件,而一个数据库可以使用来自多个磁盘组的不同文件。

磁盘组的关键属性是它的冗余设置。有三种可能的磁盘组冗余设置:

• 外部冗余,其中ASM 不提供任何镜像,磁盘都假设为高度可靠。

• 正常冗余,其中ASM 默认支持双向镜像,从而保证在较不可靠的存储上实现数据完整性。

• 高冗余,其中ASM 默认支持三向镜像,从而更好地保证数据完整性。

ASM 最多支持创建63 个磁盘组;但是,对于大多数安装,你很少会需要很多磁盘组。

 

ASM磁盘组的管理方式比较多,比如DBCA、EM、SQL*PLUS等都可以操作,还有oracle专门提供了ASMCMD命令行方式,像操作文件系统一样来操作磁盘组。

ASM 磁盘

ASM 磁盘:

• 是为ASM 磁盘组预配的存储设备

• 通过正常O/S 接口来访问

• 必须可由ASM 所有者读取和写入

• 必须可由集群中的所有节点访问

• 在不同的节点上可以有不同的O/S 名称或路径

• 可以是:

– 整个物理磁盘或物理磁盘的分区

– 存储阵列中的磁盘或分区

– 逻辑卷(LV) 或逻辑单元(LUN) 

– 网络连接文件(NFS) 

ASM 磁盘组包含一个或多个ASM 磁盘。

ASM 磁盘必须可由集群中所有大,能够提供高效的后续访问

• 允许的AU 大小:

– 1、2、4、8、16、32 或64 MB 节点的ASM 所有者读取和写入。

ASM 磁盘可以是磁盘上的分区,但是Oracle 强烈建议不要与其它应用程序程序共享ASM 使用的物理磁盘。这是因为在应用ASM 条带化和镜像策略时,磁盘组内的各个ASM 磁盘的I/O 性能必须相似且一致,才能获得最佳性能。在ASM 和其它应用程序之间共享设备会难以确保磁盘性能相似且一致。

集群中不同节点上的ASM 磁盘的O/S 设备名称不必相同。ASM 通过读取ASM 磁盘的标头来识别磁盘组的成员。

通常,ASM 磁盘是以存储阵列中的裸LUN 提供给ASM 的。另外,ASM 磁盘还可以是远程NFS 文件器中的文件。

分配单元

ASM 磁盘划分为分配单元(AU):

• 在创建磁盘组时可以配置AU 大小。

• AU 默认大小为1 MB:

– 足够小,能够被数据库缓存;但又足够

– 在超大型数据库(VLDB) 中或使用专门的存储硬件时,较大的AU 可能非常有用

在ASM 磁盘内,空间划分为分配单元(AU)。AU 默认大小是1 MB,该大小足够小,不会变为热点,但又足够大,能够提供高效的后续访问。创建磁盘组时可以设置AU 大小。你无法更改磁盘组的AU 大小。在超大型数据库(VLDB) 中或使用专门的存储硬件时,较大的AU 大小可能会很有用。如果经常访问某个AU,则数据库内核会将其缓存以便实现更高的访问效率。

ASM 文件

ASM 文件:

• 是由AU 组成的ASM 区的集合

– 可变大小的区支持大型文件

• 对数据库内核显示为普通文件

• 文件名以“+”开头

– 例如,

+DATA/orcl/datafile/system.256.689832921

• 可以与可选的文件名别名相关联

– 例如,+DATA/dbfiles/mydb/system01.dbf

• 在磁盘组中的磁盘中平均分布

• 根据磁盘组中定义的策略进行镜像

ASM 呈现一组文件供ASM 的客户机使用。ASM 文件由一组分配单元组成,这些文件对数据库内核显示为普通文件。

每个ASM 文件都具有唯一的系统生成的名称。

 

生成格式为:+diskgroup/dbname/file_type/file_type_tag.file.incarnation ,

• +diskgroup :磁盘组名称;  

• dbname :数据库的DB_UNIQUE_NAME参数值;   

• file_type :创建的文件类型,比如CONTROLFILE/DATAFILE/ONLINELOG/ARCHIVELOG/TEMPFILE/BACKUPSET/FLASHBAC

K等等;   

•  file_type_tag  :文件类型的标签,比如表空间对应的通常为该表空间名称;   

•   file.incarnation  :文件序号+incarnation,用来确保文件的唯一; 

 

sys@mesdbbackup> alter tablespace INVENTORY add datafile '+DATA';

Tablespace altered.

ASMCMD> pwd

+data/test0924/datafile

ASMCMD> ls

INVENTORY.266.829658135

 

示例显示了一个完全限定的ASM 文件名的示例。完全限定的ASM 文件名表示一个层次结构,其开头是加号与磁盘组名称的组合。磁盘组名称后是数据库名称和文件类型。最后的元素由标记名称、文件编号和原型编号组成。可以创建别名(可选),为管理员提供一种更用户友好的方式来引用ASM 文件。

文件使用条带化和镜像所有内容(SAME) 策略在磁盘组的各ASM 磁盘中平均分布。

ASM 本身支持大多数与数据库相关的文件类型,例如数据文件、日志文件、控制文件、

RMAN 备份及其它文件。在Oracle Database 11g发行版2 之前,ASM 仅支持与Oracle DB 相关的文件,无法用于存储和管理ASCII 跟踪文件和预警日志、Oracle 二进制文件、

Oracle 集群注册表(OCR) 和集群表决磁盘。Oracle Database 11g发行版2 提供在ASM 上运行通用文件系统的方式,从而消除了上述限制。

区映射

ASM介绍及管理-7

ASM 通过称为区映射的元数据跟踪文件的分布。区映射是一个表,将文件中的数据区映射到磁盘上的分配单元。

文件区与分配单元之间的关系如下所示。区包含:

• 一个AU 用于前20,000 个区(0-19999) 

•4 个AU 用于接下来的20,000 个区(20000-39999) 

• 16 个AU 用于40,000 以上的区

将可变大小的区与大型分配单元结合使用,可满足非常大的ASM 文件的需要。

条带化粒度

ASM 用于负载平衡的条带化策略与用于等待时间的条带化策略不同:

• 对于负载平衡,粗粒度条带化将多个分配单元连接起来使用。

– 例如:

在ASM 中,条带化主要具有两种用途:

• 在磁盘组的所有磁盘中执行I/O 负载平衡。

• 改善I/O 等待时间。

粗粒度条带化在磁盘组的各磁盘中分布分配单元。这用于为磁盘组提供负载平衡。分配文件时,ASM 会在所有磁盘中平均分布分配单元。有时分布无法非常平均,但是随着时间的流逝,会变得几乎相等。上图显示了一个具有五个分配单元的文件,这些分配单元在条带化之后,分布在一个外部冗余磁盘组的五个磁盘中,该磁盘组共包含八个磁盘。

对于前20,000 个区,区大小等于AU 大小。从第20,001 个区到第40,000 个区,该区组总是一次分配8 个区,区大小等于4 倍AU 大小。如果AU 大小为1 MB,这意味着ASM 文件将一次增大64 MB (8 * 4 * 1 MB)。如果文件采用粗粒度条带化,则它将在8 个区中进行条带化,条带大小为1 AU。条带化始终在AU 级别进行,而不是在区级别。因此,无论文件多大,粗粒度文件的每个AU 都与该文件的前一个AU 所在的磁盘不同。在第40,000 个区之后,仍旧是每次分配8 个区,但区大小等于16 倍AU 大小。

细粒度条带化

细粒度条带化在分配单元组中放置128 KB 条带单元来改善等待时间。

• 磁盘组具有8 个磁盘和外部冗余

• 使用默认的AU 大小:1 MB 

• 第一个1 MB 区在8 个AU 中以128 KB 条带形式写入

ASM介绍及管理-9

细粒度条带化将数据区拆分为128 KB 的块,然后在许多磁盘中分布每个区的负载,从而改善特定类型文件的等待时间。默认情况下,细粒度条带化用于控制文件和联机重做日志文件。

图显示了细粒度条带化的工作原理。在此示例中,新文件的第一个1 MB 区最终占用8 个不同分配单元中的第一个128 KB 块,这8 个分配单元分布在磁盘组的八个磁盘中。因此,1 MB 的读取或写入分布在八个磁盘(而不是一个磁盘)中。

  • 细粒度条带化

示例:

• 磁盘组具有8 个磁盘和外部冗余

• 使用默认的AU 大小:1 MB 

• 下一个1 MB 区以128 KB 条带的形式在相同的8 个分配单元中写入,直到这些分配单元写满

ASM介绍及管理-10

继续前面的示例,空间中的下一个1 MB 区将分布在相同分配单元组的每个单元的第二个128 KB 块中。这种模式将继续,直到第一组分配单元写满,然后分配另一组。

ASM 故障组

• 共享需要容错的一项公用资源的一组磁盘

• 镜像的区副本存储在不同的故障组中

• 存储硬件指示故障组边界

– 分离磁盘控制器的示例:

ASM介绍及管理-11

在磁盘组内,可以将一些磁盘归到故障组中。故障组是存储或数据库管理员指定ASM 镜像操作的硬件边界的一种方式。

例如,可以将连接到一个磁盘控制器的所有磁盘指定为某个公用故障组的磁盘。这样,将在连接到不同控制器的磁盘上镜像文件区。另外,管理员可以配置ASM 来选择默认故障组策略。默认策略是每个磁盘位于自己的故障组中。

你可以使用所需的任何标准将磁盘归到故障组中。故障组可以用于避免单个磁盘、磁盘控制器、I/O 网络组件以及甚至整个存储系统的故障。通常,管理员将分析其存储环境并对故障组进行组织来消除特定故障情况。

由数据库或存储管理员确定其安装的最佳故障组配置。

条带化和镜像示例

一个共含八个磁盘的正常冗余磁盘组,其中的磁盘分布在两个故障组中。

ASM介绍及管理-12

条带化和镜像示例

本页中的图显示了一个正常冗余磁盘组中条带化和镜像的示例。红块表示一个包含五个区的文件,这些区在条带化后,分布在磁盘组(共八个磁盘)的五个磁盘中。蓝块表示文件区的镜像副本。请注意,无论区在各个磁盘和故障组中如何分布,每个区在一个故障组中仅有一个副本。

分配文件时,主区的分配用于保证性能,辅助副本的分配用于保证完整性。因此,默认情况下,所有数据库读取都针对主区进行。

 

ASM如何处理磁盘故障

ASM中的磁盘组可分成两类,普通磁盘组和failure磁盘组,后者又与ASM的荣誉方式有所关联。

普通磁盘组就是标准的存储单元,ASM可以向其可访问的磁盘组中读写数据,failure磁盘组是为了提高数据的高可用性。

ASM中的磁盘荣誉策略分成三类,外部冗余,标准冗余和高度冗余,其中外部冗余与failure磁盘组无关,如果设置了标准冗余和高度冗余,那么该磁盘组就必须拥有failure磁盘组。

标准冗余,ASM要求改磁盘组至少要拥有两个failure磁盘组,即提供双倍镜像保护,对于同一份数据(ASM中镜像单位不是磁盘,也不是块,而是一种AU的单位,该单位大小默认是1M)将有主从两份镜像,并且ASM通过算法来自动确保主、从镜像不会存在于同一份failure 磁盘组,这样就保障了就算整个failure 磁盘组都损坏,数据也不会丢失。至于高度冗余(High Redundancy)就更安全了,它至少需要三个failure 磁盘组,也就是一份AU有一主多从的镜像,理论上将更加安全。

如果磁盘发生损坏,那么损坏的磁盘默认自动offlice并被drop掉,不过该磁盘所在的磁盘组仍将保持MOUNT状态,如果该盘有镜像的话,那么应用不会有影响,镜像盘将自动实现接管--只要不是所有failure磁盘组都损坏掉,否则的话,该磁盘组将自动DISMOUNT。

故障示例

如果磁盘H 发生故障,则将根据正常镜像在正常磁盘上重新创建该磁盘包含的区。

ASM介绍及管理-13

此处扩展了上一页中的示例,假设磁盘H 发生故障,无法再访问其包含的数据。该故障要求恢复故障磁盘上的所有区并将这些区复制到另一磁盘。

区3 和5 的正常副本将复制到同一故障组中另一磁盘的空闲区域。在此示例中,区5 将从磁盘B 复制到磁盘F,区3 将从磁盘C 复制到磁盘G。

磁盘发生故障后的最后一步是ASM 从磁盘组中删除故障磁盘。

删除磁盘基本上会触发相同的过程;不过,在删除磁盘时,要被删除的磁盘上的区首先会复制到可用替代位置。

 

ASM 扩展性 

• 最多支持63个磁盘组;  

•最多支持10000个磁盘;  

•最大支持4pb/磁盘;  

•最大支持40 exabyte/ASM存储;   

•最大支持1百W个文件/磁盘组;   

•外部冗余时单个文件最大35tb,标准冗余时单个文件最大5.8tb,高冗余度时单个文件最大3.9tb。

管理磁盘组

ASM介绍及管理-14

ASM 实例的主要目的是管理磁盘组和保护其数据。ASM 实例还将文件分布传送到数据库实例。这样,数据库实例就可以直接访问磁盘组中存储的文件。

有多个磁盘组管理命令。执行这些命令都需要SYSASM或SYSDBA权限,且必须从ASM 实例发出。

你可以添加新磁盘组。还可以修改现有磁盘组来添加新磁盘、删除现有磁盘以及执行许多其它操作。可以删除现有磁盘组。

创建和删除磁盘组使用SQL*Plus

CREATE DISKGROUP语句,该语句的语法如下: 

CREATE DISKGROUP diskgroup_name 

  [ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ] 

  [ FAILGROUP failgroup_name ] 

  DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ] ...; 

•首先要指定的就是磁盘组名称(diskgroup_name);  

•指定冗余度,有三个选择:HIGH(高度冗余>三路)、NORMAL(标准冗余--双路)和XTERNAL(外

部存储冗余);   

•选择是否指定FAILGROUP(如果选择非external则必须指定);   

•指定该磁盘组中的成员(对应的LUN),在指定成员时一般ASM能够自动检测出磁盘的容量,不过

如果DBA基于某些方面的考虑,希望限制ASM使用的空间的话,也可以在指定成员过程中,顺

便指定大小(只要指定的大小不超出磁盘实际容量),在添加成员时,ASM也会自动检查磁盘头以

确定该磁盘是否被加入到其它的磁盘组中,当发现该盘已加入其它磁盘组的话,你可以通过

FORCE选项来强制修改该盘所属磁盘组。 

$ . oraenv

ORACLE_SID = [orcl] ? +ASM

The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is 

/u01/app/oracle

$ sqlplus / AS SYSASM

SQL*Plus: Release 11.2.0.1.0 - Production on Wed Jul 8 20:46:46 2009

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

..

SQL> CREATE DISKGROUP dgroupA NORMAL REDUNDANCY 

FAILGROUP controller1 DISK 

'/devices/A1' NAME diskA1 SIZE 120G FORCE, 

'/devices/A2', 

FAILGROUP controller2 DISK 

'/devices/B1', 

'/devices/B2'; 

SQL> DROP DISKGROUP dgroupA INCLUDING CONTENTS;

创建和删除磁盘组

假设ASM 磁盘搜索在/dev目录中找到了下列磁盘:A1、A2、B1和B2。另外,假设磁盘A1和A2的磁盘控制器不同于B1和B2的磁盘控制器。第一个示例说明如何配置名为DGROUPA的磁盘组,其包含两个故障组:CONTROLLER1和ONTROLLER2。该示例还对该磁盘组使用默认冗余属性NORMAL REDUNDANCY。你还可以提供磁盘名称和磁盘的大小(可选)。如果你不提供此信息,ASM 会创建默认名称并尝试确定磁盘的大小。如果无法确定大小,将返回错误。FORCE指示指定的磁盘应该添加到指定的磁盘组,即使该磁盘已经格式化为某个ASM 磁盘组的成员。对未格式化为某个ASM 磁盘组的成员的磁盘使用FORCE选项将返回错误。

第二个语句所示,你可以删除磁盘组及其所有文件。为了避免意外删除,如果磁盘组除内部ASM 元数据外还包含任何其它文件,则必须指定INCLUDING CONTENTS选项。必须先装载磁盘组才能将其删除。在确保未打开任何磁盘组文件后,将从磁盘组中删除该组及其所有驱动器。然后,将覆盖每个磁盘的标头来清除ASM 格式信息。

向磁盘组添加磁盘

ALTER DISKGROUP dgroupA ADD DISK

'/dev/sde1' NAME A5,

'/dev/sdf1' NAME A6,

'/dev/sdg1' NAME A7,

'/dev/sdh1' NAME A8;

ALTER DISKGROUP dgroupA ADD DISK '/devices/A*';

磁盘格式化---------->磁盘组重新平衡

向磁盘组添加磁盘

此示例显示如何向磁盘组添加磁盘。可以执行ALTER DISKGROUP ADD DISK命令来添加磁盘。第一个语句向DGROUPA磁盘组添加四个新磁盘。

第二个语句说明搜索字符串的相互影响。请考虑下列配置:

/devices/A1是磁盘组DGROUPA的成员。

/devices/A2是磁盘组DGROUPA的成员。

/devices/A3是磁盘组DGROUPA的成员。

/devices/A4是候选磁盘。

第二个命令将A4添加到DGROUPA磁盘组。该命令将忽略其它磁盘,即使它们与搜索字符串相匹配,因为它们已经是DGROUPA磁盘组的一部分。上图显示当你向磁盘组添加磁盘时,ASM 实例会确保该磁盘是可寻址且可用的。然后会对该磁盘进行格式化和重新平衡。重新平衡过程比较耗费时间,因为该过程会将所有文件的区移至新磁盘。

注:重新平衡不会阻止任何数据库操作。重新平衡过程主要影响系统的I/O 负载。重新平衡的能力越高,对系统施加的I/O 负载越多,可用于数据库I/O 的I/O 带宽也就越少。

 

当发生添加/删除磁盘组中磁盘的操作时,ASM能够自动平衡。对于普通的删除操作(无force选项),被删除的磁盘在该上数据被有效处理前并不会立刻释放,同样,新增磁盘时,在重分配工作完成前,该盘也不会承担I/O负载的工作。要监控后台进行的操作,可以通过V$ASM_OPERATION视图查询。

如果希望ALTER DISKGROUP语句完成所有工作才返回的话,可以在执行时附加REBALANCE WAIT子句,这样该语句就会等待自动平衡的操作,直接所有操作完成才返回结果,当然在等待期间,如果你不想等待,使用CTRL+C终端既可以获得控制权,而平衡的操作不受影响,会在后台继续进行。

其它ALTER命令

从dgroupA删除磁盘:

ALTER DISKGROUP dgroupADROP DISK A5;

在单个命令中添加和删除磁盘:

ALTER DISKGROUP dgroupA 

DROP DISKA6

ADD FAILGROUPcontroller3 DISK '/dev/sdi1'NAME A9;

取消磁盘删除操作:

ALTER DISKGROUP dgroupA UNDROP DISKS;

其它ALTER命令

第一个语句显示如何从DGROUPA磁盘组中删除一个磁盘。

第二个语句显示如何在单个命令中添加和删除磁盘。这种方式的一大优点就是在该命令完成后才开始重新平衡操作。

第三个语句显示如何取消磁盘删除操作。

当删除磁盘时,ASM发现平衡不过来时(比如剩下的磁盘空间不足以存放所有数据时),删除操作也会失败,这种情况要么先删数据,要么取消删除的操作。

只要删除操作还没有真正完成,就可以取消删除磁盘的操作,

UNDROP命令仅对磁盘的暂挂删除操作起作用;它对于已经完成的删除操作没有影响。

如果需要,可以使用下面的语句对DGROUPB磁盘组进行重新平衡:

ALTER DISKGROUP dgroupB REBALANCE POWER 5; 

此命令通常是不需要的,因为在添加、删除磁盘或调整磁盘大小时会自动执行该操作。

但是如果你希望使用POWER子句覆盖由初始化参数ASM_POWER_LIMIT定义的默认速度,此命令非常有用。通过重新输入具有新级别的命令,可以更改正在进行的重新平衡操作的能力级别。能力级别为零会导致重新平衡操作中断,直到隐式或显式重新调用该命令。

下面的语句可以卸载DGROUPA:

ALTER DISKGROUP dgroupA DISMOUNT; 

通过MOUNT和DISMOUNT选项,你可以使一个或多个磁盘组对数据库实例可用或不可用。

在支持单实例的集群ASM 环境中,当该实例故障转移到另一节点时,手动卸载和装载功能非常有用。

不管你是加还是山磁盘组中的磁盘,ASM都能自动进行平衡,确保该磁盘组中的每块盘存储的数据量平均,以实现最优化的IO性能,并且这一过程不会对数据造成影响。

手动平衡磁盘组

一般情况下ASM都会自动对其下的磁盘组进行平衡,不过ORACLE也提供了手动平衡磁盘组的方式,通过alter diskgroup ... power 语句。前面提到过磁盘组的平衡度有1到11多个级别,默认是按照ASM_POWER_LIMIT初始化参数中设置的值,手动平衡的话,设置的平衡度可以与初始化参数中并不相同,例如,设置磁盘组平衡度为6,语句如下:

SQL> alter diskgroup DATA rebalance power 6;

Diskgroup altered.

  手动平衡磁盘组可能涉及大量的工作,该操作可能费时较久,因此DBA在执行该语句时,一定要注意该操作对IO 性能的影响。 

 另外再次强调,上述语句将很快返回diskgroup altered的提示,但这并不表示操作真正完成,它只是反馈语句提交而已,查看磁盘后台的操作,可以通过v$asm_operator视图,或者在语句执行时增加wait子句,这样ASM将会等到操作真正完成时,才返回提示信息。 

 

管理目录

ASM 磁盘组中文件和目录的管理自动化水平相当高,应该说基本上完全不需要DBA参与,当然,也是可以手动修改的。 

  创建新目录: 

SQL> alter diskgroup asmdisk2 add directory '+ASMDISK2/JSS1'; 

Diskgroup altered. 

  修改目录名: 

SQL> alter diskgroup asmdisk2 rename directory '+ASMDISK2/JSS1'   to '+ASMDISK2/JSS2'; 

Diskgroup altered. 

  删除目录名: 

SQL> alter diskgroup asmdisk2 drop directory '+ASMDISK2/JSS2'; 

Diskgroup altered. 

  实际上,ASM中目录和文件的管理,也可以通过ASMCMD命令行方式进行,该命令行进入之后,是一个类似文件系统的管理界面,ORACLE提供了一些最基础的,如cd、ls、mkdir、rm等等几个有限的操作命令。

管理别名

当系统自动产生的名称太过复杂不怎么好记,DBA可以通过别名,为它创建一个简单化的名称,而又不会对其现有名称造成任何影响。ASM中创建别名是通过alter diskgroup的alias子句实现,支持增加/修改/删除等多项操作。V$ASM_ALIAS视图中可以查询到当前实例中创建的别名。

  例如,增加别名: 

SQL> alter diskgroup asmdisk2 add alias '+ASMDISK2/repdb/datafile/temp01.dbf' for '+ASMDISK2/repdb/TEMPFILE/TEMP.267.714576831'; 

Diskgroup altered. 

  修改别名: 

SQL> alter diskgroup asmdisk2 rename alias '+ASMDISK2/repdb/datafile/temp01.dbf' to '+ASMDISK2/repdb/TEMPFILE/temp01.dbf'; 

Diskgroup altered. 

  删除别名: 

SQL> alter diskgroup asmdisk2 drop alias '+ASMDISK2/repdb/TEMPFILE/temp01.dbf'; 

Diskgroup altered. 

 不管是添加/删除或是修改别名,对原有文件路径均不会有影响。 

使用Oracle Enterprise Manager 管理ASM

Oracle Enterprise Manager (EM) 是Oracle 的管理工具系列,管理对象涵盖数据库、中间件、应用程序、网络、IT 基础结构及其它。Oracle Enterprise Manager 是一个基于浏览器的环境,为常见ASM 管理任务提供了一个点击式替代方案。

ASM 磁盘组兼容性

• 每个磁盘组的兼容性都可以分别控制:

– ASM 兼容性控制磁盘上ASM 元数据结构。

– RDBMS 兼容性控制最低使用者客户机级别。

– ADVM 兼容性确定磁盘组是否可以包含Oracle ASM 卷。

• 设置磁盘组兼容性的操作是不可逆的。

ASM介绍及管理-15

适用于ASM 磁盘组的兼容性有三种:涉及描述磁盘组的持久性数据结构,客户机(磁盘组的使用者)的功能,以及能否在磁盘组中包含卷。这些属性分别称为“ASM 兼容性”、“RDBMS 兼容性”和“ADVM 兼容性”。每个磁盘组的兼容性都可以独立控制。这是支持包含Oracle Database 10g和Oracle Database 11g磁盘组的异构环境所必需的。

这三种兼容性设置是每个ASM 磁盘组的属性:

•RDBMS 兼容性是指RDBMS 实例的最低兼容版本,此设置将允许该实例装载磁盘组。

该兼容性确定了ASM 实例与数据库(RDBMS) 实例间交换消息的格式。ASM 实例可以支持以不同兼容性设置运行的不同RDBMS 客户机。每个实例的数据库兼容版本设置必须高于或等于该数据库使用的所有磁盘组的RDBMS 兼容性。数据库实例与ASM 实例通常在不同的Oracle 主目录中运行。这意味着数据库实例可以运行与ASM 实例不同的软件版本。数据库实例第一次连接到ASM 实例时,系统会协定这两个实例都支持的最高版本。

数据库的兼容性参数设置、数据库的软件版本以及磁盘组的RDBMS 兼容性设置确定了数据库实例能否装载给定的磁盘组。

•ASM 兼容性是指控制磁盘上ASM 元数据的数据结构格式的持久性兼容性设置。

磁盘组的ASM 兼容性级别必须始终高于或等于同一磁盘组的RDBMS 兼容性级别。

ASM 兼容性只与ASM 元数据的格式相关。文件内容的格式取决于数据库实例。例如,可以将某个磁盘组的ASM 兼容性设置为11.0,而将该磁盘组的RDBMS 兼容性设置为10.1。这意味着该磁盘组只能由软件版本为11.0 或更高的ASM 软件管理,而软件版本高于或等于10.1 的任何数据库客户机都可以使用该磁盘组。

• ADVM 兼容性属性确定磁盘组能否包含Oracle ASM 卷。该值必须设置为11.2 或更高。设置该属性前,必须确保COMPATIBLE.ASM的值为11.2 或更高。此外,还必须加载ADVM 卷驱动程序。

仅当持久性磁盘结构或消息传送协议发生更改时,才需要提高磁盘组的兼容性。但是,提高磁盘组兼容性是一个不可逆的操作。可以使用CREATE DISKGROUP命令或ALTER DISKGROUP命令来设置磁盘组兼容性。

注:除了磁盘组兼容性,兼容参数(数据库兼容版本)确定了启用的功能;该参数适用于数据库或ASM 实例,具体取决于instance_type参数。例如,将该参数设置为10.1 将禁止使用Oracle Database 11g中引入的任何新功能(磁盘联机/脱机、可变区等)。

ASM 磁盘组属性

ASM介绍及管理-16

CREATE DISKGROUP DATA2 NORMAL REDUNDANCY 

DISK '/dev/sda1','/dev/sdb1'

ATTRIBUTE 'compatible.asm'='11.2';

每当创建或更改ASM 磁盘组时,都可以使用CREATE DISKGROUP和ALTER DISKGROUP命令新增的ATTRIBUTE子句更改其属性。图中的表简要概述了这些属性:

•ASM 允许使用在创建磁盘组时指定的不同分配单元(AU) 大小。AU 大小可以是1、2、4、8、16、32 或64 MB。

•RDBMS 兼容性:有关详细信息,请参阅“ASM 磁盘组兼容性”一节。

•ASM 兼容性:有关详细信息,请参阅“ASM 磁盘组兼容性”一节。

• 可以用分钟(M)、小时(H) 或天(D) 为单位指定DISK_REPAIR_TIME。如果省略单位,则使用默认值H。如果省略此属性,则使用默认值3.6H。可以使用ALTER DISKGROUP ... DISK OFFLINE语句覆盖此属性。

• 还可以为指定的模板指定冗余属性。

• 还可以为指定的模板指定条带化属性。

注:对于每个已定义的磁盘组,可以通过V$ASM_ATTRIBUTE固定视图查看所有已定义的属性。

使用Oracle Enterprise Manager 编辑磁盘组属性

Oracle Enterprise Manager 提供了一种简便方式用于存储和检索与磁盘组相关的环境设置。

在“Create Disk Group(创建磁盘组)”页和“Edit Advanced Attributes for Disk Group(编辑磁盘组的高级属性)”页中都可以设置兼容属性。仅“Edit Advanced Attributes for Disk Group(编辑磁盘组的高级属性)”页中添加了disk_repair_time属性。

注:对于低于11g的ASM 实例,默认ASM 兼容性和客户机兼容性都为10.1。对于11gASM 实例,默认ASM 兼容性为11.2,数据库兼容性为10.1。

检索ASM 元数据

• 使用SQL*Plus:

SQL> SELECT f.type, f.redundancy, f.striped, f.modification_date, 

a.system_created, a.name FROM v$asm_alias a, v$asm_file f WHERE 

a.file_number = f.file_number and a.group_number = f.group_number 

and type='DATAFILE';

TYPE REDUND STRIPE MODIFICAT S NAME

-------- ------ ------ --------- - ---------------------DATAFILE MIRROR COARSE 08-JUL-09 Y SYSTEM.256.689832921

DATAFILE MIRROR COARSE 08-JUL-09 Y SYSAUX.257.689832923

..

• 使用asmcmd:

ASMCMD> ls -l +DATA/orcl/datafile

Type Redund Striped Time Sys Name

DATAFILE MIRROR COARSE JUL 08 21:00:00 Y SYSTEM.256.689832921

DATAFILE MIRROR COARSE JUL 08 21:00:00 Y SYSAUX.257.689832923

..

检索ASM 元数据

ASM 实例托管基于内存的元数据表,这些表通过动态性能视图呈现。可以使用SQL*Plus、asmcmd或Oracle Enterprise Manager 查询该数据。

使用SQL*Plus 需要具有SQL 语言知识,可能要联接多个动态性能视图来检索相关信息。

第一个示例显示v$asm_file和v$asm_alias之间建立了一个联接,以便显示关于数据库的数据文件的元数据。如果针对ASM 实例执行此查询,根据语法的定义方式,将检索多个数据库的数据文件。需要使用附加过滤条件才能将输出限定为单个数据库。

asmcmd实用程序的优点在于,不需要SQL 语言知识就能连接到ASM 实例并检索元数据。

它使用与UNIX 表示法类似的样式。此幻灯片上的第二个示例使用asmcmd命令来检索SQL 示例中的元数据。此示例的另一个优点是输出限制为单个数据库的数据文件,因为列出的路径包含数据库名称orcl和文件类型datafile。因此,对于asmcmd中显示的目录,需要使用WHERE子句设置SQL 过滤条件才能给出相同结果。

注:在Oracle Enterprise Manager Database Control 中,只需在各个ASM Web 页中浏览就能查看大多数ASM 元数据。

ASM 快速镜像重新同步概览

ASM介绍及管理-17

ASM 快速镜像重新同步可以显著减少重新同步临时故障磁盘所需的时间。如果某个磁盘因临时故障而脱机,ASM 将跟踪在中断期间发生修改的区。临时故障被修复后,ASM 可以快速地仅重新同步在中断期间受影响的ASM 磁盘区。

此功能假设受影响的ASM 磁盘的内容未被破坏或修改。

某个ASM 磁盘路径出现故障时,如果您已设置了相应磁盘组的DISK_REPAIR_TIME属性,则ASM 磁盘会脱机,但不会被删除。此属性的设置确定了ASM 可容忍的磁盘中断持续时间;如果中断在此时间范围内,则修复完成后仍可重新同步。注:跟踪机制对每个修改的分配单元使用1 位。这样可确保跟踪机制非常高效。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论