一、基本信息及概念
1、ASM是ORACLE公司的自动存储管理软件。它使用裸设备和ASM磁盘。在使用该软件之前需要安全相应平台的ASM库驱动程序。
2、ASM将多块磁盘组合起来形成一个磁盘组,磁盘组具有裸设备的读写性能和文件系统的管理性能,是集二者优点的存在。
3、ASM磁盘组由多块磁盘组成,每块磁盘由多个AU(allocate unit:分配单元)组成,每个AU大小为1MB。
4、ASM磁盘组实现了数据容错的功能,其包含三种冗余级别:
外部冗余(EXTERNAL REDUNDANCY) :同一个AU在ASM磁盘组里没有有副本
标准冗余(NORMAL REDUNDANCY) :同一个AU在ASM磁盘组里有一个副本
高冗余(HIGH REDUNDANCY):同一个AU在ASM磁盘组里有两个副本
5、ASM为了实现磁盘组的容错,提出了故障组(FAIL GROUP)的概念。且规定,同一个AU的副本永远不能放在同一个故障组里。
6、ASM磁盘组具有数据重平衡的功能。所谓重平衡的本质是:让组内所有磁盘数据均匀,以实现I/O负载的均衡。
重平衡的工作原理:
当加入一块磁盘时,ASM从磁盘组内已有的各块磁盘上读出部分AU写入到新加入的磁盘中。以实现各盘数据量均衡。
当删除一块磁盘时,ASM从即将删除的磁盘上读出所有的AU,然后平均写入到组内其它的磁盘上。以实现各盘数据量均衡。
二、实例
1、ASM实例和数据库实例一样,同样有自己的参数文件,它们的功能是相同的。
2、ASM实例只用两个状态:nomount、mount
3、ASM实例的启动和数据库的启动一样。 例如:startup nomount|mount
4、ASM实例的关闭和数据库的关闭一样。 例如:shutdown immediate|normal|transactional|abort
5、ASM实例的服务:
ASM实例有一个服务,名叫组服务(group service),它将ASM实例能管理的全部磁盘组注册到自己的管理信息表里。该表里包还磁盘组的名称以及如何访问磁盘组的信息。他的服务对象是数据库的前台进程ASMB.进程ASMB只有在数据库与ASM实例通信时才产生。
6、ASM实例的功能:用于维护ASM磁盘组。包括:磁盘组的创建,删除,修改。
7、ASM实例的操作:
$sqlplus /nolog
sql>connect / as sysdba #连接实例
sql>startup nomount #将实例启动到NOMOUNT状态,
sql>startup mount #将实例启动到MOUNT状态
sql>shutdown immediate #关闭实例
备注:如果ASM实例处于NOMOUNT状态,欲将其提升为MOUNT状态,则应使用如下命令:
alter diskgroup diskgroup_name mount;
三、ASM实例的参数文件
1、ASM实例的参数文件的作用是用于建立ASM实例的内存结构和启动ASM实例的后台进程。
2、ASM实例初始化参数的含义和数据库初始化参数的含义相同。
如:user_dump_dest,
background_dump_dest
core_dump_dest
remote_login_passwordfile
3、重要参数的说明:
instance_type='asm' #ASM实例的设置值
instance_type='rdbms' #数据库实例的设置值
asm_diskgroups='dgdata1,dgdata2' #指的是ASM启动时默认挂载那些磁盘组。
如果没有设置该值,则启动ASM到MOUNT时会报没有磁盘组被挂载的错误。
asm_diskstring='/dev/raw/raw*' #指的是ASM实例在哪里以什么样的格式
搜索磁盘。切记不是路径,是搜索模式。
asm_power_limit=[0 11] #表示重平衡的速度和吞吐量,1最小,对用户影
响最小。反之亦然。0表示关闭重平衡。
4、ASM实例的后台进程:
(1)GMON(global monitor):用于监控维护磁盘组的元数据操作。
(2)RBAL:用于协调磁盘组内各磁盘的重平衡操作。负责生成重平衡计划。
(3)ARBx:负责实际的重平衡操作。
5、一个特殊的进程:
ASMB:负责数据库实例与ASM实例通信,它从GS(group service)读取信息。只有在数
据库实例与ASM实例通信时才产生。属于数据库进程。
四、ASM实例的相关视图说明:
1、使用初始化参数【asm_diskstring】的时机:
(1)创建磁盘组
(2)向磁盘组中追加磁盘
(3)访问v$asm_disk
(4)访问v$asm_diskgroup
以上四种情况,ASM会根据初始化【asm_diskstring】指定的磁盘字符串搜索所有可用磁盘。注意:是磁盘字符串,不是磁盘路径。如:/dev/oracleasm/disks/DISK* 。
为了避免频繁的搜索磁盘,可以查询视图:v$asm_disk_stat,v$asm_diskgroup_stat .
2、视图关系:
视图:v$asm_disk与v$asm_disk_stat中的字段相同,含义相同,只是前者搜索磁盘,后者不搜索。
视图:v$asm_diskgroup与v$asm_diskgroup_stat中的字段相同,含义相同,只是前者搜索磁盘,后者不搜索。
五、初始化参数(asm_diskstring)使用说明
1、作用:指定asm磁盘的搜索模式
2、定义:alter system set asm_diskstring='/dev/oracleasm/disk/DISK*' scope=spfile;
(适用于ASM磁盘)
or
alter system set asm_diskstring='ORCL:DISK*' scope=spfile; (适用于ASM磁盘)
or
alter system set asm_diskstring='/dev/raw/raw*' scope=spfile; (适用于裸设备)
3、注解:
在这里该参数的值不能指定为磁盘的搜索路径,而且严格区分大小写。
例如:裸设备在/dev/raw/目录下,则不能将asm_diskstring='/dev/raw/',应该设置为asm_diskstring='/dev/raw/raw*',否则ASM找不到磁盘。
4、实例操作:
第一组:
改变前
SQL> alter system set asm_diskstring='ORCL:DISK*' scope=spfile;
SQL> shutdown immediate
SQL> startup nomount
SQL> select group_number,disk_number,name,path,total_mb from v$asm_disk;
GROUP_NUMBER DISK_NUMBER NAME PATH TOTAL_MB
------------ ------------ -------- ---------------------- ----------
0 0 ORCL:DISK1 8189
0 3 ORCL:DISK4 8189
0 2 ORCL:DISK3 8189
0 1 ORCL:DISK2 8189
改变后:
SQL> alter system set asm_diskstring='orcl:disk*' scope=spfile;
SQL> shutdown immediate
SQL> startup nomount
SQL> select name,path from v$asm_disk;
no rows selected
第二组:
改变前:
SQL> alter system set asm_diskstring='/dev/oracleasm/disks/DISK*' scope=spfile;
SQL> shutdown immediate
SQL> startup nomount
SQL> select group_number,disk_number,name,path,total_mb from v$asm_disk;
GROUP_NUMBER DISK_NUMBER NAME PATH TOTAL_MB
------------ ----------- ------ ------------------ ----------
0 0 /dev/oracleasm/disks/DISK4 8189
0 3 /dev/oracleasm/disks/DISK1 8189
0 2 /dev/oracleasm/disks/DISK2 8189
0 1 /dev/oracleasm/disks/DISK3 8189
改变后:
SQL> alter system set asm_diskstring='/dev/oracleasm/disks/disk*' scope=spfile;
SQL> startup nomount
SQL> select group_number,disk_number,name,path,total_mb from v$asm_disk;
no rows selected