ASM磁盘的磁盘的增加与删除
在现在流行的RAC系统安装中,ASM的安装主要是两种安装模式
第一种是最常用的ASMLIB的方式。就需要根据linux的内核的版本去oracle的官网站到asmlib的驱动包。
第二种方式是使用udev的方式。
udev的方式,我是在刘相兵的网站上看到的这种方式的,认真的学习过他的视频之后,逐渐喜欢上了这种安装的方式。毕竟少了一个asmlib的软件,也少了一层系统管理维护的额外开销。
我有相关的使用udev安装的方式的文档。可以查看具体的安装方法。
要先管理维护一个rac的asm就首先要搞清楚是使用asmlib的安装方式,还是使用udev的安装方式。
如果是使用asmlib做驱动了,那么就会在/etc/init.d/下有一个oracleasm的文件,该文件是一个可执行的文件。如果能找到这个文件,就可以初步判定是使用asmlib的方式。
增加磁盘
我现在演示的是在UDEV的方式下添加和删除磁盘。需要注意的是,这些操作都是在sysasm操作下完成的,如果在sysdba权限下,是操作不了的,会报权限不足。
[root@db1 ~]# su - grid [grid@db1 ~]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 5 15:48:35 2014
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Real Application Clusters and Automatic Storage Management options
SQL> |
首先确定有几个磁盘组
SQL> select group_number, name, total_mb, free_mb from v$asm_diskgroup;
GROUP_NUMBER NAME TOTAL_MB FREE_MB ------------ ------------------------------ ---------- ---------- 1 DATA 6144 4045 |
确定该磁盘组里有几个磁盘
SQL> l 1* select group_number,disk_number, MOUNT_STATUS, LIBRARY ,path,label from v$asm_disk SQL> /
GROUP_NUMBER DISK_NUMBER MOUNT_S LIBRARY PATH LABEL ------------ ----------- ------- ---------- -------------------- ------------------------------- 0 0 CLOSED System /dev/random 0 1 CLOSED System /dev/asm-diske 1 2 CACHED System /dev/asm-diskd 1 1 CACHED System /dev/asm-diskc 1 0 CACHED System /dev/asm-diskb |
可以看到group 1里也就是data磁盘组里,有3块磁盘,现在将/dev/asm-diske这一块磁盘,加到DATA磁盘组里
使用以下命令,将asm-diske加到磁盘组中,
alter diskgroup DATA add disk '/dev/asm-diske'; |
命令很快执行完了,但是此时asm需要有一个rebalance的操作,可以去查看到这个操作
[grid@db1 ~]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 6 10:39:56 2014
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Real Application Clusters and Automatic Storage Management options
SQL> select * from v$asm_operation;
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE ------------ ----- ---- ---------- ---------- ---------- ---------- ---------- EST_MINUTES ERROR_CODE ----------- -------------------------------------------- 1 REBAL RUN 1 1 22 522 285 1
SQL> /
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE ------------ ----- ---- ---------- ---------- ---------- ---------- ---------- EST_MINUTES ERROR_CODE ----------- -------------------------------------------- 1 REBAL RUN 1 1 88 523 539 0
SQL> /
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- ERROR_CODE -------------------------------------------- 1 REBAL RUN 1 0 512 525 722 0
SQL> /
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- ERROR_CODE -------------------------------------------- 1 REBAL WAIT 1
SQL> /
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- ERROR_CODE -------------------------------------------- 1 REBAL WAIT 1
SQL> /
no rows selected
|
可以看到rebalance的操作的OPERA STAT列的状态由REBAL RUN,逐渐转变成REBAL WAIT,最后这个查询就查不到任何记录,这个时候表明rebalance的操作已经完成。
接下来可以去验证该操作。
SQL> select group_number, disk_number, os_mb, total_mb, free_mb from v$asm_disk;
GROUP_NUMBER DISK_NUMBER OS_MB TOTAL_MB FREE_MB ------------ ----------- ---------- ---------- ---------- 0 0 16384 0 0 1 3 2048 2048 1534 1 2 2048 2048 1530 1 1 2048 2048 1530 1 0 2048 2048 1497
|
可以看到group_number为1的磁盘组data,有4个磁盘,并且free_mb基本都是在1530左右,这就表明数据已经rebalance到diske上了。
至此添加磁盘的操作基本完毕。
删除磁盘
在删除的时候,跟添加有点不一样,需要知道这个diske在磁盘组里叫什么名字,否则直接去删/dev/asm-diske,是删不掉的。
SQL> select group_number,name,path, disk_number, os_mb, total_mb, free_mb from v$asm_disk;
GROUP_NUMBER NAME PATH DISK_NUMBER OS_MB TOTAL_MB FREE_MB ------------ ------------------------------ -------------------- ----------- ---------- ---------- ---------- 0 /dev/random 0 16384 0 0 1 DATA_0003 /dev/asm-diske 3 2048 2048 1534 1 DATA_0002 /dev/asm-diskd 2 2048 2048 1530 1 DATA_0001 /dev/asm-diskc 1 2048 2048 1530 1 DATA_0000 /dev/asm-diskb 0 2048 2048 1497 |
可以看到diske的名字叫做DATA_0003,现在就去删除这个disk
SQL> alter diskgroup DATA drop disk 'DATA_0003';
Diskgroup altered. |
此时再去查v$asm_operation视图,可以看到正在操作的过程。
SQL> select * from v$asm_operation;
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- ERROR_CODE -------------------------------------------- 1 REBAL RUN 1 1 19 510 495 1
SQL> /
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- ERROR_CODE -------------------------------------------- 1 REBAL RUN 1 1 501 526 961 0
SQL> /
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- ERROR_CODE -------------------------------------------- 1 REBAL REAP 1
SQL> /
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- ERROR_CODE -------------------------------------------- 1 REBAL WAIT 1
SQL> /
no rows selected |
再次确认磁盘是否从磁盘组中已经删除
SQL> select group_number,name,path, disk_number, os_mb, total_mb, free_mb from v$asm_disk;
GROUP_NUMBER NAME PATH DISK_NUMBER OS_MB TOTAL_MB FREE_MB ------------ --------------- -------------------- ----------- ---------- ---------- ---------- 0 /dev/random 0 16384 0 0 0 /dev/asm-diske 1 2048 0 0 1 DATA_0002 /dev/asm-diskd 2 2048 2048 1358 1 DATA_0001 /dev/asm-diskc 1 2048 2048 1359 1 DATA_0000 /dev/asm-diskb 0 2048 2048 1328 |
可以看到group_number为1的磁盘组里只有三块磁盘了表明已经正常删除了
在查询视图的过程中会有一些字段标志该磁盘是正处于什么状态,这个在后续文档中继续补充