第十一章:ASM
点击数:1951发布日期:2020-04-19 15:09:01 来源:《oracle实战与提高》清华大学出版社
第十一章:ASM
11.1 ASM产生的背景。
ASM全称Automatic Storage Management(自动存储管理系统)。在海量数据库环境中,DBA可能会花费很多的时间来做磁盘管理。比如一个表空间将占满整个磁盘,DBA就需要再添加一块磁盘到操作系统中,然后再在新的磁盘上创建新的数据文件。如果是单个磁盘这倒不是很繁琐,问题是如果原先我们使用的是RAID或者说是LVM,那么现在大量的数据仍然是分布在以前的那些磁盘上,如果我们想让这些数据均匀地分布在以前的磁盘和新增加的磁盘上,就可能就要耗费一天甚至几天的时间来做原先数据的导出导入。
11.2ASM优势和特点
1、增加磁盘,减去旧磁盘变的非常简单。此特性可以实现轻松换存储。
2、Oracle直接垂直管理磁盘,比裸设备还要裸,省去了VG,LV,文件系统等一切中间环节。
3、将文件分布到整个diskgroup中,实现最佳性能和最高的资源利用率,不浪费空间。
4、自动负载平衡功能,热盘和热块在ASM中很难出现,对整体I/O性能有质的提高。
5、统一asmcmd,sqlplus,asmca,oem工具管理,减少发生误操作。文件系统命令管不了ASM.
6、条带化,以files的allocation units (AUs)为单位的条带化。
7、可调整的均衡速度,可以使用asm_power_limit参数控制ASM中的数据的负载均衡速度,值是0-11,数值越小均衡速度越慢,数值为0时表示不进行负载均衡,默认值为1。
8、文件冗余,ASM的镜像不需要第三方工具实现,提供三种级别的冗余方式。
9、自动的数据库文件管理使用OMF(Oracle_Managed Files)方式管理文件。
(OMF可以简化DBA的管理工作,不用指定文件的名字、大小、路径,由Oracle自动分配。在删除不再使用的文件时,OMF也自动删除其对应的OS文件。)
10、ASM可以存储,数据文件,控制文件,临时数据文件,数据文件cope,spfile,日志文件,归档文件,回闪日志,RMAN备份,expdp导出的dump文件等。
11.3 10g ASM和11g ASM
10g ASM是ASM的过渡版本,安装也比较麻烦,要安装oracleasm-support...;oracleasm-...;oracleasmlib-...三个包,又不能放voting disk和OCR文件,还要使用裸设备放置这两个文件,所以10g ASM注定成为过渡的版本。
11g第二版开始,我们就无法使用裸设备了,Oracle不支持了。ASM的稳定性易操作性也有了很大的长进,voting disk和OCR盘再也不用单独建裸设备了。ASM已经被集成到了第三个安装包里的grid frastructure里面了。不用再安装像10g一样的三个小程序包了,但我们要安装grid frastructure才能使用ASM。如果是RAC必须安装gird,如果是单机版的,就为一个ASM安装grid,稍微的有点浪费的样子。不过我们也可以接受。11g的ASM给大家的印象还是不错的。
11.4 ASM双存储实验,坏一个存储也没事。
我们先打开asmca
点击create创建一个磁盘组。
这里我们假定sdc和sdd是一个存储,sde,sdf,sdg是另外一个存储。我们实验的目的在于说明坏一个存储我们的ASM照样正常运行。中间会用到Failure Group这个功能。
按上图的规则填写diskgroup内容。上图说明,第一个存储sdc和sdd为一个failure group,名叫failgrp1;第二个存储sde和adf为一个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磁盘组,里面有两个磁盘sdc和sdd,冗余方式为外部冗余External,和上一节中的存储规定一样,假定是我们的存储一旧存储。sde,sdf和sdg为存储二新存储。我们先把存储二中的磁盘加到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说明此磁盘组需要rebalance;stat说明rebalance正在进行;power负载均衡的速度;actual分配的速度;sofar已经移动了多少个units;est_work估算还要移动多少个units;est_rate估算每分种移动多少个units;est_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参数,来控制平衡的速度。他的值是从0到11,可以根据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是否已经启动。
下一篇:第十二章:DataGuard
上一篇:第十章:数据库的升级和补丁
图文推荐
序言
2020-04-19 查看:2271
第十五章:Oracle 12c介绍
2020-04-19 查看:2208
第十四章:常用Oracle工具
2020-04-19 查看:1934
第十三章:Oracle Golde...
2020-04-19 查看:2199
第十二章:DataGuard
2020-04-19 查看:1796