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或其它做保证,这样才安全。

 

posted @ 2013-06-27 14:24  taowang2016  阅读(1206)  评论(1编辑  收藏  举报