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

     

  • 相关阅读:
    Django进阶2
    Django进阶
    Django基础
    jQuery基本操作
    Dom编程
    JavaScript简介
    Python—sqlalchemy
    Python—RabbitMQ
    Python—redis
    Python—操作redis
  • 原文地址:https://www.cnblogs.com/polestar/p/3039168.html
Copyright © 2020-2023  润新知