您的位置:首页 > 其它

ASM 磁盘组管理

2013-04-23 22:51 232 查看
一、相关概念(摘自一弥沙的世界)

1.ASM 磁盘组

ASM存储管理除了ASM实例之外,最大的组成部分就是ASM磁盘组。一个ASM磁盘组由过多个ASM磁盘组成
一个磁盘组内可以存放多个数据文件,一个数据文件仅仅只能位于一个磁盘组内,不能跨磁盘组
多个数据库可以共享相同的或多个磁盘组
磁盘组的冗余类型可以分为三类:标准冗余,高度冗余,外部冗余
对于已创建的磁盘组,不能够更改其冗余级别,如要更改,需要删除该磁盘组后再重新创建


2.ASM 磁盘

ASM磁盘通过标准的OS接口来访问,由Oracle用户来读写,在聚集的所有节点可以被访问
ASM磁盘在不同的节点可以使用不同的名字(RAC)
ASM磁盘可以使网络文件系统
ASM磁盘上的对象被冗余保护
每一个ASM磁盘的第一个块用于定义磁盘的头部信息,ASM磁盘名字编号,创建的时间戳等
ASM文件会均匀分布在一个ASM组内的各个磁盘中


3.ASM 故障组

一个磁盘组可以由两个或多个故障组组成
一个故障组由一个或多个ASM磁盘组成
故障组提供了共享相同资源的冗余,我们可以这样来理解标准冗余
假定有磁盘组DG1,且创建了两个故障组fgroup1,fgroup2,每个故障组由个ASM磁盘组成,则对标准冗余而言,两个故障组互为镜像
failgroup1  --> asmdiskA , asmdiskB
failgroup2  --> asmdiskC , asmdiskD
假定文件datafileA大小为4MB,则个4个extent均匀分布到asmdiskA,asmdiskB,同样asmdiskC,asmdiskD也包含该文件的4个extent
即只要有一个extent在故障组fgroup1中存在,必定有一个extent的镜像存在于fgroup2中,反之亦然,两个extent互为镜像。
当一个故障组中的某个磁盘损坏,假定为asmdiskA ,则asmdiskA中原来保存的extent将会从failgroup2中复制到asmdiskB中。
总之,故障组failgroup1和failgroup2必定有相同的extent副本
标准冗余至少需要2个故障组,高度冗余则至少需要3个故障组。事实上对于未明确指定故障组的情况下,一个标准冗余至少需要2个
asm磁盘,而高度冗余至少需要3个asm磁盘


4.分配单元

ASM磁盘的最小粒度是分配单元,大小默认是1M,也可设置为128K进行细粒度访问
支持粗粒度和细粒度分配单元进行读写来实现装载平衡和减少延迟
ASM文件由一些分配单元的集合组成


5.ASM 文件

对Oracle自身而言,实际上与标准的文件并没有太多区别
ASM文件一般位于磁盘组内创建的子目录内,磁盘组以加号开头,相当于Linux系统的根目录
如+DG1/oradb/datafile/system.258.346542
ASM可以为控制文件,数据文件,联机日志文件,参数文件,归档日志,备份等
不支持trace文件,可执行文件,OCR,Votingdisk等,注:Oracle 11g R2可支持
使用extent maps来记录文件到磁盘的映射


6.I/O分布

可以使用条带化和镜像来保护数据
文件被平均分布在一个组内的所有磁盘中
磁盘的添加与删除,ASM会自动重新分配AU,因此也不存在碎片的问题
将I/O分批到不同的磁盘控制器提高了读写数据


7.Rebalance

ASM 文件被均衡地分布在一个磁盘组的所有磁盘中
磁盘添加时,当前磁盘组加载的所有磁盘中共享的部分extent将会被移植到新的磁盘中,直到重新分布完成才正常提供I/O均衡
磁盘删除或故障时,删除磁盘或故障磁盘的extent将会被均匀的分布到剩余的磁盘中
未使用force关键字drop磁盘操作,该磁盘上所有数据rebalance完毕后才被释放.即完毕后磁盘脱机,置磁盘头部状态为former
总之,任意存储性质改变(磁盘增加,删除,故障)都将导致rebalance,且由asm自动完成,无需人工干预,在一个时间段通常会锁定一个盘区


8.ASM磁盘组的管理

通常建议创建两个磁盘组,一个用于保存数据文件,一个用于保存闪回,备份恢复使用
Flash Recovery Area 的大小取决于闪回内容需要保留的时间长短
尽可能将数据区与闪回区使用不同的物理通道
尽可能一次性mount所有需要用到的磁盘
建议使用性能,磁盘大小相近的磁盘。假定两个故障组FG1,FG2各使用一块磁盘,则FG1内的磁盘应保持与FG2内的磁盘大小相同,否则会以最小的磁盘空间作为可使用空间


9.ASM的可扩展性

63 disk groups in a storage system

10,000 ASM disks in a storage system

4 petabyte maximum storage for each ASM disk

40 exabyte maximum storage for each storage system

1 million files for each disk group

Maximum files sizes as shown in the following table:


Disk Group TypeMaximum File Size
External redundancy35 TB
Normal redundancy5.8 TB
High redundancy3.9 TB
10.ASM磁盘组的管理方式

SQLPlus
OEM
DBCA
ASMCMD


二、Solaris ASM磁盘创建及管理

1.查看diskgroup空间大小,以及ASM状态

SQL> select group_number,total_mb,required_mirror_free_mb,free_mb,usable_file_mb,state from v$asm_diskgroup;

GROUP_NUMBER   TOTAL_MB    FREE_MB USABLE_FILE_MB STATE
------------ ---------- ---------- -------------- -----------
1       3996       1424            712 MOUNTED
2       3996       3876           1938 MOUNTED

--TOTAL_MB:  磁盘组的大小
--FREE_MB :  在不考虑冗余的情况下,剩余的空间大小
--USABLE_FILE_MB:1).在外部冗余情况下   USABLE_FILE_MB=FREE_MB
2).普通冗余          USABLE_FILE_MB=FREE_MB/2
3).高冗余             USABLE_FILE_MB=FREE_MB/3
SQL>


2.添加disk到现有的diskgroup

-- a.添加裸设备参考相关文档,千万不要忘记改变磁盘属性
-- b.查看添加的磁盘
--注:我在添加磁盘时测试一下使用0分片做存储,但asm不识别,用v$asm_disk查不到这两个分片c2t4d0s0,c2t5d0s0。对0分片是不是有什么特别的说法? 将1.95G的空间划给1分片,asm可以识别:
SQL> select name, path, mode_status, state from v$asm_disk;

NAME            PATH                           MODE_ST STATE
--------------- ------------------------------ ------- ---------------
/dev/rdsk/c2t4d0s1             ONLINE  NORMAL
/dev/rdsk/c2t5d0s1             ONLINE  NORMAL
DATA01_0000     /dev/rdsk/c2t0d0s1             ONLINE  NORMAL
DATA01_0001     /dev/rdsk/c2t1d0s1             ONLINE  NORMAL
DATA02_0000     /dev/rdsk/c2t2d0s1             ONLINE  NORMAL
DATA02_0001     /dev/rdsk/c2t3d0s1             ONLINE  NORMAL

SQL>
--注:name为空的是新增加的4块盘

--c.添加/dev/rdsk/c2t4d0s1,/dev/rdsk/c2t5d0s1到组DATA01,命名为:DATA01_0002,DATA01_0003
--注:1.此过程亦默认添加了故障组。2.此步骤可用dbca完成

SQL> alter diskgroup data01 add disk '/dev/rdsk/c2t4d0s1'
2  name DATA01_0002;

Diskgroup altered.

SQL> alter diskgroup data01 add disk '/dev/rdsk/c2t5d0s1'
2  name DATA01_0003;

Diskgroup altered.

SQL>
--d.查看添加磁盘后的情况
SQL> select group_number,disk_number,name,failgroup,state,path
2  from v$asm_disk order by 1,2;

GROUP_NUMBER DISK_NUMBER NAME         FAILGROUP    STATE    PATH
------------ ----------- ------------ ------------ -------- --------------------
1           0 DATA01_0000  DATA01_0000  NORMAL   /dev/rdsk/c2t0d0s1
1           1 DATA01_0001  DATA01_0001  NORMAL   /dev/rdsk/c2t1d0s1
1           2 DATA01_0002  DATA01_0002  NORMAL   /dev/rdsk/c2t4d0s1
1           3 DATA01_0003  DATA01_0003  NORMAL   /dev/rdsk/c2t5d0s1
2           0 DATA02_0000  DATA02_0000  NORMAL   /dev/rdsk/c2t2d0s1
2           1 DATA02_0001  DATA02_0001  NORMAL   /dev/rdsk/c2t3d0s1

6 rows selected.

SQL>
--注:添加新磁盘后,ASM将自动重新负载平衡操作,可通过 v$asm_operation.SOFAR|EST_WORK|EST_RATE


3.创建磁盘组

SQL> create diskgroup DATA03 normal redundancy disk '/dev/rdsk/c2t6d0s1' name DATA03_0000 ;
create diskgroup DATA03 normal redundancy disk '/dev/rdsk/c2t6d0s1' name DATA03_0000
*
ERROR at line 1: --标准冗余至少需要两块磁盘
ORA-15018: diskgroup cannot be created
ORA-15072: command requires at least 2 failure groups, discovered only 1

--此时没有明确指定故障组,故障组默认自动创建
SQL> create diskgroup DATA03 normal redundancy disk '/dev/rdsk/c2t6d0s1' name DATA03_0000,'/dev/rdsk/c2t8d0s1' name DATA03_0001;

Diskgroup created.

SQL>

--明确指定故障组名称
SQL> create diskgroup DATA04 normal redundancy
2  failgroup fg01 disk '/dev/rdsk/c2t9d0s1' name DATA04_0000
3  failgroup fg02 disk '/dev/rdsk/c2t10d0s1' name DATA04_0001;

Diskgroup created.

SQL>


4.磁盘组添加故障组

SQL> alter diskgroup DATA04
2  add failgroup fg03 disk '/dev/rdsk/c2t11d0s1' name DATA04_0002;

Diskgroup altered.

SQL>


5.故障组添加磁盘

SQL> alter diskgroup DATA02
2  add failgroup DATA02_0000 disk '/dev/rdsk/c2t12d0s1'
3  add failgroup DATA02_0001 disk '/dev/rdsk/c2t13d0s1';

Diskgroup altered.

SQL>


6.删除磁盘组中的磁盘,故障组中的成员,磁盘组(删除磁盘时一定要谨慎,做好备份,否则就等泪奔吧)

6.1查看目前磁盘整体情况:

SQL> select group_number,disk_number,name,failgroup,path
2  from v$asm_disk order by 1,2;

GROUP_NUMBER DISK_NUMBER NAME         FAILGROUP    PATH
------------ ----------- ------------ ------------ --------------------
1           0 DATA01_0000  DATA01_0000  /dev/rdsk/c2t0d0s1
1           1 DATA01_0001  DATA01_0001  /dev/rdsk/c2t1d0s1
1           2 DATA01_0002  DATA01_0002  /dev/rdsk/c2t4d0s1
1           3 DATA01_0003  DATA01_0003  /dev/rdsk/c2t5d0s1
2           0 DATA02_0000  DATA02_0000  /dev/rdsk/c2t2d0s1
2           1 DATA02_0001  DATA02_0001  /dev/rdsk/c2t3d0s1
2           2 DATA02_0002  DATA02_0000  /dev/rdsk/c2t12d0s1
2           3 DATA02_0003  DATA02_0001  /dev/rdsk/c2t13d0s1
3           0 DATA03_0000  DATA03_0000  /dev/rdsk/c2t6d0s1
3           1 DATA03_0001  DATA03_0001  /dev/rdsk/c2t8d0s1
4           0 DATA04_0000  FG01         /dev/rdsk/c2t9d0s1

GROUP_NUMBER DISK_NUMBER NAME         FAILGROUP    PATH
------------ ----------- ------------ ------------ --------------------
4           1 DATA04_0001  FG02         /dev/rdsk/c2t10d0s1
4           2 DATA04_0002  FG03         /dev/rdsk/c2t11d0s1

13 rows selected.

SQL>


--删除磁盘组DATA04中的磁盘DATA04_0002
SQL> alter diskgroup data04 drop disk DATA04_0002;

-- 删除故障中DATA02_0001中单个成员DATA02_0003
SQL> alter diskgroup data02 drop disk DATA02_0003;

--删除故障组FG03及所有成员(故障组FG03只有一个成员DATA04_0002)
--删除故障组及所有成员,注意此时为drop disks 复数形式
SQL> alter diskgroup data04 drop disks in failgroup FG03;

--删除磁盘组
SQL> drop diskgroup data04;

Diskgroup dropped.

SQL>


6.2 取消删除磁盘 磁盘是hung状态时,此命令有效

SQL> alter diskgroup data03 drop disk DATA03_0000; --违反冗余条件的删除,磁盘为hung状态
Diskgroup altered
SQL> select group_number,name,failgroup,path,state
2  from v$asm_disk
3  where GROUP_NUMBER=3;

GROUP_NUMBER NAME         FAILGROUP    PATH                 STATE
------------ ------------ ------------ -------------------- --------
3 DATA03_0000  DATA03_0000  /dev/rdsk/c2t6d0s1   HUNG
3 DATA03_0001  DATA03_0001  /dev/rdsk/c2t8d0s1   NORMAL
--取消删除
SQL> alter diskgroup data03 undrop disks;
SQL> select group_number,name,failgroup,path,state
2  from v$asm_disk
3  where GROUP_NUMBER=3;

GROUP_NUMBER NAME         FAILGROUP    PATH                 STATE
------------ ------------ ------------ -------------------- --------
3 DATA03_0000  DATA03_0000  /dev/rdsk/c2t6d0s1   NORMAL
3 DATA03_0001  DATA03_0001  /dev/rdsk/c2t8d0s1   NORMAL

--DATA03_0000变为normal状态


7.调整磁盘组的容量

----故障组DATA03_0000的容量将被调整到1G,为避免浪费磁盘组中的各个故障组大小最好相等
SQL> alter diskgroup data03  resize disks in failgroup DATA03_0000 size 1G;
SQL> alter diskgroup data03  resize disks in failgroup DATA03_0001 size 1G;


8.手动Rebalance

SQL> alter diskgroup data03 rebalance power 11;
平衡速度控制参数:
asm_power_limit = 1~11


9.磁盘组的加载与卸载及内部一致性检查

SQL> alter diskgroup all dismount;
alter diskgroup all dismount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15027: active use of diskgroup "DATA02" precludes its dismount
ORA-15027: active use of diskgroup "DATA01" precludes its dismount

SQL>
SQL> alter diskgroup data03 dismount;
alter diskgroup data03 dismount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15001: diskgroup "DATA03" does not exist or is not mounted

SQL>
SQL> alter diskgroup data03 mount;
SQL> alter diskgroup data03 check all;


o(︶︿︶)o 唉,就先写到这里吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: