ORA-15410: Disks in disk group do not have equal size

I was trying the last night add a disk to an AMS diskgroup (Normal Redundancy)  but when I added the disk I received the “ORA-15410: Disks in disk group DATA_TEST do not have equal size”. In older asm version I could add disk of different size without any issue, researching a little bit I found that oracle had set up this restriction on the oracle version 12.1.0.2 therefor If you are using this version you can’t add disk on different sizes.

On the Note (MOS 1938950.1) they explained the causes of this issue, one of them are to avoid the allocation problems like “ORA-15041: diskgroup space exhausted”.  Also to if the disk have the same size ASM spread the files over all the disk in the same way, so this constrain ensure that all of the disk in a diskgroup have the same I/O load. It’s make sense for me.

Just to clarify, it doesn’t matter if you set compatible asm diskgroup to older version, this constrain is set up on ASM engine version.

I have 5 disks, two of them 5GB, one with 10G and two of 100GB

SQL> SELECT group_number, disk_number, path,os_mb,header_status FROM   v$asm_disk where HEADER_STATUS!='MEMBER';

GROUP_NUMBER DISK_NUMBER PATH                      OS_MB HEADER_STATU
------------ ----------- -------------------- ---------- ------------
           0           0 /dev/asmdatatest2          5114 CANDIDATE
           0           1 /dev/asmdata2            102398 CANDIDATE
           0           4 /dev/asmdatatest1          5114 CANDIDATE
           0           3 /dev/asmdatatest3         10236 CANDIDATE
           0           2 /dev/asmdata1            102398 CANDIDATE

I created the diskgroup with normal redundancy


SQL> CREATE DISKGROUP DATA_TEST NORMAL REDUNDANCY
FAILGROUP DATAFG1 DISK '/dev/asmdatatest1'
FAILGROUP DATAFG2 DISK '/dev/asmdatatest2'
ATTRIBUTE 'compatible.asm' ='10.1.0.0.0', 'compatible.rdbms'='10.1.0.0.0'; 2 3 4

Diskgroup created.

When I was trying to add the disk, I received the following error message:


SQL> alter diskgroup data_test add disk '/dev/asmdatatest3' rebalance power 11;
alter diskgroup data_test add disk '/dev/asmdatatest3' rebalance power 11
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15410: Disks in disk group DATA_TEST do not have equal size.

We can’t avoid this constrain but there are two possible solutions to carry out ( I won’t write the solution about “Use the same size disks because I think it is implicit”:

Solution one:

If you have a bigger disk like my case (10228M) you can restrict to the required samaller disks (5114M) at ASM level:


SQL> alter diskgroup data_test add disk '/dev/asmdatatest3' size 5114M rebalance power 11;

Diskgroup altered.

SQL> SELECT name, failgroup, total_mb, free_mb from v$asm_disk where name like '%DATA_TEST%';

NAME                           FAILGROUP                        TOTAL_MB    FREE_MB
------------------------------ ------------------------------ ---------- ----------
DATA_TEST_0000                 DATAFG1                              5114       5063
DATA_TEST_0001                 DATAFG2                              5114       5063
DATA_TEST_0002                 DATA_TEST_0002                       5114       5063

SQL> select name, compatibility from v$asm_diskgroup;

NAME                           COMPATIBILITY
------------------------------ ------------------------------------------------------------
DATA_TEST                      10.1.0.0.0
FRA                            12.1.0.0.0
DATA                           12.1.0.0.0

This solution for me it’s a very waste of space… so let’s take a look the other one:

Solution two:

In case you need to replace the entire ASM disks in a diskgroup, with bigger ones, you can first drop the old small disks and then add the new ones.


SQL> SELECT g.name dg_name,d.name dk_name, d.path , d.total_mb disk_size_mb, d.state dk_state
FROM v$asm_disk d, v$asm_diskgroup g
WHERE g.group_number=d.group_number
AND   g.name='DATA_TEST';  2    3    4

DG_NAME                        DK_NAME                        PATH                 DISK_SIZE_MB DK_STATE
------------------------------ ------------------------------ -------------------- ------------ --------
DATA_TEST                      DATA_TEST_0000                 /dev/asmdatatest1            5114 NORMAL
DATA_TEST                      DATA_TEST_0001                 /dev/asmdatatest2            5114 NORMAL
DATA_TEST                      DATA_TEST_0002                 /dev/asmdatatest3            5114 NORMAL

SQL> ALTER DISKGROUP DATA_TEST DROP DISK DATA_TEST_0000, DATA_TEST_0001,DATA_TEST_0002 ADD
FAILGROUP DATA_0004 DISK '/dev/asmdata1'SIZE 102398M
FAILGROUP DATA_0005 DISK '/dev/asmdata2' SIZE 102398M;   2    3

Diskgroup altered.

Checking the process and the final results:

SQL> select * from v$asm_operation;

GROUP_NUMBER OPERA PASS      STAT      POWER     ACTUAL      SOFAR   EST_WORK   EST_RATE EST_MINUTES ERROR_CODE          CON_ID
------------ ----- --------- ---- ---------- ---------- ---------- ---------- ---------- ----------- --------------- ----------
           1 REBAL RESYNC    DONE          1          1          0          0          0           0                          0
           1 REBAL REBALANCE RUN           1          1        144        147       1149           0                          0
           1 REBAL COMPACT   WAIT          1          1          0          0          0           0                          0

SQL> alter diskgroup data_test rebalance power 11;

Diskgroup altered.

SQL> select * from v$asm_operation;

no rows selected

SQL> /

no rows selected

SQL> SELECT g.name dg_name,d.name dk_name, d.path , d.total_mb disk_size_mb, d.state dk_state
FROM v$asm_disk d, v$asm_diskgroup g
WHERE g.group_number=d.group_number
AND   g.name='DATA_TEST';  2    3    4

DG_NAME                        DK_NAME                        PATH                 DISK_SIZE_MB DK_STATE
------------------------------ ------------------------------ -------------------- ------------ --------
DATA_TEST                      DATA_TEST_0003                 /dev/asmdata1              102398 NORMAL
DATA_TEST                      DATA_TEST_0004                 /dev/asmdata2              102398 NORMAL

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s