ASM 磁盘、目录的管理

本文介绍ASM磁盘组、故障组的概念及管理方法,包括磁盘组的创建、调整及文件管理等内容。
ASM 磁盘、目录的管理

ASM磁盘是ASM体系结构的重要组成部分,ASM磁盘由ASM实例来定位、管理,本文主要讲述ASM磁盘组、故障组等等。

一、相关概念

    1.ASM 磁盘组

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

    2.ASM 磁盘  

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

    3.ASM 故障组

        一个磁盘组可以由两个或多个故障组组成
        一个故障组由一个或多个ASM磁盘组成
        
        故障组提供了共享相同资源的冗余,我们可以这样来理解标准冗余
            假定有磁盘组DG1,且创建了两个故障组fgroup1,fgroup2,每个故障组由2个ASM磁盘组成,则对标准冗余而言,两个故障组互为镜像
            failgroup1  --> asmdiskA , asmdiskB
            failgroup2  --> asmdiskC , asmdiskD
            假定文件datafileA大小为4MB,则4个extent均匀分布到asmdiskA,asmdiskB,同样asmdiskC,asmdiskD也包含该文件的1至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磁盘组的管理方式

        SQLPlus
        OEM
        DBCA
        ASMCMD
        
二、ASM磁盘创建及管理   
    
    1.查看ASM配置磁盘搜索信息

        SQL> show parameter instance_type

        NAME                                 TYPE        VALUE
        ------------------------------------ ----------- ------------------------------
        instance_type                        string      ASM

        SQL> show parameter asm_diskst

        NAME                                 TYPE        VALUE
        ------------------------------------ ----------- ------------------------------
        asm_diskstring                       string      /dev/oracleasm/disks/VOL*

    2.使用oracleasm创建磁盘

        [root@oradb ~]#  /etc/init.d/oracleasm createdisk VOL1 /dev/sdd1
        Marking disk "VOL1" as an ASM disk: [  OK  ]

        [root@oradb ~]#  /etc/init.d/oracleasm createdisk VOL2 /dev/sdd2
        Marking disk "VOL2" as an ASM disk: [  OK  ]

        [root@oradb ~]#  /etc/init.d/oracleasm createdisk VOL3 /dev/sde1
        Marking disk "VOL3" as an ASM disk: [  OK  ]

        [root@oradb ~]#  /etc/init.d/oracleasm createdisk VOL4 /dev/sde2
        Marking disk "VOL4" as an ASM disk: [  OK  ]

        [root@oradb ~]#  /etc/init.d/oracleasm listdisks
        VOL1
        VOL2
        VOL3
        VOL4
            
    3.创建磁盘组语法
    
            CREATE DISKGROUP diskgroup_name
              [ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ]
              [ FAILGROUP failgroup_name ]
              DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ] ...;

    4.创建磁盘组

        SQL> create diskgroup DG1 normal redundancy disk '/dev/oracleasm/disks/VOL1' name VOL1;
        create diskgroup DG1 normal redundancy disk '/dev/oracleasm/disks/VOL1' name VOL1
        *
        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 DG1 normal redundancy
          disk '/dev/oracleasm/disks/VOL1' name DG1_VOL1 ,'/dev/oracleasm/disks/VOL2' name DG1_VOL2;

        SQL> create diskgroup DG2 normal redundancy     --使用标准冗余创建磁盘组DG2
          failgroup FG1 disk '/dev/oracleasm/disks/VOL3' name DG2_FG1_VOL3
          failgroup FG2 disk '/dev/oracleasm/disks/VOL4' name DG2_FG2_VOL4;

        SQL> create diskgroup DG_ext external redundancy disk '/dev/oracleasm/disks/VOL10' name DG_ext_VOL10; --外部冗余

        SQL> select group_number gno,name,state,type,total_mb,free_mb,   --查看创建的磁盘组
          required_mirror_free_mb rmfmb,usable_file_mb ufmb
          from v$asm_diskgroup;

               GNO NAME            STATE       TYPE     TOTAL_MB    FREE_MB      RMFMB       UFMB
        ---------- --------------- ----------- ------ ---------- ---------- ---------- ----------
                 1 DG1             MOUNTED     NORMAL       3066       2964               1482
                 2 DG2             MOUNTED     NORMAL       3066       2964               1482
                 3 DG_EXT          MOUNTED     EXTERN        100         50                 50   

        SQL> select group_number gno,name,failgroup fgno,state,total_mb,free_mb,header_status from v$asm_disk;

               GNO NAME            FGNO            STATE      TOTAL_MB    FREE_MB HEADER_STATU
        ---------- --------------- --------------- -------- ---------- ---------- ------------
                 2 DG2_FG2_VOL4    FG2             NORMAL         1537       1486 MEMBER
                 2 DG2_FG1_VOL3    FG1             NORMAL         1529       1478 MEMBER
                 1 DG1_VOL2        DG1_VOL2        NORMAL         1537       1486 MEMBER
                 1 DG1_VOL1        DG1_VOL1        NORMAL         1529       1478 MEMBER
                 3 DG_EXT_VOL10    DG_EXT_VOL10    NORMAL          100         50 MEMBER

    5.磁盘组添加故障组和成员
        --为非故障组添加成员
            SQL> alter diskgroup DG1 add disk '/dev/oracleasm/disks/VOL5' name DG1_VOL5;  

        --为DG2添加一个故障组FG3及成员

            SQL> alter diskgroup DG2
              add failgroup FG3 disk '/dev/oracleasm/disks/VOL6' name DG2_FG3_VOL6;  --添加故障组及成员

        --为DG2的每个故障组各添加一个成员

            SQL> alter diskgroup DG2
              add failgroup FG1 disk '/dev/oracleasm/disks/VOL7'
              add failgroup FG2 disk '/dev/oracleasm/disks/VOL8'
              add failgroup FG3 disk '/dev/oracleasm/disks/VOL9';

    6.删除磁盘组中的磁盘,故障组中的成员,磁盘组

        SQL> alter diskgroup DG1 drop disk DG1_VOL5;   --删除磁盘组DG1中的磁盘VOL5
 
        SQL> alter diskgroup DG2 drop disk DG2_0003;  --删除故障组中的单个成员

        SQL> alter diskgroup DG2 drop disks in failgroup FG3;  --删除故障组及所有成员,注意此时为drop disks 复数形式

        SQL> alter diskgroup DG1 drop disk DG1_VOL4            --删除磁盘组中的磁盘,同时添加故障组FG3
                add failgroup FG3 disk '/dev/oracleasm/disks/VOL9' name DG1_VOL11;

        SQL> drop diskgroup DG1;    --删除磁盘组
        
    7.调整磁盘组的容量

        ----故障组FG3的容量将被调整到10G,如果磁盘空间不足,则调整失败

        SQL> alter diskgroup DG2 resize disks in failgroup FG3 size 10G;

    8.手动Rebalance

        SQL> alter diskgroup DG2 rebalance power 3 wait;

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

        SQL> alter diskgroup all dismount;
        SQL> alter diskgroup DG2 mount;
        SQL> alter diskgroup DG2 check all;

    10.查看磁盘组的partner

        SQL>  select name,state,type from v$asm_diskgroup where group_number=3;   --查看磁盘组DG3的信息         
 
        NAME            STATE       TYPE
        --------------- ----------- ------
        DG3             MOUNTED     NORMAL
        
        SQL> select grp,disk,number_kfdpartner from x$kfdpartner where grp=3;

               GRP       DISK NUMBER_KFDPARTNER
        ---------- ---------- -----------------
                                              --磁盘组DG3使用了3个磁盘,且冗余度为标准冗余
                                              --磁盘组0的partner 为磁盘组1,2
                                              --磁盘组1的partner 为磁盘组0,2
                                        2
                                              --磁盘组2的partner 为磁盘组0,1
                                        1

三、磁盘组中目录、文件的管理

    1.为磁盘组增加目录

        SQL> alter diskgroup DG2 add directory ' DG2/datafile';                      --为磁盘组增加目录

        SQL> alter diskgroup DG2 rename directory ' DG2/datafile' to ' DG2/dtfile';  --重命名目录
 
        SQL> alter diskgroup DG2 drop directory ' DG2/dtfile';                       --删除目录

        SQL> alter diskgroup DG2 add directory ' DG2/asmdb/datafile';   --为磁盘组增加目录

        alter diskgroup DG2 add directory ' DG2/asmdb/datafile'
        *
        ERROR at line 1:
        ORA-15032: not all alterations performed
        ORA-15173: entry 'asmdb' does not exist in directory '/ '       --收到错误提示,asmdb目录不存在,必须要先创建

        SQL> alter diskgroup DG2 add directory ' DG2/asmdb/';           --首先添加asmdb
 
        SQL> alter diskgroup DG2 add directory ' DG2/asmdb/datafile';   --再次添加目录成功

    2.为文件添加别名,重命名别名

        SQL> alter diskgroup DG1 add alias ' DG1/asmdb/datafile/users.dbf'   --添加别名
          for ' DG1/asmdb/datafile/users.263.734885485' ;
 
        SQL> select name,group_number,file_number,alias_index,alias_directory,system_created
          from v$asm_alias where file_number=263;

        NAME                      GROUP_NUMBER FILE_NUMBER ALIAS_INDEX A S
        ------------------------- ------------ ----------- ----------- - -
        USERS.263.734885485                        263          215 N Y
        users.dbf                                  263          216 N N

        SQL> alter diskgroup DG1 rename alias ' DG1/asmdb/datafile/users.dbf'   --重命名一个别名
          to ' DG1/asmdb/datafile/users01.dbf';

        SQL> select name,group_number,file_number,alias_index,alias_directory,system_created
          from v$asm_alias where file_number=263;
     
        NAME                      GROUP_NUMBER FILE_NUMBER ALIAS_INDEX A S
        ------------------------- ------------ ----------- ----------- - -
        USERS.263.734885485                        263          215 N Y
        users01.dbf                                263          216 N N

    3.为文件删除别名

        SQL> alter diskgroup DG1 drop alias ' DG1/asmdb/datafile/users01.dbf';

四、TEMPLATE的管理

TEMPLATE是一个模板,为数据库中新增的文件定义了缺省分配单元大小,以及冗余级别。对于不同类型的文件,使用了不同的AUs以及不同的冗余度。如对控制文件采用高度冗余,条带使用精细化条带(128kb),而参数文件,数据文件则采用标准冗余,粗级别条带(1MB)。
这个特性正是Oracle asm 管理不同于外部冗余的特性,即可以基于文件的不同属性而使用不同级别的冗余度和不同大小的条带化分配单元。
当然,我们可以根据不同的需求来修改该模板,使得创建新的文件时根据需要来应用其冗余和条带化特性。系统管理人员能改变系统缺省template,但不能删除该template,管理员能增加自己的template,然后在该模板上创建数据文件。

    下面是缺省情况下DG1中新增文件所使用的缺省的条带化及其冗余级别

        SQL> select * from v$asm_template where group_number=1;
                                                                
        GROUP_NUMBER ENTRY_NUMBER REDUND STRIPE S NAME
        ------------ ------------ ------ ------ - -----------------------------------
                             0 MIRROR COARSE Y PARAMETERFILE
                             1 MIRROR COARSE Y DUMPSET
                             2 HIGH   FINE   Y CONTROLFILE
                             3 MIRROR COARSE Y ARCHIVELOG
                             4 MIRROR FINE   Y ONLINELOG
                             5 MIRROR COARSE Y DATAFILE
                             6 MIRROR COARSE Y TEMPFILE
                             7 MIRROR COARSE Y BACKUPSET
                             8 MIRROR COARSE Y AUTOBACKUP
                             9 MIRROR COARSE Y XTRANSPORT
                            10 MIRROR COARSE Y CHANGETRACKING
                            11 MIRROR FINE   Y FLASHBACK
                            12 MIRROR COARSE Y DATAGUARDCONFIG
    
    1.创建TEMPLATE的语法

        ALTER DISKGROUP disk_group_name ADD TEMPLATE template_name
          ATTRIBUTES ([{MIRROR|HIGH|UNPROTECTED}] [{FINE|COARSE}]);

    2.添加TEMPLATE

        SQL> alter diskgroup DG1 add template template_one attributes (high fine);
        SQL> alter diskgroup DG1 add template template_two attributes (unprotected);

    3.修改已存在的TEMPLATE

        SQL> alter diskgroup DG1 alter template template_one attributes (coarse);

    4.删除TEMPLATE

        SQL> alter diskgroup DG1 drop template template_two;

    5.基于模板创建数据文件

        SQL> create tablespace test datafile ' DG1/asmdb/datafile/test.dbf(template_one)' size 10M;

    6.查看当前系统中文件使用的模板

        SQL> select name,redundancy,striped
          from v$asm_alias a join v$asm_file b
          on a.file_number=b.file_number
          and a.group_number=b.group_number
          order by name;
          
        NAME                                REDUND STRIPE
        ----------------------------------- ------ ------
        Current.256.734885363               HIGH   FINE
        SYSAUX.260.736463679                MIRROR COARSE
        TBS_RMAN.265.735409761              MIRROR COARSE
        TEMP.262.734885475                  MIRROR COARSE
        SYSTEM.259.734885389                MIRROR COARSE

五、使用OMF 创建ASM文件涉及的一些参数

    DB_CREATE_FILE_DEST           --Oracle创建数据文件、临时文件时,在未明确指定路径的情况下的缺省路径
                                 --当db_create_online_log_dest_n未指定时,也作为联机日志文件和控制文件的缺省路径

    DB_CREATE_ONLINE_LOG_DEST_n   --Oracle创建联机日志文件和控制文件时,在未明确指定路径的情况下的缺省路径

    DB_RECOVERY_FILE_DEST         --适用于rman, archivelog,onlinelog

    CONTROL_FILES

    LOG_ARCHIVE_DEST_n

    LOG_ARCHIVE_DEST

    STANDBY_ARCHIVE_DEST

    查看OMF相关参数的设置

        SQL> show parameter db_reco

        NAME                                 TYPE        VALUE
        ------------------------------------ ----------- ------------------------------
        db_recovery_file_dest                string      RECOVERYDEST
        db_recovery_file_dest_size           big integer 1500M

        SQL> show parameter db_create

        NAME                                 TYPE        VALUE
        ------------------------------------ ----------- ------------------------------
        db_create_file_dest                  string      DG1  

六、ASM 磁盘的相关视图

    v$asm_disk(_stat)       --查看磁盘及其状态信息
    v$asm_diskgroup(_stat)  --查看磁盘组及其状态信息
    v$asm_operation         --查看当前磁盘的操作信息
    v$asm_client            --返回当前连接的客户端实例信息
    v$asm_file              --返回asm文件的相关信息
    v$asm_template          --返回asm文件样本的相关信息
    v$asm_alias             --返回asm文件的别名信息

转自:http://blog.youkuaiyun.com/robinson_0612/article/details/6134071
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值