技术活动
CUUG学员就业信息
学员感言、就业资讯
报名热线
文档
当前您的位置:首页 > 技术活动 > 技术中心 > 文档
Oracle ASM 实例管理-CUUG

  一、基本信息及概念

  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