Skip to content

ORA-15012: ASM File Does Not Exist - Locate and Recover ASM Files

ORA-15012: ASM File “filename” Does Not Exist

Section titled “ORA-15012: ASM File “filename” Does Not Exist”

Error Text: ORA-15012: ASM file '+DG/path/file.dbf' does not exist

ORA-15012 occurs when Oracle attempts to open or reference an ASM file by its fully qualified or alias name and ASM cannot locate it. The file may have been dropped, the alias may be orphaned, or the path may include a typo or unmounted diskgroup.

  • Datafile or tempfile dropped from database while ASM file remained orphaned
  • Manual ASMCMD rm of a file still referenced by control file
  • RMAN cleanup operation removed the underlying file
  • ALTER DATABASE DROP DATAFILE did not remove ASM alias
  • Alias points to a file_number that no longer exists
  • Two-stage rename failed mid-operation
  • Diskgroup rebalance left stale alias pointers
  • Wrong diskgroup name in path
  • Missing slash or extra character in alias
  • Case sensitivity in quoted alias names
  • Incorrect file_number/incarnation pair
  • Required diskgroup not mounted
  • Diskgroup mounted on different ASM instance
  • File belongs to a dismounted secondary diskgroup
Terminal window
# Connect to ASM
asmcmd
# Navigate to expected path
ASMCMD> cd +DATA/PROD/DATAFILE
ASMCMD> ls -l
# Search for file
ASMCMD> find +DATA users01
# Show file alias and underlying physical name
ASMCMD> ls -l +DATA/PROD/DATAFILE/users.265.1234567890
-- Connect as SYSASM
sqlplus / as sysasm
-- Look up file by alias
SELECT a.name AS alias, a.file_number, a.file_incarnation,
f.bytes/1024/1024 AS size_mb
FROM v$asm_alias a
LEFT JOIN v$asm_file f
ON a.file_number = f.file_number
AND a.file_incarnation = f.incarnation
WHERE a.name = 'USERS01.DBF';
-- Find orphaned aliases (no matching file)
SELECT a.system_created, a.name, a.file_number, a.file_incarnation
FROM v$asm_alias a
LEFT JOIN v$asm_file f
ON a.group_number = f.group_number
AND a.file_number = f.file_number
WHERE f.file_number IS NULL
AND a.alias_directory = 'N';
-- All files in a diskgroup
SELECT file_number, incarnation, type, bytes/1024/1024 AS mb
FROM v$asm_file
WHERE group_number = (SELECT group_number FROM v$asm_diskgroup WHERE name = 'DATA');
-- Connect to RDBMS instance
SELECT file_id, file_name, status, online_status
FROM dba_data_files
WHERE file_name LIKE '%file_in_question%';
-- Check controlfile references
SELECT name FROM v$datafile WHERE name LIKE '+DATA%';
SELECT name FROM v$tempfile WHERE name LIKE '+DATA%';
SELECT member FROM v$logfile WHERE member LIKE '+DATA%';

1. File Genuinely Missing - Restore from Backup

Section titled “1. File Genuinely Missing - Restore from Backup”
-- Take affected datafile offline
ALTER DATABASE DATAFILE '+DATA/PROD/DATAFILE/users.265.1234567890' OFFLINE;
-- Restore via RMAN
RMAN> RESTORE DATAFILE 5;
RMAN> RECOVER DATAFILE 5;
-- Bring online
ALTER DATABASE DATAFILE 5 ONLINE;
Terminal window
# Connect to ASMCMD
asmcmd
# Remove orphaned alias (does not delete file if referenced)
ASMCMD> rm +DATA/PROD/DATAFILE/orphan_alias.dbf
# For directory orphans
ASMCMD> rmalias +DATA/PROD/DATAFILE/old_alias
-- Find actual location in controlfile
SELECT file#, name FROM v$datafile WHERE file# = 5;
-- Or rebuild controlfile reference
ALTER DATABASE RENAME FILE '+OLD_DG/file.dbf'
TO '+DATA/PROD/DATAFILE/file.265.1234567890';
-- If diskgroup is dismounted
ALTER DISKGROUP fra MOUNT;
-- Then retry the operation
-- Verify two-stage rename completion
SELECT file_number, incarnation FROM v$asm_file WHERE group_number = 1;
-- Match file aliases to files
SELECT a.name, a.file_number, f.file_number
FROM v$asm_alias a, v$asm_file f
WHERE a.file_number = f.file_number(+);
ORA-15012: ASM file '+FRA/PROD/BACKUPSET/2026_01_15/o1_mf_nnndf_TAG_xxxx.bkp' does not exist

Fix: Run RMAN> CROSSCHECK BACKUP; DELETE EXPIRED BACKUP; to remove stale catalog entries.

ALTER TABLESPACE temp DROP TEMPFILE '+DATA/PROD/TEMPFILE/temp01.dbf';
ORA-15012: ASM file '+DATA/PROD/TEMPFILE/temp01.dbf' does not exist

Fix: Use ALTER DATABASE TEMPFILE '...' DROP; to remove from controlfile only.

ORA-15012: ASM file '+OLD_DATA/CLONE/DATAFILE/system.256.1234' does not exist

Fix: Recreate controlfile with correct path or use RMAN DUPLICATE DB_FILE_NAME_CONVERT.

SQL> ALTER DATABASE DATAFILE '+DATA/PROD/DATAFILE/users.265.999' RESIZE 2G;
ALTER DATABASE DATAFILE '+DATA/PROD/DATAFILE/users.265.999' RESIZE 2G
*
ERROR at line 1:
ORA-01237: cannot extend datafile 5
ORA-01110: data file 5: '+DATA/PROD/DATAFILE/users.265.999'
ORA-15012: ASM file '+DATA/PROD/DATAFILE/users.265.999' does not exist
SQL> SELECT file#, name FROM v$datafile WHERE file# = 5;
FILE# NAME
---------- --------------------------------------------------
5 +DATA/PROD/DATAFILE/users.265.998765432

The controlfile points to incarnation 998765432, not 999 — typo or stale reference caused the error.

-- Create alias on file creation
ALTER DISKGROUP data ADD ALIAS '+DATA/PROD/users.dbf'
FOR '+DATA/PROD/DATAFILE/users.265.1234567890';
-- Reference via alias (stable across recreations)
ALTER DATABASE RENAME FILE '+DATA/PROD/DATAFILE/users.265.1234567890'
TO '+DATA/PROD/users.dbf';
Terminal window
# Regular orphan cleanup script
asmcmd <<EOF
lsof
ls --absolutepath +DATA/PROD/DATAFILE
EOF
# Cross-check with database
sqlplus -s / <<EOF
SELECT name FROM v\$datafile;
SELECT name FROM v\$tempfile;
SELECT member FROM v\$logfile;
EOF
RMAN> CROSSCHECK BACKUP;
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE NOPROMPT EXPIRED BACKUP;
RMAN> DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
  • ORA-01110: Data file [N]: ‘filename’
  • ORA-15001: Diskgroup does not exist or is not mounted
  • ORA-15004: Diskgroup does not exist
  • ORA-15032: Not all alterations performed
  • ORA-15045: ASM file name not in reference form
  • Verify exact file path with asmcmd ls -l
  • Confirm diskgroup is mounted
  • Check v$asm_alias and v$asm_file for orphans
  • Cross-reference path in v$datafile / v$tempfile
  • Run RMAN CROSSCHECK if error involves backups
  • Restore from backup if file genuinely missing