一、相关概念(摘自一弥沙的世界)
1.ASM 磁盘组
1 ASM存储管理除了ASM实例之外,最大的组成部分就是ASM磁盘组。一个ASM磁盘组由过多个ASM磁盘组成 2 一个磁盘组内可以存放多个数据文件,一个数据文件仅仅只能位于一个磁盘组内,不能跨磁盘组 3 多个数据库可以共享相同的或多个磁盘组 4 磁盘组的冗余类型可以分为三类:标准冗余,高度冗余,外部冗余 5 对于已创建的磁盘组,不能够更改其冗余级别,如要更改,需要删除该磁盘组后再重新创建
2.ASM 磁盘
1 ASM磁盘通过标准的OS接口来访问,由Oracle用户来读写,在聚集的所有节点可以被访问 2 ASM磁盘在不同的节点可以使用不同的名字(RAC) 3 ASM磁盘可以使网络文件系统 4 ASM磁盘上的对象被冗余保护 5 每一个ASM磁盘的第一个块用于定义磁盘的头部信息,ASM磁盘名字编号,创建的时间戳等 6 ASM文件会均匀分布在一个ASM组内的各个磁盘中
3.ASM 故障组
1 一个磁盘组可以由两个或多个故障组组成 2 一个故障组由一个或多个ASM磁盘组成 3 故障组提供了共享相同资源的冗余,我们可以这样来理解标准冗余 4 假定有磁盘组DG1,且创建了两个故障组fgroup1,fgroup2,每个故障组由个ASM磁盘组成,则对标准冗余而言,两个故障组互为镜像 5 failgroup1 --> asmdiskA , asmdiskB 6 failgroup2 --> asmdiskC , asmdiskD 7 假定文件datafileA大小为4MB,则个4个extent均匀分布到asmdiskA,asmdiskB,同样asmdiskC,asmdiskD也包含该文件的4个extent 8 即只要有一个extent在故障组fgroup1中存在,必定有一个extent的镜像存在于fgroup2中,反之亦然,两个extent互为镜像。 9 当一个故障组中的某个磁盘损坏,假定为asmdiskA ,则asmdiskA中原来保存的extent将会从failgroup2中复制到asmdiskB中。 10 总之,故障组failgroup1和failgroup2必定有相同的extent副本 11 标准冗余至少需要2个故障组,高度冗余则至少需要3个故障组。事实上对于未明确指定故障组的情况下,一个标准冗余至少需要2个 12 asm磁盘,而高度冗余至少需要3个asm磁盘
4.分配单元
1 ASM磁盘的最小粒度是分配单元,大小默认是1M,也可设置为128K进行细粒度访问 2 支持粗粒度和细粒度分配单元进行读写来实现装载平衡和减少延迟 3 ASM文件由一些分配单元的集合组成
5.ASM 文件
1 对Oracle自身而言,实际上与标准的文件并没有太多区别 2 ASM文件一般位于磁盘组内创建的子目录内,磁盘组以加号开头,相当于Linux系统的根目录 3 如+DG1/oradb/datafile/system.258.346542 4 ASM可以为控制文件,数据文件,联机日志文件,参数文件,归档日志,备份等 5 不支持trace文件,可执行文件,OCR,Votingdisk等,注:Oracle 11g R2可支持 6 使用extent maps来记录文件到磁盘的映射
6.I/O分布
1 可以使用条带化和镜像来保护数据 2 文件被平均分布在一个组内的所有磁盘中 3 磁盘的添加与删除,ASM会自动重新分配AU,因此也不存在碎片的问题 4 将I/O分批到不同的磁盘控制器提高了读写数据
7.Rebalance
1 ASM 文件被均衡地分布在一个磁盘组的所有磁盘中 2 磁盘添加时,当前磁盘组加载的所有磁盘中共享的部分extent将会被移植到新的磁盘中,直到重新分布完成才正常提供I/O均衡 3 磁盘删除或故障时,删除磁盘或故障磁盘的extent将会被均匀的分布到剩余的磁盘中 4 未使用force关键字drop磁盘操作,该磁盘上所有数据rebalance完毕后才被释放.即完毕后磁盘脱机,置磁盘头部状态为former 5 总之,任意存储性质改变(磁盘增加,删除,故障)都将导致rebalance,且由asm自动完成,无需人工干预,在一个时间段通常会锁定一个盘区
8.ASM磁盘组的管理
1 通常建议创建两个磁盘组,一个用于保存数据文件,一个用于保存闪回,备份恢复使用 2 Flash Recovery Area 的大小取决于闪回内容需要保留的时间长短 3 尽可能将数据区与闪回区使用不同的物理通道 4 尽可能一次性mount所有需要用到的磁盘 5 建议使用性能,磁盘大小相近的磁盘。假定两个故障组FG1,FG2各使用一块磁盘,则FG1内的磁盘应保持与FG2内的磁盘大小相同,否则会以最小的磁盘空间作为可使用空间
9.ASM的可扩展性
1 63 disk groups in a storage system 2 3 10,000 ASM disks in a storage system 4 5 4 petabyte maximum storage for each ASM disk 6 7 40 exabyte maximum storage for each storage system 8 9 1 million files for each disk group 10 11 Maximum files sizes as shown in the following table:
Disk Group Type | Maximum File Size |
External redundancy | 35 TB |
Normal redundancy | 5.8 TB |
High redundancy | 3.9 TB |
10.ASM磁盘组的管理方式
1 SQLPlus 2 OEM 3 DBCA 4 ASMCMD
二、Solaris ASM磁盘创建及管理
1.查看diskgroup空间大小,以及ASM状态
1 SQL> select group_number,total_mb,required_mirror_free_mb,free_mb,usable_file_mb,state from v$asm_diskgroup; 2 3 GROUP_NUMBER TOTAL_MB FREE_MB USABLE_FILE_MB STATE 4 ------------ ---------- ---------- -------------- ----------- 5 1 3996 1424 712 MOUNTED 6 2 3996 3876 1938 MOUNTED 7 8 --TOTAL_MB: 磁盘组的大小 9 --FREE_MB : 在不考虑冗余的情况下,剩余的空间大小 10 --USABLE_FILE_MB:1).在外部冗余情况下 USABLE_FILE_MB=FREE_MB 11 2).普通冗余 USABLE_FILE_MB=FREE_MB/2 12 3).高冗余 USABLE_FILE_MB=FREE_MB/3 13 SQL>
2.添加disk到现有的diskgroup
1 -- a.添加裸设备参考相关文档,千万不要忘记改变磁盘属性 2 -- b.查看添加的磁盘 3 --注:我在添加磁盘时测试一下使用0分片做存储,但asm不识别,用v$asm_disk查不到这两个分片c2t4d0s0,c2t5d0s0。对0分片是不是有什么特别的说法? 将1.95G的空间划给1分片,asm可以识别: 4 SQL> select name, path, mode_status, state from v$asm_disk; 5 6 NAME PATH MODE_ST STATE 7 --------------- ------------------------------ ------- --------------- 8 /dev/rdsk/c2t4d0s1 ONLINE NORMAL 9 /dev/rdsk/c2t5d0s1 ONLINE NORMAL 10 DATA01_0000 /dev/rdsk/c2t0d0s1 ONLINE NORMAL 11 DATA01_0001 /dev/rdsk/c2t1d0s1 ONLINE NORMAL 12 DATA02_0000 /dev/rdsk/c2t2d0s1 ONLINE NORMAL 13 DATA02_0001 /dev/rdsk/c2t3d0s1 ONLINE NORMAL 14 15 SQL> 16 --注:name为空的是新增加的4块盘 17 18 --c.添加/dev/rdsk/c2t4d0s1,/dev/rdsk/c2t5d0s1到组DATA01,命名为:DATA01_0002,DATA01_0003 19 --注:1.此过程亦默认添加了故障组。2.此步骤可用dbca完成 20 21 SQL> alter diskgroup data01 add disk '/dev/rdsk/c2t4d0s1' 22 2 name DATA01_0002; 23 24 Diskgroup altered. 25 26 SQL> alter diskgroup data01 add disk '/dev/rdsk/c2t5d0s1' 27 2 name DATA01_0003; 28 29 Diskgroup altered. 30 31 SQL> 32 --d.查看添加磁盘后的情况 33 SQL> select group_number,disk_number,name,failgroup,state,path 34 2 from v$asm_disk order by 1,2; 35 36 GROUP_NUMBER DISK_NUMBER NAME FAILGROUP STATE PATH 37 ------------ ----------- ------------ ------------ -------- -------------------- 38 1 0 DATA01_0000 DATA01_0000 NORMAL /dev/rdsk/c2t0d0s1 39 1 1 DATA01_0001 DATA01_0001 NORMAL /dev/rdsk/c2t1d0s1 40 1 2 DATA01_0002 DATA01_0002 NORMAL /dev/rdsk/c2t4d0s1 41 1 3 DATA01_0003 DATA01_0003 NORMAL /dev/rdsk/c2t5d0s1 42 2 0 DATA02_0000 DATA02_0000 NORMAL /dev/rdsk/c2t2d0s1 43 2 1 DATA02_0001 DATA02_0001 NORMAL /dev/rdsk/c2t3d0s1 44 45 6 rows selected. 46 47 SQL> 48 --注:添加新磁盘后,ASM将自动重新负载平衡操作,可通过 v$asm_operation.SOFAR|EST_WORK|EST_RATE
3.创建磁盘组
1 SQL> create diskgroup DATA03 normal redundancy disk '/dev/rdsk/c2t6d0s1' name DATA03_0000 ; 2 create diskgroup DATA03 normal redundancy disk '/dev/rdsk/c2t6d0s1' name DATA03_0000 3 * 4 ERROR at line 1: --标准冗余至少需要两块磁盘 5 ORA-15018: diskgroup cannot be created 6 ORA-15072: command requires at least 2 failure groups, discovered only 1 7 8 --此时没有明确指定故障组,故障组默认自动创建 9 SQL> create diskgroup DATA03 normal redundancy disk '/dev/rdsk/c2t6d0s1' name DATA03_0000,'/dev/rdsk/c2t8d0s1' name DATA03_0001; 10 11 Diskgroup created. 12 13 SQL> 14 15 --明确指定故障组名称 16 SQL> create diskgroup DATA04 normal redundancy 17 2 failgroup fg01 disk '/dev/rdsk/c2t9d0s1' name DATA04_0000 18 3 failgroup fg02 disk '/dev/rdsk/c2t10d0s1' name DATA04_0001; 19 20 Diskgroup created. 21 22 SQL>
4.磁盘组添加故障组
1 SQL> alter diskgroup DATA04 2 2 add failgroup fg03 disk '/dev/rdsk/c2t11d0s1' name DATA04_0002; 3 4 Diskgroup altered. 5 6 SQL>
5.故障组添加磁盘
1 SQL> alter diskgroup DATA02 2 2 add failgroup DATA02_0000 disk '/dev/rdsk/c2t12d0s1' 3 3 add failgroup DATA02_0001 disk '/dev/rdsk/c2t13d0s1'; 4 5 Diskgroup altered. 6 7 SQL>
6.删除磁盘组中的磁盘,故障组中的成员,磁盘组(删除磁盘时一定要谨慎,做好备份,否则就等泪奔吧)
6.1查看目前磁盘整体情况:
1 SQL> select group_number,disk_number,name,failgroup,path 2 2 from v$asm_disk order by 1,2; 3 4 GROUP_NUMBER DISK_NUMBER NAME FAILGROUP PATH 5 ------------ ----------- ------------ ------------ -------------------- 6 1 0 DATA01_0000 DATA01_0000 /dev/rdsk/c2t0d0s1 7 1 1 DATA01_0001 DATA01_0001 /dev/rdsk/c2t1d0s1 8 1 2 DATA01_0002 DATA01_0002 /dev/rdsk/c2t4d0s1 9 1 3 DATA01_0003 DATA01_0003 /dev/rdsk/c2t5d0s1 10 2 0 DATA02_0000 DATA02_0000 /dev/rdsk/c2t2d0s1 11 2 1 DATA02_0001 DATA02_0001 /dev/rdsk/c2t3d0s1 12 2 2 DATA02_0002 DATA02_0000 /dev/rdsk/c2t12d0s1 13 2 3 DATA02_0003 DATA02_0001 /dev/rdsk/c2t13d0s1 14 3 0 DATA03_0000 DATA03_0000 /dev/rdsk/c2t6d0s1 15 3 1 DATA03_0001 DATA03_0001 /dev/rdsk/c2t8d0s1 16 4 0 DATA04_0000 FG01 /dev/rdsk/c2t9d0s1 17 18 GROUP_NUMBER DISK_NUMBER NAME FAILGROUP PATH 19 ------------ ----------- ------------ ------------ -------------------- 20 4 1 DATA04_0001 FG02 /dev/rdsk/c2t10d0s1 21 4 2 DATA04_0002 FG03 /dev/rdsk/c2t11d0s1 22 23 13 rows selected. 24 25 SQL>
1 --删除磁盘组DATA04中的磁盘DATA04_0002 2 SQL> alter diskgroup data04 drop disk DATA04_0002; 3 4 -- 删除故障中DATA02_0001中单个成员DATA02_0003 5 SQL> alter diskgroup data02 drop disk DATA02_0003; 6 7 --删除故障组FG03及所有成员(故障组FG03只有一个成员DATA04_0002) 8 --删除故障组及所有成员,注意此时为drop disks 复数形式 9 SQL> alter diskgroup data04 drop disks in failgroup FG03; 10 11 --删除磁盘组 12 SQL> drop diskgroup data04; 13 14 Diskgroup dropped. 15 16 SQL>
6.2 取消删除磁盘 磁盘是hung状态时,此命令有效
1 SQL> alter diskgroup data03 drop disk DATA03_0000; --违反冗余条件的删除,磁盘为hung状态 2 Diskgroup altered 3 SQL> select group_number,name,failgroup,path,state 4 2 from v$asm_disk 5 3 where GROUP_NUMBER=3; 6 7 GROUP_NUMBER NAME FAILGROUP PATH STATE 8 ------------ ------------ ------------ -------------------- -------- 9 3 DATA03_0000 DATA03_0000 /dev/rdsk/c2t6d0s1 HUNG 10 3 DATA03_0001 DATA03_0001 /dev/rdsk/c2t8d0s1 NORMAL 11 --取消删除 12 SQL> alter diskgroup data03 undrop disks; 13 SQL> select group_number,name,failgroup,path,state 14 2 from v$asm_disk 15 3 where GROUP_NUMBER=3; 16 17 GROUP_NUMBER NAME FAILGROUP PATH STATE 18 ------------ ------------ ------------ -------------------- -------- 19 3 DATA03_0000 DATA03_0000 /dev/rdsk/c2t6d0s1 NORMAL 20 3 DATA03_0001 DATA03_0001 /dev/rdsk/c2t8d0s1 NORMAL 21 22 --DATA03_0000变为normal状态
7.调整磁盘组的容量
1 ----故障组DATA03_0000的容量将被调整到1G,为避免浪费磁盘组中的各个故障组大小最好相等 2 SQL> alter diskgroup data03 resize disks in failgroup DATA03_0000 size 1G; 3 SQL> alter diskgroup data03 resize disks in failgroup DATA03_0001 size 1G;
8.手动Rebalance
1 SQL> alter diskgroup data03 rebalance power 11; 2 平衡速度控制参数: 3 asm_power_limit = 1~11
9.磁盘组的加载与卸载及内部一致性检查
1 SQL> alter diskgroup all dismount; 2 alter diskgroup all dismount 3 * 4 ERROR at line 1: 5 ORA-15032: not all alterations performed 6 ORA-15027: active use of diskgroup "DATA02" precludes its dismount 7 ORA-15027: active use of diskgroup "DATA01" precludes its dismount 8 9 10 SQL> 11 SQL> alter diskgroup data03 dismount; 12 alter diskgroup data03 dismount 13 * 14 ERROR at line 1: 15 ORA-15032: not all alterations performed 16 ORA-15001: diskgroup "DATA03" does not exist or is not mounted 17 18 19 SQL> 20 SQL> alter diskgroup data03 mount; 21 SQL> alter diskgroup data03 check all;
o(︶︿︶)o 唉,就先写到这里吧!