Tag Archives: location of Datafile

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