ASM: Adding disk “_DROPPED%” FORCE

2024-02-21ASM / Oracle / RAC

Ok doke,

First let I make it clear: Adding a disk with force should be avoided, mainly by all the rebalance involved. The best choice, if you has “time”, is to just put disks online, like:

1) ALTER DISKGROUP ONLINE DISK ; or

2) ALTER DISKGROUP ONLINE DISKS IN FAILGROUP ; or

3) ALTER DISKGROUP ONLINE ALL;

But, the post is about adding back to DG the dropped disks.

Let’s imagine, to undestand my situation, you lost the contact with one of your two site storage… In this example, represented by failgroup FGAUX. You would see the disks like this:

SQL> select name,failgroup,state from v$asm_disk a where state <> 'NORMAL';

NAME FAILGROUP STATE

—————————— —————————— ——–

_DROPPED_0000_DGDATA FGAUX FORCING

_DROPPED_0001_DGDATA FGAUX FORCING

_DROPPED_0002_DGDATA FGAUX FORCING

So, you know your disks by the name pattern (0 are FGMAIN and 1 are FGAUX, the problematic). You can do something like:

[root@database-host ~]# /etc/init.d/oracleasm listdisks |grep DGDATA

DGDATA001

DGDATA002

DGDATA003

DGDATA101

DGDATA102

DGDATA103

Now, make the simple… 1f642.svg

SQL> ALTER DISKGROUP DGDATA ADD

FAILGROUP FGAUX

DISK

'ORCL:DGDATA101' name DGDATA101 FORCE,

'ORCL:DGDATA102' name DGDATA102 FORCE,

'ORCL:DGDATA103' name DGDATA103 FORCE;

Diskgroup altered.

SQL> ALTER DISKGROUP DGDATA rebalance power 8;

Diskgroup altered.

While waiting the reball, let’s see the disks in DG:

SQL> select * from v$asm_operation where group_number=(select group_number from v$asm_diskgroup where name='DGDATA');

GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ERROR_CODE

———— —– —- ———- ———- ———- ———- ———- ———– ——————————————–

3 REBAL WAIT 8

SQL> select name,failgroup,state from v$asm_disk a where group_number=(select group_number from v$asm_diskgroup where name='DGDATA');

NAME FAILGROUP STATE

—————————— —————————— ——–

_DROPPED_0000_DGDATA FGAUX FORCING

_DROPPED_0001_DGDATA FGAUX FORCING

_DROPPED_0002_DGDATA FGAUX FORCING

DGDATA101 FGAUX NORMAL

DGDATA102 FGAUX NORMAL

DGDATA103 FGAUX NORMAL

DGDATA001 FGMAIN NORMAL

DGDATA002 FGMAIN NORMAL

DGDATA003 FGMAIN NORMAL

And, when the rebalance end, the situation will be OK:

SQL> select * from v$asm_operation where group_number=(select group_number from v$asm_diskgroup where name='DGDATA');

GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ERROR_CODE

———— —– —- ———- ———- ———- ———- ———- ———– ——————————————–

3 REBAL RUN 8 8 629 19087 10143 1

SQL> select * from v$asm_operation where group_number=(select group_number from v$asm_diskgroup where name='DGDATA');

no rows selected

SQL> select name,failgroup,state from v$asm_disk a where group_number=(select group_number from v$asm_diskgroup where name='DGDATA');

NAME FAILGROUP STATE

—————————— —————————— ——–

DGDATA101 FGAUX NORMAL

DGDATA102 FGAUX NORMAL

DGDATA103 FGAUX NORMAL

DGDATA001 FGMAIN NORMAL

DGDATA002 FGMAIN NORMAL

DGDATA003 FGMAIN NORMAL

OK? EasMatheus.