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
gridOS 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