V$ASM_DISK - Monitor ASM Disk Status, I/O & Errors
V$ASM_DISK
Section titled “V$ASM_DISK”Overview
Section titled “Overview”V$ASM_DISK displays one row for every disk discovered by the ASM instance, regardless of whether the disk is currently a member of a diskgroup. DBAs query it to verify disk health, review cumulative I/O throughput, detect read and write errors, and confirm that expected disks are visible to the ASM instance. It is the first view to check when a diskgroup fails to mount, when ORA-15042 (ASM disk missing) is raised, or when disk-level I/O imbalance is suspected.
The view is available from the ASM instance itself and also from a database instance if the ASM_DISKGROUPS parameter is set and the instance is connected to an ASM instance. In RAC environments, each node’s ASM instance exposes its own discovery results, so cross-node comparisons require querying all instances.
View Type: Dynamic Performance View (ASM instance) Available Since: Oracle 10g Release 1 Required Privileges: SELECT on V_$ASM_DISK or SYSASM role or SELECT_CATALOG_ROLE
Key Columns
Section titled “Key Columns”| Column | Datatype | Description |
|---|---|---|
| GROUP_NUMBER | NUMBER | Diskgroup number this disk belongs to; 0 means the disk is not a member of any diskgroup |
| DISK_NUMBER | NUMBER | Disk number within the diskgroup; unique per group |
| NAME | VARCHAR2(30) | ASM disk name (e.g., DATA_0000); blank if not assigned to a diskgroup |
| PATH | VARCHAR2(256) | OS path or device name used to access the disk (e.g., /dev/sdb, AFD:DATA_0000) |
| STATE | VARCHAR2(11) | Disk state: NORMAL, ADDING, FAILING, DROPPING, HUNG, CLEANING, UNCHECKED, or UNKNOWN |
| TOTAL_MB | NUMBER | Total size of the disk in megabytes |
| FREE_MB | NUMBER | Free space remaining on the disk in megabytes |
| OS_MB | NUMBER | Disk size as reported by the OS, which may differ from TOTAL_MB due to ASM metadata overhead |
| READS | NUMBER | Cumulative number of read I/O operations on this disk since ASM instance startup |
| WRITES | NUMBER | Cumulative number of write I/O operations on this disk since ASM instance startup |
| READ_ERRS | NUMBER | Cumulative number of read errors; any non-zero value warrants investigation |
| WRITE_ERRS | NUMBER | Cumulative number of write errors; any non-zero value warrants investigation |
| READ_TIME | NUMBER | Cumulative time in seconds spent on read I/O |
| WRITE_TIME | NUMBER | Cumulative time in seconds spent on write I/O |
| BYTES_READ | NUMBER | Total bytes read from this disk since startup |
| BYTES_WRITTEN | NUMBER | Total bytes written to this disk since startup |
| HEADER_STATUS | VARCHAR2(12) | Disk header status: MEMBER, CANDIDATE, INCOMPATIBLE, PROVISIONED, FOREIGN, UNKNOWN |
| MODE_STATUS | VARCHAR2(8) | Mount mode: ONLINE or OFFLINE |
| REDUNDANCY | VARCHAR2(12) | Redundancy contribution: FULL, MIRROR, HIGH, PARITY, or UNKNOWN |
| MOUNT_STATUS | VARCHAR2(9) | Whether the disk is CACHED, OPEN, CLOSED, or MISSING |
Essential Queries
Section titled “Essential Queries”Basic Usage
Section titled “Basic Usage”List all ASM disks with their diskgroup membership, size, and current state:
SELECT d.group_number, d.disk_number, d.name AS disk_name, d.path, d.state, d.mode_status, d.header_status, d.mount_status, ROUND(d.total_mb / 1024, 2) AS total_gb, ROUND(d.free_mb / 1024, 2) AS free_gb, ROUND((d.total_mb - d.free_mb) / 1024, 2) AS used_gb, ROUND((1 - d.free_mb / NULLIF(d.total_mb, 0)) * 100, 1) AS pct_usedFROM v$asm_disk dORDER BY d.group_number, d.disk_number;Error Detection
Section titled “Error Detection”Find any ASM disk with read or write errors — the first query to run when investigating storage alerts:
SELECT d.group_number, d.disk_number, d.name AS disk_name, d.path, d.state, d.mode_status, d.read_errs, d.write_errs, d.reads, d.writes, ROUND(d.read_errs / NULLIF(d.reads, 0) * 100, 4) AS read_err_pct, ROUND(d.write_errs / NULLIF(d.writes, 0) * 100, 4) AS write_err_pctFROM v$asm_disk dWHERE d.read_errs > 0 OR d.write_errs > 0 OR d.state NOT IN ('NORMAL', 'UNCHECKED')ORDER BY d.write_errs DESC, d.read_errs DESC;I/O Balance Analysis
Section titled “I/O Balance Analysis”Compare read and write throughput across all disks in a diskgroup to detect I/O imbalance, which can indicate a misconfigured failure group or a failing disk being avoided:
SELECT d.group_number, g.name AS diskgroup_name, d.disk_number, d.name AS disk_name, d.path, d.reads, d.writes, ROUND(d.bytes_read / 1024 / 1024 / 1024, 2) AS gb_read, ROUND(d.bytes_written / 1024 / 1024 / 1024, 2) AS gb_written, ROUND(d.read_time, 2) AS read_secs, ROUND(d.write_time, 2) AS write_secs, ROUND(d.read_time / NULLIF(d.reads, 0) * 1000, 3) AS avg_read_ms, ROUND(d.write_time / NULLIF(d.writes, 0) * 1000, 3) AS avg_write_msFROM v$asm_disk d JOIN v$asm_diskgroup g ON g.group_number = d.group_numberWHERE d.group_number > 0ORDER BY g.name, d.disk_number;Offline and Non-Member Disk Audit
Section titled “Offline and Non-Member Disk Audit”Find disks that are offline, in a failed state, or not yet assigned to a diskgroup — important during disk replacement workflows:
SELECT d.group_number, d.disk_number, d.name AS disk_name, d.path, d.state, d.mode_status, d.header_status, d.mount_status, ROUND(d.total_mb / 1024, 2) AS total_gb, d.read_errs, d.write_errsFROM v$asm_disk dWHERE d.mode_status = 'OFFLINE' OR d.group_number = 0 OR d.state NOT IN ('NORMAL', 'UNCHECKED')ORDER BY d.state, d.group_number, d.disk_number;Disk Space Summary per Diskgroup
Section titled “Disk Space Summary per Diskgroup”Aggregate disk-level space metrics to cross-check against V$ASM_DISKGROUP totals:
SELECT d.group_number, g.name AS diskgroup_name, COUNT(*) AS disk_count, ROUND(SUM(d.total_mb) / 1024, 2) AS raw_total_gb, ROUND(SUM(d.free_mb) / 1024, 2) AS raw_free_gb, ROUND(SUM(d.reads)) AS total_reads, ROUND(SUM(d.writes)) AS total_writes, SUM(d.read_errs) AS total_read_errs, SUM(d.write_errs) AS total_write_errs, MIN(d.state) AS min_state, MAX(d.state) AS max_stateFROM v$asm_disk d JOIN v$asm_diskgroup g ON g.group_number = d.group_numberWHERE d.group_number > 0GROUP BY d.group_number, g.nameORDER BY g.name;Common Use Cases
Section titled “Common Use Cases”- Diagnosing ORA-15042 (ASM disk missing) — Query WHERE mode_status = ‘OFFLINE’ or state = ‘MISSING’ to identify which disk is absent and which diskgroup is affected before attempting DROP DISK or ONLINE DISK
- Storage hardware failure triage — Filter on read_errs > 0 OR write_errs > 0 as the first step when the OS or SAN reports storage errors; correlate disk PATH with the OS device name to identify the failing LUN
- I/O imbalance detection — Compare avg_read_ms and avg_write_ms across disks in the same diskgroup; a disk with significantly higher latency may be failing or undersized relative to peers
- Pre-rebalance validation — Before adding or dropping disks, confirm all existing disks are NORMAL and ONLINE to avoid rebalance operations compounding an existing fault
- Candidate disk discovery — Disks with GROUP_NUMBER = 0 and HEADER_STATUS = CANDIDATE are visible to ASM but not yet in a diskgroup; use this to confirm new storage is correctly provisioned before running ADD DISK
- Capacity planning — Aggregate FREE_MB and TOTAL_MB per diskgroup to validate that free space stays above the REQUIRED_MIRROR_FREE_MB threshold reported in V$ASM_DISKGROUP
Related Views
Section titled “Related Views”- V$ASM_DISKGROUP — Diskgroup-level space, redundancy type, and rebalance status; always check alongside V$ASM_DISK for a full storage picture
- V$ASM_FILE — Individual files stored in ASM; join via GROUP_NUMBER to map files to their physical disks
- V$ASM_OPERATION — Shows active rebalance and rebuild operations; query when a disk state is ADDING or DROPPING to monitor progress
- V$ASM_CLIENT — Lists database instances connected to the ASM instance; join on GROUP_NUMBER to see which databases depend on a diskgroup
- V$ASM_DISK_STAT — Identical columns to V$ASM_DISK but does not perform a discovery scan, making it faster for frequent polling at the cost of potentially stale path information
Version Notes
Section titled “Version Notes”- Oracle 10g R1: View introduced alongside ASM; core columns GROUP_NUMBER through WRITE_ERRS available
- Oracle 10g R2: BYTES_READ and BYTES_WRITTEN columns added for throughput monitoring
- Oracle 11g R2: Oracle Flex ASM capability added; MOUNT_STATUS column expanded to reflect cached disk states in Flex ASM
- Oracle 12c: CON_ID column added; in a CDB, ASM views accessed from the CDB root include all PDB-owned diskgroups
- Oracle 18c / 19c: AFD (ASM Filter Driver) paths (AFD:diskname) appear in the PATH column when AFD is configured; REDUNDANCY column reflects parity redundancy for FLEX diskgroups
- Oracle 21c / 23ai: No structural changes; Extended Distance Clustering configurations may show additional MOUNT_STATUS states for stretched diskgroups