Friday, June 15, 2012

Add and remove disks from ASM diskgroup

One of the ASM disk in a four disk diskgroup was assigned from a slow storage. We decided to remove this disk from the diskgroup. One of the best feature of ASM is that you can add/ remove disks on ASM diskgroups even when database is open.


Lists asm disks in a diskgroup.

SQL> select path from v$asm_disk;
PATH
--------------------------------------------------------------------------------
/dev/rdisk/disk20
/dev/rdisk/disk21

...

disk20 --> comming from slow storage and we need to drop this one and add new one from fast storage.

First add new disks from fast storage. This will create room for data in a diskgroup.

$ sqlplus / as sysasm

SQL> alter diskgroup data add disk '/dev/rdisk/disk30';
Diskgroup altered.
SQL> alter diskgroup data add disk '/dev/rdisk/disk31';
Diskgroup altered.

SQL> alter diskgroup data add disk '/dev/rdisk/disk32';
Diskgroup altered.

SQL> alter diskgroup data add disk '/dev/rdisk/disk33';
Diskgroup altered.

SQL> select path from v$asm_disk;
PATH
--------------------------------------------------------------------------------
/dev/rdisk/disk20
/dev/rdisk/disk21
/dev/rdisk/disk30

/dev/rdisk/disk31
/dev/rdisk/disk32
/dev/rdisk/disk33

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      99312     182857       7040
         11



Wait for asm operation to finish.


SQL> select * from v$asm_operation;

SQL> alter diskgroup data drop disk '/dev/rdisk/disk20'

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      8153     165177       6990
          40

 Wait until it finishes.

SQL> select * from v$asm_operation;


Now check to see if that disk dropped from diskgroup.

SQL> select path from v$asm_disk;
PATH
--------------------------------------------------------------------------------
/dev/rdisk/disk21
/dev/rdisk/disk30

/dev/rdisk/disk31
/dev/rdisk/disk32
/dev/rdisk/disk33



/dev/rdisk/disk20 gone from the list.