Remove a disk from ASM diskgroup online

dropDiskPlan small

Story

Recently I have installed a new Oracle 12c database for testing purposes. I have had four 5 GB disks and by mistake I have configured all of them to create +DATA disk group in ASM.
Here is how my case looks like:

select group_number, disk_number, name, total_mb, free_mb, path
from v$asm_disk

 

DataAsmDisks

  

The state is presented on the chart below - four disks, all partially used.

fourDisksUsedChart

 

All of them (asm-disk1, asm-disk2, asm-disk3, asm-disk4) belongs to GROUP_NUMBER=1 which is +DATA ASM diskgroup which can be confirmed by the following query:

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

AsmDataGroup

 

Mission

Then I thought about creating +FRA diskgroup to store recovery data there. As more than a half (13 of 20 GB) of the storage is free (you can see it above - displayed by v$asm_diskgroup view), I decided to take two disks out of +DATA and use them for +FRA.

The plan is to:

  1. Instruct ASM to not store more data on DATA_0002 and DATA_0003.
  2. Move all existing data from DATA_0002 and DATA_0003 to the other two disks.
  3. Remove DATA_0002 and DATA_0003 from +DATA diskgroup.

 dropDiskPlan

 

Execution

To accomplish this mission, I need to reconnect to ASM instance (in my case it is ORACLE_SID=+ASM1) as a privileged user:

$ echo $ORACLE_SID
+ASM1
$ sqlplus / as sysasm
SQL*Plus: Release 12.1.0.1.0 Production on Sat Dec 7 21:44:18 2013
Copyright (c) 1982, 2013, Oracle. All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL>

 

Now, I request ASM to move all data from DATA_0002 and DATA_0003 to other disks in +DATA group and remove those them from the group.

SQL> alter diskgroup DATA drop disk DATA_0002, DATA_0003;
Diskgroup altered.

alter diskgroup <name> drop disk command also allows specifying a speed of the operation - alter diskgroup <name> drop disk <disks names> rebalance power <speed number>. The speed number is a number from 0 to 11 where 0 stops rebalancing and 11 means “full speed”. If not specified a value from ASM_POWER_LIMIT initialization parameter is used.

 

The operation is heavy and may take some time depending on disks speed, workload, speed number used and amount of data to be moved. I monitor a progress by querying v$asm_operation view:

SQL> select group_number, operation, state, est_minutes
from v$asm_operation;
GROUP_NUMBER OPERA STAT EST_MINUTES
------------ ----- ---- -----------
1            REBAL RUN  2
1            REBAL WAIT 0

 

Once the query stops return REBAL rows I confirm completion of dropping the disks by quering v$asm_disk view:

select group_number, disk_number, name, total_mb, free_mb, path, header_status
from v$asm_disk

DataAsmDisksDropped

HEADER_STATUS is FORMER which means that the disks were properly deleted from the diskgroup. You can also notice GROUP_NUMBER=0 so they no longer belongs to +DATA.

The current state can be presented on a chart like below:

twoDisksUsedChart

 

Mission accomplished. Now, I can use them to form +FRA and then to create Fast Recovery Area.