第十一章:ASM

点击数:1951发布日期:2020-04-19 15:09:01 来源:《oracle实战与提高》清华大学出版社

第十一章:ASM

11.1 ASM产生的背景。

ASM全称Automatic Storage Management(自动存储管理系统)。在海量数据库环境中,DBA可能会花费很多的时间来做磁盘管理。比如一个表空间将占满整个磁盘,DBA就需要再添加一块磁盘到操作系统中,然后再在新的磁盘上创建新的数据文件。如果是单个磁盘这倒不是很繁琐,问题是如果原先我们使用的是RAID或者说是LVM,那么现在大量的数据仍然是分布在以前的那些磁盘上,如果我们想让这些数据均匀地分布在以前的磁盘和新增加的磁盘上,就可能就要耗费一天甚至几天的时间来做原先数据的导出导入。

11.2ASM优势和特点

1、增加磁盘,减去旧磁盘变的非常简单。此特性可以实现轻松换存储。

2Oracle直接垂直管理磁盘,比裸设备还要裸,省去了VG,LV,文件系统等一切中间环节。

3、将文件分布到整个diskgroup中,实现最佳性能和最高的资源利用率,不浪费空间。

4、自动负载平衡功能,热盘和热块在ASM中很难出现,对整体I/O性能有质的提高。

5、统一asmcmd,sqlplus,asmca,oem工具管理,减少发生误操作。文件系统命令管不了ASM.

6、条带化,以filesallocation units (AUs)为单位的条带化。

7、可调整的均衡速度,可以使用asm_power_limit参数控制ASM中的数据的负载均衡速度,值是0-11,数值越小均衡速度越慢,数值为0时表示不进行负载均衡,默认值为1

8、文件冗余,ASM的镜像不需要第三方工具实现,提供三种级别的冗余方式。

9、自动的数据库文件管理使用OMFOracle_Managed Files)方式管理文件。

   OMF可以简化DBA的管理工作,不用指定文件的名字、大小、路径,由Oracle自动分配。在删除不再使用的文件时,OMF也自动删除其对应的OS文件。)

10ASM可以存储,数据文件,控制文件,临时数据文件,数据文件copespfile,日志文件,归档文件,回闪日志,RMAN备份,expdp导出的dump文件等。

11.3 10g ASM11g ASM

    10g ASMASM的过渡版本,安装也比较麻烦,要安装oracleasm-support...oracleasm-...oracleasmlib-...三个包,又不能放voting diskOCR文件,还要使用裸设备放置这两个文件,所以10g ASM注定成为过渡的版本。

    11g第二版开始,我们就无法使用裸设备了,Oracle不支持了。ASM的稳定性易操作性也有了很大的长进,voting diskOCR盘再也不用单独建裸设备了。ASM已经被集成到了第三个安装包里的grid frastructure里面了。不用再安装像10g一样的三个小程序包了,但我们要安装grid frastructure才能使用ASM。如果是RAC必须安装gird,如果是单机版的,就为一个ASM安装grid,稍微的有点浪费的样子。不过我们也可以接受。11gASM给大家的印象还是不错的。

11.4 ASM双存储实验,坏一个存储也没事。

我们先打开asmca


点击create创建一个磁盘组。

这里我们假定sdcsdd是一个存储,sde,sdf,sdg是另外一个存储。我们实验的目的在于说明坏一个存储我们的ASM照样正常运行。中间会用到Failure Group这个功能。

按上图的规则填写diskgroup内容。上图说明,第一个存储sdcsdd为一个failure group,名叫failgrp1;第二个存储sdeadf为一个failure group,名叫failgrp2

点击OK创建。


创建好之后,如上图所示。因为我们选择了normal冗余,我们的可用空间将损失一半。

我们使用dbca在这个DGDATA磁盘组上创建数据库。具体过程略。

现在我们将第一个存储删除,模拟损坏,强制dd掉。

[root@yingshu ~]# dd if=/dev/zero of=/dev/sdc bs=8192 count=256

256+0 records in

256+0 records out

2097152 bytes (2.1 MB) copied, 0.001002 seconds, 2.1 GB/s

[root@yingshu ~]# dd if=/dev/zero of=/dev/sdd bs=8192 count=256

256+0 records in

256+0 records out

2097152 bytes (2.1 MB) copied, 0.000895 seconds, 2.3 GB/s

我们第一个存储已经坏了,磁盘全都不能用了,我们的数据库怎么样呢?

SQL> select open_mode from v$database;

OPEN_MODE

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

READ WRITE

数据库没事儿。这个实验证明,我们的存储坏一台也没关系。条件就是我们事先把冗余和failure group配置好。

11.4 ASM换存储实验,加盘减盘

    ASM可以轻松更换新旧存储,其省事省心的程度可谓易如反掌。如果想在文件系统或裸设备上换存储,那就麻烦了。下面就做一个简单的更换存储的实验。

   先建一个ASM磁盘组,里面有两个磁盘sdcsdd,冗余方式为外部冗余External,和上一节中的存储规定一样,假定是我们的存储一旧存储。sde,sdfsdg为存储二新存储。我们先把存储二中的磁盘加到DGDATA这个磁盘组里去。如下图。

   为了让磁盘间平衡数据的速度加快,在加盘减盘过程中有多个进程对其服务,我们先修改以下参数。

SQL> show parameter asm_power_limit

NAME                                 TYPE        VALUE

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

asm_power_limit                      integer     1

SQL>

SQL> alter system set asm_power_limit=11 scope=both sid='*';

System altered.

点击Add Disks,添加存储。

选择第二个存储中的磁盘sde,sdf,sdg三块盘,点OK。这样我们的新存储就添加成功了。新旧存储的平衡情况查询以下视图。

select group_number,operation,state,power,actual,sofar,est_work,est_rate,est_minutes from v$asm_operation;

    通过减盘的方式把旧存储在磁盘组里去掉。点击Drop Disks


选中旧存储中的磁盘sdc,sdd,点击ok删除。在实际的生产环境中,删除的过程可能比较慢。我们要关注以下视图,查看数据的移动情况。

SQL> select group_number,operation,state,power,actual,sofar,est_work,est_rate,est_minutes from v$asm_operation;

GROUP_NUMBER OPERA STAT      POWER     ACTUAL      SOFAR   EST_WORK   EST_RATE EST_MINUTES

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

           1 REBAL RUN          11         11         25        699        694           0

说明:group_number记录磁盘组的序号;opera的值rebal说明此磁盘组需要rebalancestat说明rebalance正在进行;power负载均衡的速度;actual分配的速度;sofar已经移动了多少个unitsest_work估算还要移动多少个unitsest_rate估算每分种移动多少个unitsest_minutes估算还剩多少分钟move完成。

    等这个视图v$asm_operation查不着数据了,我们的数据move工作才算完成了。这时候我们就可以把旧存储下电了。新旧存储的更换工作就算完成了。

11.5  ASM相关的命令和视图

    加盘减盘我们可以用asmca,也可以用命令。命令能实现的功能远远大于图形介面,下面我们就介绍一些常用的命令。

用命令行的方式创建外部冗余的磁盘组。

SQL> conn /as sysasm

Connected.

SQL> create diskgroup dgidx external redundancy disk '/dev/sdd' name dginx_0001,'/dev/sde' name dgidx_0002;

Diskgroup created.

添加磁盘。

SQL> alter diskgroup dgidx add disk '/dev/sdf' name dgidx_0003;

Diskgroup altered.

删除磁盘。

SQL> alter diskgroup dgidx drop disk dgidx_0003; 

Diskgroup altered.

删除磁盘组。

SQL> drop diskgroup dgidx;

Diskgroup created.

SQL> drop diskgroup dgidx including contents;

Diskgroup created.


创建标准冗余的磁盘组。

SQL> create diskgroup dgidx normal redundancy disk '/dev/sdd' name dgidx_v0001 ,'/dev/sde' name dgidx_v0002;

Diskgroup created.

装载磁盘组

alter diskgroup dgdata mount;

Diskgroup altered.

卸载磁盘组

SQL> alter diskgroup dgidx dismount;

Diskgroup altered.

    手动的数据平衡,这个手工平衡在实际生产中很少用到,因为ASM会自动平衡,但我们可以使用power参数,来控制平衡的速度。他的值是从011,可以根据CPU个数,磁盘的速度也确定参数的值。

SQL> conn /as sysasm

Connected.

SQL> alter diskgroup dgdata rebalance power 8;

Diskgroup altered.

查询当前的磁盘信息,包括可以使用但没使用的磁盘。

SQL> set linesize 132

SQL> col name for a20

sql> col failgroup for a20

sql> col path for a20

SQL> select group_number,disk_number,name,failgroup,create_date,path from v$asm_disk;


GROUP_NUMBER DISK_NUMBER NAME                 FAILGROUP            CREATE_DA PATH

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

           0           0                                           08-JUN-15 /dev/sdf

           0           2                                           08-JUN-15 /dev/sdg

           2           0 DGOCR_0000           DGOCR_0000           27-MAY-15 /dev/sdb

           1           0 DGDATA_0000          DGDATA_0000          08-JUN-15 /dev/sdc

           3           0 DGIDX_V0001          DGIDX_V0001          08-JUN-15 /dev/sdd

           3           1 DGIDX_V0002          DGIDX_V0002          08-JUN-15 /dev/sde


6 rows selected.

查看当前的磁盘组信息。

SQL> select group_number,name,type,total_mb,free_mb from v$asm_diskgroup;


GROUP_NUMBER NAME                 TYPE     TOTAL_MB    FREE_MB

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

           2 DGOCR                EXTERN       3072       3013

           1 DGDATA               EXTERN       3072       1310

           3 DGIDX                NORMAL       6144       6042

    查看当前ASM磁盘中的文件信息。

SQL> col TYPE for a20

SQL> select group_number,file_number,bytes,block_size,bytes/1024/1024 mb,type,creation_date from v$asm_file;

GROUP_NUMBER FILE_NUMBER      BYTES BLOCK_SIZE         MB TYPE                 CREATION_

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

           2         253       1536        512 .001464844 ASMPARAMETERFILE     27-MAY-15

           1         256    9748480      16384   9.296875 CONTROLFILE          08-JUN-15

           1         257   52429312        512 50.0004883 ONLINELOG            08-JUN-15

           1         258   52429312        512 50.0004883 ONLINELOG            08-JUN-15

           1         259   52429312        512 50.0004883 ONLINELOG            08-JUN-15

           1         260  734011392       8192 700.007813 DATAFILE             08-JUN-15

... ...

           1         265       2560        512 .002441406 PARAMETERFILE        08-JUN-15

11 rows selected.

查看ASM的别名信息,第三列代表是否是文件夹。

SQL> col name for a30

SQL> select group_number,file_number,alias_directory,name from v$asm_alias;

GROUP_NUMBER FILE_NUMBER A NAME

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

           2  4294967295 Y ASM

           2  4294967295 Y ASMPARAMETERFILE

           2         253 N REGISTRY.253.880830609

           1         256 N Current.256.881852371

... ...

           1         265 N spfileysdb.ora

20 rows selected.

校验磁盘组的一致性,若有错误并修复。

alter diskgroup dgdata check all repair;

Diskgroup altered.

常用的ASM命令是asmca,asmcmd和通过SQLPLUS管理ASM。还可以通过RAC命令查看ASM的状态,如crs_stat -t。和crsctl stat res -t。使用ps -ef|grep asm_查看ASM后台进程也可以判断ASM是否已经启动。

图文推荐