ASM 磁盘组管理

一、相关概念(摘自一弥沙的世界)

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 唉,就先写到这里吧!

 

原文地址:https://www.cnblogs.com/polestar/p/3039168.html