• oracle asm初步(1)


    asm相关

    !--查看asm磁盘组对应的物理磁盘

    如果是用oracleasm createdisk创建的disk可以用命令
    /etc/init.d/oracleasm querydisk
    比如
    /etc/init.d/oracleasm querydisk -v /dev/sd* 2>&1 | grep VOL

    如果是直接用raw device来添加的

    可以查询v$asm_disk的path和mount_status 字段。

    linux 32bit oracle 10.2.0.5.0 asm,以下操作在ORACLE_SID=+ASM的实例进行。

    (1)在oracle和asm的instance里,查相出视图结果不同

    --v$asm_disk;
    set lines 200
    col label for a10
    col name for a10
    col path for a20


    select group_number,disk_number,mount_status,header_status,state,redundancy,name,path,total_mb,free_mb,failgroup,label
    from v$asm_disk;

    --要注意,不属于任何一个disk_group的asm_disk的group_number列为0;
    在asm中mount_status=cached,header_status=member,free_mb=正常值,failgroup=自已所在磁盘
    在oracle中,mount_status=opened,header_status=unknown,free_mb为0,failgroup=null

    --v$asm_diskgroup

    col database_compatibility for a20
    set lines 200
    select group_number,name,sector_size,block_size,allocation_unit_size,state,type,total_mb,free_mb,database_compatibility
    from v$asm_diskgroup;

    (2)--增加删除磁盘的方法(这些操作在dbca里图形化也可以操作,且稳定)

    1、通过/etc/init.d/oracleasm createdisk VOLn /dev/sdbx 增加asmdisk
    2、在type=asm的instance里:(默认的rebalance为1,最慢,最大11,会对io性能有影响)
    alter diskgroup mydata add disk 'ORCL:VOLn' rebalance power 1;--这里的ORCL:VOLn指的path
    --删除:
    alter diskgroup mydata drop disk 'VOLn' rebalance power 1;--这里的VOLn指的label或是name

    --这种方式可能也行(但添加的去name,mount_status状态不对)
    alter diskgroup DATA add disk '/dev/raw/raw3' name data007;


    (3)--手动平衡磁盘组

    一般情况下ASM都会自动对其下的磁盘组进行平衡,不过ORACLE也提供了手动平衡磁盘组的方式
    手动平衡的话,设置的平衡度可以与初始化参数中并不相同,例如,设置磁盘组平衡度为5
    alter diskgroup data rebalance power 5;

    另外再次强调,上述语句将很快返回diskgroup altered的提示,但这并不表示操作真正完成,它只是反馈语句提交而已

    查看磁盘后台的操作,可以通过v$asm_operation视图,或者在语句执行时增加wait子句,这样ASM将会等到操作真正完成时,才返回提示信息

    (4)mount/unmount 磁盘组
    只有被mount的磁盘组才能被数据库使用并执行add/drop等磁盘操作,ASM中的磁盘组默认会在ASM实例启动时自动加载,当然也可以手动通过命令行语句mount/unmount磁盘组

    查询ASM实例中创建的磁盘组可以通过V$ASM_DISKGROUP视图查看:

    select group_number,name,state,total_mb,free_mb from v$asm_diskgroup;

    当前两个磁盘组均为MOUNT状态,要将其置为UNMOUNT,执行语句如下:

    alter diskgroup mydata dismount;


    UNMOUNT磁盘组的话务必慎重操作,要确保UNMOUNT的磁盘组中保存的文件对应的数据库当前未启动,而且该操作也会直接导致数据库SHUTDOWN。

    (5) 删除磁盘组

    语法:drop diskgroup mydata;


    如果删除的diskgroup非空的话,直接执行上述语句会报错
    这时候可以通过附加including contents子句,来自动删除该磁盘组中包含的文件
    删除磁盘组的操作会自动修改spfile中ASM_DISKGROUPS初始化参数的值(如果使用了SPFILE的话)

    (6)测试在EXTERNAL的模式下,只要有一个asm_disk坏掉,整个磁盘组就会dismount(这些创建磁盘组,添加删除磁盘组磁盘的都可以在dbca下进行,且稳定)


    CREATE DISKGROUP diskgroup_name [ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ]
    [ FAILGROUP failgroup_name ]
    DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ]

    例子如下:ORCL:VOL3对应/dev/sdb6
    create diskgroup disk2 EXTERNAL REDUNDANCY disk 'ORCL:VOL3';

    [root@node01 bin]# dd if=/dev/zero of=/dev/sdb6
    dd: 正在写入 “/dev/sdb6”: 设备上没有空间
    112393+0 records in
    112392+0 records out
    57544704 bytes (58 MB) copied, 0.680422 seconds, 84.6 MB/s

    以上dd命令破坏了asm_disk的header

    SQL> col database_compatibility for a20
    SQL> set lines 200
    SQL> select group_number,name,sector_size,block_size,allocation_unit_size,state,type,total_mb,free_mb,database_compatibility 
      2  from v$asm_diskgroup;
    
    GROUP_NUMBER NAME       SECTOR_SIZE BLOCK_SIZE ALLOCATION_UNIT_SIZE STATE       TYPE     TOTAL_MB    FREE_MB DATABASE_COMPATIBILI
    ------------ ---------- ----------- ---------- -------------------- ----------- ------ ---------- ---------- --------------------
               1 MYDATA             512       4096              1048576 MOUNTED     EXTERN       3826       2849 10.1.0.0.0
               2 DISK2              512       4096              1048576 MOUNTED     EXTERN          0          0 10.1.0.0.0

    我们发现此时这个磁盘组还是处于mount状态,但是total_mb和free_mb都变成了0,即虽然仍然被加载,但不可用。下面查年一下v$asm_disk:

    SQL> select group_number,disk_number,mount_status,header_status,state,redundancy,name,path,total_mb,free_mb,failgroup,label
      2  from v$asm_disk;
    
    GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU STATE    REDUNDA NAME       PATH                   TOTAL_MB    FREE_MB FAILGROUP                      LABEL
    ------------ ----------- ------- ------------ -------- ------- ---------- -------------------- ---------- ---------- ------------------------------ ----------
               1           0 CACHED  MEMBER       NORMAL   UNKNOWN VOL1       ORCL:VOL1                  1913       1425 VOL1                           VOL1
               1           1 CACHED  MEMBER       NORMAL   UNKNOWN VOL2       ORCL:VOL2                  1913       1424 VOL2                           VOL2
               2           0 CACHED  CANDIDATE    NORMAL   UNKNOWN VOL3       ORCL:VOL3                    54          4 VOL3                           VOL3

    我们发现在v$asm_disk中,空间正常,但是这个极重要的asm的header_status由原来的member变成了Candidate。

    我们将这个data2的diskgroup dismount掉,然后再mount。

    SQL> alter diskgroup DISK2 dismount;
    
    Diskgroup altered.
    
    SQL> alter diskgroup DISK2 mount;
    alter diskgroup DISK2 mount
    *
    ERROR at line 1:
    ORA-15032: not all alterations performed
    ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DISK2"
    

    我们发现此时,这个disk_group因为其中一个asm_disk的损坏已经不能正常的mount了。

    测试完毕,EXTERNAL REDUNDANCY的diskgroup一定要有外部的raid或其它做保证,这样才安全。

  • 相关阅读:
    task中cron表达式详解
    Markdown语法中原样显示# * >等特殊字符,不转换为相应语法格式
    Oracle19c创建表空间和用户(解决报错ORA65048: error encountered when processing the current DDL statement in pluggable database ORCLPDB1等问题)
    Markdown基础语法教程
    Tomcat 映射不同的域名到不同的项目
    祝你快乐!
    sqlserver索引与查询优化
    mysql 免安装包的 安装与配置
    讨论exe获取dll提供的单例,并获取单例所提供的带有vector<class A>& STL容器的返回值的情况提供1种解决方法
    数论笔记3[x],{x}及其应用
  • 原文地址:https://www.cnblogs.com/taowang2016/p/3158659.html
Copyright © 2020-2023  润新知