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 Overview
Section titled “Error Overview”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.
Common Causes
Section titled “Common Causes”Multipathing Misconfiguration
Section titled “Multipathing Misconfiguration”asm_diskstringmatches 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
Partition and Whole-Disk Overlap
Section titled “Partition and Whole-Disk Overlap”- Both
/dev/sdband/dev/sdb1match the discovery string - ASMLib disk and underlying device both discovered
- LVM PV path and raw device path both matched
Symlink Duplication
Section titled “Symlink Duplication”- UDEV rules creating multiple symlinks to same device
/dev/oracleasm/disks/*and/dev/sd*both included- Stale
/dev/disk/by-idand/dev/disk/by-pathentries
Cluster-Specific Issues
Section titled “Cluster-Specific Issues”- Different paths visible from different RAC nodes
- ASM filter driver (AFD) and ASMLib coexisting
Diagnostic Steps
Section titled “Diagnostic Steps”Identify Duplicate Paths
Section titled “Identify Duplicate Paths”-- Connect as SYSASMsqlplus / as sysasm
-- See all discovered disks (including duplicates)SELECT path, header_status, mount_status, name, labelFROM v$asm_diskWHERE header_status IN ('CANDIDATE', 'PROVISIONED', 'MEMBER')ORDER BY label, path;
-- Look for matching disk labels via different pathsSELECT label, COUNT(*), LISTAGG(path, ', ') WITHIN GROUP (ORDER BY path) AS pathsFROM v$asm_diskWHERE label IS NOT NULLGROUP BY labelHAVING COUNT(*) > 1;Check Current Discovery String
Section titled “Check Current Discovery String”SHOW PARAMETER asm_diskstring
-- Or via gv$SELECT inst_id, name, value FROM gv$parameter WHERE name = 'asm_diskstring';Validate at OS Level
Section titled “Validate at OS Level”# Show all paths to same physical devicemultipath -ll
# Find duplicate WWIDsls -l /dev/disk/by-id/scsi-* | awk '{print $11,$9}' | sort
# Compare device major/minor numbersls -l /dev/sdb /dev/mapper/mpathb /dev/oracleasm/disks/DISK1Check Multipath Configuration
Section titled “Check Multipath Configuration”# View multipath configcat /etc/multipath.conf
# Verify blacklist excludes underlying devicesgrep -A5 blacklist /etc/multipath.conf
# Check ASMLib configcat /etc/sysconfig/oracleasmResolution Steps
Section titled “Resolution Steps”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 pathsALTER 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 pathsALTER 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;2. Configure Multipath Blacklist
Section titled “2. Configure Multipath Blacklist”Prevent raw SCSI devices from being directly accessible to ASM:
# Edit /etc/multipath.confblacklist { 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 multipathmultipath -Fmultipath -v3systemctl restart multipathd3. 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:
# Stop database and ASMsrvctl stop database -d PRODsrvctl stop asm -force
# Configure AFDasmcmd afd_configureasmcmd afd_label DISK1 /dev/sdb1 --initasmcmd afd_scan
# Update discovery stringALTER SYSTEM SET asm_diskstring='AFD:*' SCOPE=BOTH;4. Fix UDEV Rules for Single Symlink
Section titled “4. Fix UDEV Rules for Single Symlink”KERNEL=="dm-*", ENV{DM_UUID}=="mpath-3600508b1001c...", \ OWNER="grid", GROUP="asmadmin", MODE="0660", \ SYMLINK+="oracle/asm-disk1"
# Reload rulesudevadm control --reload-rulesudevadm triggerCommon Scenarios
Section titled “Common Scenarios”Scenario 1: ASMLib + Raw Devices
Section titled “Scenario 1: ASMLib + Raw Devices”asm_diskstring = '/dev/oracleasm/disks/*,/dev/sd*'Fix: Remove /dev/sd* from discovery string.
Scenario 2: Multipathing Overlap
Section titled “Scenario 2: Multipathing Overlap”asm_diskstring = '/dev/mapper/*'But /dev/sd* still readable to grid userFix: Verify multipath has captured all relevant LUNs and asm_diskstring only matches /dev/mapper/.
Scenario 3: After Storage Migration
Section titled “Scenario 3: After Storage Migration”ORA-15020: discovered duplicate ASM disk "DATA_0001"Fix: Old paths still in asm_diskstring after migration. Update to new paths only.
Sample Diagnostic Output
Section titled “Sample Diagnostic Output”SQL> SELECT label, path, header_status FROM v$asm_disk 2 WHERE label = 'DATA_0001';
LABEL PATH HEADER_STATU-------------- --------------------------------- ------------DATA_0001 /dev/sdb1 MEMBERDATA_0001 /dev/mapper/mpathb-part1 MEMBERDATA_0001 /dev/oracleasm/disks/DATA_0001 MEMBERThree paths to the same physical disk — asm_diskstring is too broad.
Prevention Strategies
Section titled “Prevention Strategies”Single Source of Truth
Section titled “Single Source of Truth”- Use exactly one canonical path scheme: ASMLib OR AFD OR UDEV-managed
- Document chosen scheme in cluster runbook
- Audit
asm_diskstringafter every storage change
Multipath Best Practices
Section titled “Multipath Best Practices”# /etc/multipath.conf - Oracle-recommendeddefaults { 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" }}Validation After Storage Changes
Section titled “Validation After Storage Changes”-- Check disk count matches expectationSELECT COUNT(*) FROM v$asm_disk WHERE header_status = 'MEMBER';
-- Verify each label has exactly one pathSELECT label, COUNT(*) FROM v$asm_diskWHERE label IS NOT NULLGROUP BY labelHAVING COUNT(*) > 1;Related Errors
Section titled “Related Errors”- 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
Troubleshooting Checklist
Section titled “Troubleshooting Checklist”- Identify duplicate paths in
v$asm_diskby label - Audit
asm_diskstringfor overlapping patterns - Verify multipath blacklist excludes raw devices
- Choose single canonical path scheme (ASMLib/AFD/UDEV)
- Validate cluster-wide consistency
- Document final
asm_diskstringafter fix