How to Add an ASM Diskgroup in Oracle

Step to add ASM diskgroup in Oracle

Oracle ASM (Automatic Storage Management) is a highly optimized volume manager and file system, widely used for managing database storage.
In this guide, we will learn how to:

✔ Add a new disk to ASM
✔ Discover the disk in ASM
✔ Create a new ASM Diskgroup
✔ Add disk to an existing ASM Diskgroup
✔ Verify the status

This tutorial works for Oracle 11g, 12c, 19c, 21c, and 23c.


🔧 Prerequisites

Before proceeding, ensure:

  • ASM instance is running
  • Grid Infrastructure is installed
  • You have grid OS user access
  • The new disk is visible at OS level
  • ASMLib or ASMFD (FD) is configured

🟡 Step 1: Add the Disk at the OS Level

As root user, scan the new disk:

lsblk
fdisk -l

Check the new device (example: /dev/sdc).


🟢 Step 2: Configure Disk for ASM

Option 1: Using ASMFD (Recommended for 19c/23c)

Run as root:

asmcmd afd_label DATA1 /dev/sdc1

Verify:

asmcmd afd_lsdsk

Option 2: Using ASMLib (Older Versions)

oracleasm createdisk DATA1 /dev/sdc1
oracleasm listdisks

🔵 Step 3: Discover Disk in ASM

Login as grid user:

sqlplus / as sysasm

Discover new disks:

ALTER SYSTEM SET asm_diskstring='/dev/oracleasm/disks/*','/dev/oracle/afd/*' SCOPE=BOTH;

List available disks:

SELECT name, path, header_status 
FROM v$asm_disk;

Look for disks with header_status = CANDIDATE.


🟣 Step 4: Create a New ASM Diskgroup

Example: creating a diskgroup named DATA using redundancy.

Normal Redundancy:

CREATE DISKGROUP DATA NORMAL REDUNDANCY
DISK '/dev/oracleasm/disks/DATA1';

External Redundancy:

CREATE DISKGROUP DATA EXTERNAL REDUNDANCY
DISK '/dev/oracleasm/disks/DATA1';

💠 Step 5: Add Disk to Existing Diskgroup

If you want to add disk to existing diskgroup:

ALTER DISKGROUP DATA ADD DISK '/dev/oracleasm/disks/DATA2';

To drop a disk:

ALTER DISKGROUP DATA DROP DISK DATA1;

🔄 Step 6: Rebalance the Diskgroup

Rebalance starts automatically, but you can control it:

ALTER DISKGROUP DATA REBALANCE POWER 8;

Monitor rebalance activity:

SELECT group_number, operation, state, power, est_minutes
FROM v$asm_operation;

🟢 Step 7: Check Diskgroup Status

SELECT name, total_mb, free_mb, state 
FROM v$asm_diskgroup;

List disks in the diskgroup

SELECT disk_number, name, total_mb, free_mb 
FROM v$asm_disk 
WHERE group_number = (SELECT group_number FROM v$asm_diskgroup WHERE name='DATA');

📝 Example: Complete Flow

# As root
fdisk -l
asmcmd afd_label DATA1 /dev/sdc1

# As grid
sqlplus / as sysasm

ALTER SYSTEM SET asm_diskstring='/dev/oracle/afd/*' SCOPE=BOTH;

CREATE DISKGROUP DATA EXTERNAL REDUNDANCY DISK '/dev/oracle/afd/DATA1';

ALTER DISKGROUP DATA ADD DISK '/dev/oracle/afd/DATA2';

SELECT name, total_mb, free_mb FROM v$asm_diskgroup;

🛑 Important Notes

  • Use ASMFD in 19c and later
  • Do not use OS-level formatting for ASM disks
  • Ensure multipath configuration in RAC
  • Always check ASM header status
  • Perform operations in a maintenance window

3 thoughts on “How to Add an ASM Diskgroup in Oracle

  1. Unknown's avatarAnonymous

    Hi, Sandeep

    Thanks for your post. Could you please explain the step 2. check the group in asm

    create diskgroup asmt1 external redundancy disk 'ORCL:ASMTEST';

    Do you need specify a size allocated when creating a diskgroup ?

    Thanks,
    Helen

    Reply

Leave a Reply