Skip to content

ORA-15020: Discovered Duplicate ASM Disk - Multipathing Diagnosis

ORA-15020: Discovered Duplicate ASM Disk “disk_name”

Section titled “ORA-15020: Discovered Duplicate ASM Disk “disk_name””

Error Text: ORA-15020: discovered duplicate ASM disk "DISK_NAME"

ORA-15020 means ASM found the same physical disk via two different paths. The most common cause is multipathing where ASM is matching both the underlying SCSI device (e.g., /dev/sdb) and the multipath alias (e.g., /dev/mapper/mpathb) against asm_diskstring. ASM correctly refuses to register the same disk twice.

  • asm_diskstring matches both raw SCSI paths and multipath aliases
  • DM-Multipath active but underlying /dev/sd* devices also visible
  • PowerPath, EMC PowerPath, or HDLM creating overlapping paths
  • Incorrect multipath blacklist allowing raw devices
  • Both /dev/sdb and /dev/sdb1 match the discovery string
  • ASMLib disk and underlying device both discovered
  • LVM PV path and raw device path both matched
  • UDEV rules creating multiple symlinks to same device
  • /dev/oracleasm/disks/* and /dev/sd* both included
  • Stale /dev/disk/by-id and /dev/disk/by-path entries
  • Different paths visible from different RAC nodes
  • ASM filter driver (AFD) and ASMLib coexisting
-- Connect as SYSASM
sqlplus / as sysasm
-- See all discovered disks (including duplicates)
SELECT path, header_status, mount_status, name, label
FROM v$asm_disk
WHERE header_status IN ('CANDIDATE', 'PROVISIONED', 'MEMBER')
ORDER BY label, path;
-- Look for matching disk labels via different paths
SELECT label, COUNT(*), LISTAGG(path, ', ') WITHIN GROUP (ORDER BY path) AS paths
FROM v$asm_disk
WHERE label IS NOT NULL
GROUP BY label
HAVING COUNT(*) > 1;
SHOW PARAMETER asm_diskstring
-- Or via gv$
SELECT inst_id, name, value FROM gv$parameter WHERE name = 'asm_diskstring';
Terminal window
# Show all paths to same physical device
multipath -ll
# Find duplicate WWIDs
ls -l /dev/disk/by-id/scsi-* | awk '{print $11,$9}' | sort
# Compare device major/minor numbers
ls -l /dev/sdb /dev/mapper/mpathb /dev/oracleasm/disks/DISK1
Terminal window
# View multipath config
cat /etc/multipath.conf
# Verify blacklist excludes underlying devices
grep -A5 blacklist /etc/multipath.conf
# Check ASMLib config
cat /etc/sysconfig/oracleasm

1. Restrict asm_diskstring to Multipath Only

Section titled “1. Restrict asm_diskstring to Multipath Only”

The cleanest fix is narrowing the discovery string to a single canonical path:

-- Option A: Use multipath device-mapper paths
ALTER SYSTEM SET asm_diskstring='/dev/mapper/mpath*' SCOPE=BOTH;
-- Option B: Use ASMLib paths (recommended on RHEL/OL with ASMLib)
ALTER SYSTEM SET asm_diskstring='/dev/oracleasm/disks/*' SCOPE=BOTH;
-- Option C: Use UDEV-managed paths
ALTER SYSTEM SET asm_diskstring='/dev/oracle/asm-*' SCOPE=BOTH;

After changing, restart ASM or trigger rediscovery:

ALTER SYSTEM SET asm_diskstring='' SCOPE=MEMORY;
ALTER SYSTEM SET asm_diskstring='/dev/mapper/mpath*' SCOPE=MEMORY;

Prevent raw SCSI devices from being directly accessible to ASM:

Terminal window
# Edit /etc/multipath.conf
blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z]"
}
blacklist_exceptions {
wwid "3600508b1001c..." # only multipath-managed WWIDs
}
# Reload multipath
multipath -F
multipath -v3
systemctl restart multipathd

3. Use ASM Filter Driver (AFD) Exclusively

Section titled “3. Use ASM Filter Driver (AFD) Exclusively”

If migrating to AFD, disable ASMLib and configure exclusive paths:

Terminal window
# Stop database and ASM
srvctl stop database -d PROD
srvctl stop asm -force
# Configure AFD
asmcmd afd_configure
asmcmd afd_label DISK1 /dev/sdb1 --init
asmcmd afd_scan
# Update discovery string
ALTER SYSTEM SET asm_diskstring='AFD:*' SCOPE=BOTH;
/etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="dm-*", ENV{DM_UUID}=="mpath-3600508b1001c...", \
OWNER="grid", GROUP="asmadmin", MODE="0660", \
SYMLINK+="oracle/asm-disk1"
# Reload rules
udevadm control --reload-rules
udevadm trigger
asm_diskstring = '/dev/oracleasm/disks/*,/dev/sd*'

Fix: Remove /dev/sd* from discovery string.

asm_diskstring = '/dev/mapper/*'
But /dev/sd* still readable to grid user

Fix: Verify multipath has captured all relevant LUNs and asm_diskstring only matches /dev/mapper/.

ORA-15020: discovered duplicate ASM disk "DATA_0001"

Fix: Old paths still in asm_diskstring after migration. Update to new paths only.

SQL> SELECT label, path, header_status FROM v$asm_disk
2 WHERE label = 'DATA_0001';
LABEL PATH HEADER_STATU
-------------- --------------------------------- ------------
DATA_0001 /dev/sdb1 MEMBER
DATA_0001 /dev/mapper/mpathb-part1 MEMBER
DATA_0001 /dev/oracleasm/disks/DATA_0001 MEMBER

Three paths to the same physical disk — asm_diskstring is too broad.

  • Use exactly one canonical path scheme: ASMLib OR AFD OR UDEV-managed
  • Document chosen scheme in cluster runbook
  • Audit asm_diskstring after every storage change
Terminal window
# /etc/multipath.conf - Oracle-recommended
defaults {
user_friendly_names yes
find_multipaths yes
}
devices {
device {
vendor "EMC"
product ".*"
path_grouping_policy "group_by_prio"
path_checker "tur"
no_path_retry "queue"
}
}
-- Check disk count matches expectation
SELECT COUNT(*) FROM v$asm_disk WHERE header_status = 'MEMBER';
-- Verify each label has exactly one path
SELECT label, COUNT(*) FROM v$asm_disk
WHERE label IS NOT NULL
GROUP BY label
HAVING COUNT(*) > 1;
  • ORA-15014: Path is not in the discovery set
  • ORA-15025: Could not open disk
  • ORA-15032: Not all alterations performed
  • ORA-15041: Diskgroup space exhausted
  • ORA-15042: ASM disk is missing
  • Identify duplicate paths in v$asm_disk by label
  • Audit asm_diskstring for overlapping patterns
  • Verify multipath blacklist excludes raw devices
  • Choose single canonical path scheme (ASMLib/AFD/UDEV)
  • Validate cluster-wide consistency
  • Document final asm_diskstring after fix