ORACLE10g版本推出时,为了简化RAC中存储端的配置,ORACLE新推出了ASM(Automatic Storage Management --自动存储管理)特性,该特性拥有易管理,高自动性,并且,拥有号称超越裸设备IO性能。升级到11gR2版本后,又被正名为传说中的ASMFS,这也说明了ORACLE对这一特性的重视程度。

  因此从今天起,三思决定花个三二分钟时间,跟大学一块学学关于ASM的那点儿事儿,另注,本文操作的数据库版本为10gR2。

1、About ASM 实例

  ASM 实例与 ORACLE 实例差不多,都是 由 sga 和一堆后台进程组成,从功能上来看,区别在于oracle实例管理的是数据库,而asm实例只是管理asm盘阵。

  通过Oracle EM或DBCA都可以对asm进行一些配置,不过三思觉着管理asm括弧实例的最佳工具仍是sql*plus,在进入sql*plus前也需要设置ORACLE_SID的环境变量,该环境变量通常是+ASM[node#] 。

  ASM 实例没有数据字典之类的东东存储用户系统,因此最常见的连接认证方式就是操作系统认证as sysdba进入(OSDBA组的用户)。如果是通过远程连接的话( 比如远程通过tnsnames或OEM管理),也可以使用密钥文件进行验证,该密钥文件直数据库的密钥文件在命名规则及使用规则上完全一模一样。如果使用dbca建库的话,默认就会创建asm的密钥文件,当然也可以自行手动通过orapwd命令进行创建,与数据库的密钥文件有所不同的是,asm 的密钥文件对应的用户只有一个----sys。

    提示:什么是 ASMLib !

    即ASM support Library,是由ORACLE提供的简化管理操作系统管理的API 。

1.1、启动 / 关闭 ASM 实例

  ASM 实例与DB实例高度相似,启动和停止实例的命令也一模一样,就启动来说,也同样拥有 NOMOUNT/MOUNT/OPEN /FORCE 几种状态。

  • NOMOUNT :仅启动实例;
  • MOUNT 、OPEN:启动实例并加载磁盘,注意加载的是磁盘组(如果当前未创建或配置任何磁盘组,则提示敬告信息),OPEN选项对于ASM实例无意义,等同于MOUNT。
  • FORCE :相当于先执行shutdown abort,然后再startup。

  演示如下(注意别忘了先设置操作系统环境变量ORACLE_SID),先启动到NOMOUNT:

    [oracle@jssdbn1 ~]$ export ORACLE_SID=+ASM1

    [oracle@jssdbn1 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 10.2.0.4.0 - Production on Wed May 19 08:34:22 2010

    Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

    Connected to an idle instance.

    SQL> startup nomount

    ASM instance started

    Total System Global Area  130023424 bytes

    Fixed Size                  2082208 bytes

    Variable Size             102775392 bytes

    ASM Cache                  25165824 bytes

    SQL> select name,state from v$asm_diskgroup;

    NAME                           STATE

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

    ASMDISK1                       DISMOUNTED

    ASMDISK2                       DISMOUNTED

    SQL> select instance_name,status from v$instance;

    INSTANCE_NAME    STATUS

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

    +ASM1            STARTED

  加载磁盘组,注意,不是alter database哟:

    SQL> alter diskgroup all mount;

    Diskgroup altered.

    SQL> select name,state from v$asm_diskgroup;

    NAME                           STATE

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

    ASMDISK1                       MOUNTED

    ASMDISK2                       MOUNTED

  这样,该ASM就可以提供存储服务了。

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

  检查css守护进程是否启动非常 简单 ,直接使用crsctl check cssd即可,如果启动的话会收到"CSS appears healthy"的返回消息,例如:

    [oracle@jssdbn1 ~]$ crsctl check cssd

    CSS appears healthy

  关闭ASM实例,简单了,NORMAL/IMMEDIATE/TRANSACTIONAL/ABORT几个选项的定义与关闭普通数据库实例完全一模一样!例如:

    SQL> shutdown immediate

    ASM diskgroups dismounted

    ASM instance shutdown

1.2、关于ASM实例的初始化参数

  ASM 实例的初始化参数形式上与数据库的初始化参数相同,也分spfile和pfile,操作方式也完全相同,只不过具体的参数及参数值略有差异,大多数数据库的初始化参数在这里也能见到,并且某些参数意义都完全相同,同样也有一些参数虽然见到了,不过并不需要设置,这个可以理解,毕竟asm只有实例,相对比数据库的初始化参数要简单的多了,还有一些参数则是数据库初始化参数中没有的。比如ASM开头的那几个初始化参数,俺争取把差异的部分都列出来写明了。

  ASM 实例在内存占用这块还是比较轻量级的,基本上有个100m空间就很充足了 ,因此内存这块相关参数就不说了,下面说说几个ASM实例特别需要的参数