ORA-15045: ASM File Name Not in Reference Form
ORA-15045: ASM File Name ‘name’ Is Not in Reference Form
Section titled “ORA-15045: ASM File Name ‘name’ Is Not in Reference Form”Error Overview
Section titled “Error Overview”Error Text: ORA-15045: ASM file name 'name' is not in reference form
ORA-15045 occurs when an operation requiring a fully qualified ASM file reference receives a non-reference name. ASM has strict naming rules: certain operations (such as renaming controlfiles, dropping files, or specifying existing files) require the system-generated reference form like +DG/dbname/datafile/users.265.1234567890, not just an alias or partial path.
Understanding ASM Naming Forms
Section titled “Understanding ASM Naming Forms”ASM supports several name forms with different valid uses:
| Form | Example | Use |
|---|---|---|
| Fully qualified | +DATA/PROD/DATAFILE/users.265.1234567890 | Reference existing files |
| Numeric | +DATA.265.1234567890 | Internal reference |
| Alias | +DATA/PROD/users.dbf | User-friendly name |
| Alias with template | +DATA(DATAFILE)/users.dbf | Apply template at create time |
| Incomplete | +DATA | Create new file (system names it) |
| Incomplete with template | +DATA(template_name) | Create with specific template |
Common Causes
Section titled “Common Causes”Wrong Form for Operation
Section titled “Wrong Form for Operation”- Using alias when reference form required
- Passing incomplete name (
+DATA) where existing file expected - RMAN expecting reference form for SET NEWNAME operations
Typos and Format Errors
Section titled “Typos and Format Errors”- Missing
+prefix on diskgroup - Wrong file_number/incarnation pair
- Mixing alias path with file_number suffix
Operation Context
Section titled “Operation Context”ALTER DATABASE RENAME FILErequiring reference form for both old and new- Controlfile recreation needing exact paths
- RMAN restore with explicit file naming
Diagnostic Steps
Section titled “Diagnostic Steps”Find Correct Reference Form
Section titled “Find Correct Reference Form”# Use asmcmd to get reference nameasmcmdASMCMD> cd +DATA/PROD/DATAFILEASMCMD> ls -lType Redund Striped Time Sys NameDATAFILE UNPROT COARSE JAN 15 10:00:00 Y users.265.1234567890
# Or query ASM directlysqlplus / as sysasmSQL> SELECT '+' || dg.name || '/' || a.system_name AS reference_name FROM v$asm_alias a, v$asm_diskgroup dg WHERE a.group_number = dg.group_number AND a.name = 'USERS01.DBF';Inspect Database File References
Section titled “Inspect Database File References”-- From RDBMSSELECT file#, name FROM v$datafile;SELECT file#, name FROM v$tempfile;SELECT group#, member FROM v$logfile;SELECT name FROM v$controlfile;
-- All ASM-resident filesSELECT name FROM v$datafile WHERE name LIKE '+%';Verify Alias vs File
Section titled “Verify Alias vs File”-- Connect to ASMSELECT a.name AS alias_name, a.system_created, a.alias_directory, '+' || dg.name || '/' || a.system_name AS reference_formFROM v$asm_alias a, v$asm_diskgroup dgWHERE a.group_number = dg.group_numberAND a.alias_directory = 'N'ORDER BY a.name;Resolution Steps
Section titled “Resolution Steps”1. Use Reference Form for Existing Files
Section titled “1. Use Reference Form for Existing Files”-- WRONG: alias used where reference requiredALTER DATABASE RENAME FILE '+DATA/users.dbf' TO '+DATA_NEW/users.dbf';
-- CORRECT: reference formALTER DATABASE RENAME FILE '+DATA/PROD/DATAFILE/users.265.1234567890' TO '+DATA_NEW/PROD/DATAFILE/users.dbf';2. RMAN with Correct Reference Form
Section titled “2. RMAN with Correct Reference Form”-- Get current name from controlfileRUN { SQL 'ALTER SESSION SET NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"'; REPORT SCHEMA;}
-- Use reference form in SET NEWNAMERUN { SET NEWNAME FOR DATAFILE 5 TO '+DATA_NEW'; RESTORE DATAFILE 5; SWITCH DATAFILE 5; RECOVER DATAFILE 5;}3. Create Alias for Friendlier References
Section titled “3. Create Alias for Friendlier References”-- Connect as SYSASMALTER DISKGROUP data ADD ALIAS '+DATA/PROD/users.dbf' FOR '+DATA/PROD/DATAFILE/users.265.1234567890';
-- Now alias is usable for SELECT but reference still required for some ops4. Drop File Using Correct Form
Section titled “4. Drop File Using Correct Form”-- From RDBMSALTER DATABASE DATAFILE '+DATA/PROD/DATAFILE/old_file.265.999' OFFLINE DROP;
-- From ASM (if file orphaned)asmcmd rm '+DATA/PROD/DATAFILE/old_file.265.999'5. Controlfile Recreation
Section titled “5. Controlfile Recreation”-- Get exact reference forms firstSELECT name FROM v$datafile;SELECT member FROM v$logfile;
-- Then in CREATE CONTROLFILECREATE CONTROLFILE REUSE DATABASE "PROD" RESETLOGSLOGFILE GROUP 1 ('+DATA/PROD/ONLINELOG/group_1.261.1234567890') SIZE 100M, GROUP 2 ('+DATA/PROD/ONLINELOG/group_2.262.1234567890') SIZE 100MDATAFILE '+DATA/PROD/DATAFILE/system.256.1234567890', '+DATA/PROD/DATAFILE/sysaux.257.1234567890', '+DATA/PROD/DATAFILE/users.265.1234567890'CHARACTER SET AL32UTF8;Common Scenarios
Section titled “Common Scenarios”Scenario 1: ALTER DATABASE RENAME FILE
Section titled “Scenario 1: ALTER DATABASE RENAME FILE”SQL> ALTER DATABASE RENAME FILE '+DATA/users.dbf' TO '+DATA/users_new.dbf';ORA-01511: error in renaming log/data filesORA-15045: ASM file name '+DATA/users.dbf' is not in reference formFix: Get full reference name from v$datafile.name.
Scenario 2: RMAN Duplicate
Section titled “Scenario 2: RMAN Duplicate”RMAN> DUPLICATE TARGET DATABASE TO clone DB_FILE_NAME_CONVERT=('+DATA/users.dbf','+DATA/CLONE/users.dbf');ORA-15045: ASM file name '+DATA/users.dbf' is not in reference formFix: Use alias creation post-duplicate, not in DB_FILE_NAME_CONVERT.
Scenario 3: Controlfile Recreation
Section titled “Scenario 3: Controlfile Recreation”ORA-15045: ASM file name '+DATA' is not in reference formFix: Provide complete reference path including /dbname/type/name.file#.incarnation.
Sample Output
Section titled “Sample Output”SQL> ALTER DATABASE RENAME FILE '+DATA/users.dbf' TO '+DATA_NEW/users.dbf';ALTER DATABASE RENAME FILE '+DATA/users.dbf' TO '+DATA_NEW/users.dbf'*ERROR at line 1:ORA-01511: error in renaming log/data filesORA-01516: nonexistent log file, data file, or temp file "+DATA/users.dbf"ORA-15045: ASM file name '+DATA/users.dbf' is not in reference form
SQL> SELECT name FROM v$datafile WHERE file# = 5;NAME------------------------------------------------------------+DATA/PROD/DATAFILE/users.265.1234567890
-- Use full reference form for renameSQL> ALTER DATABASE RENAME FILE 2 '+DATA/PROD/DATAFILE/users.265.1234567890' 3 TO '+DATA_NEW/PROD/DATAFILE/users.dbf';
Database altered.Prevention Strategies
Section titled “Prevention Strategies”Always Query Source First
Section titled “Always Query Source First”-- Before any rename or move, capture exact nameSPOOL /tmp/file_names.lstSELECT 'DATAFILE: ' || name FROM v$datafile;SELECT 'TEMPFILE: ' || name FROM v$tempfile;SELECT 'LOGFILE: ' || member FROM v$logfile;SELECT 'CONTROLFILE: ' || name FROM v$controlfile;SPOOL OFFUse Aliases for Documentation
Section titled “Use Aliases for Documentation”-- Create human-readable aliases for all important filesALTER DISKGROUP data ADD ALIAS '+DATA/PROD/users.dbf' FOR '+DATA/PROD/DATAFILE/users.265.1234567890';Standardize Naming in Scripts
Section titled “Standardize Naming in Scripts”#!/bin/bash# Helper to get reference formget_reference() { local datafile_id=$1 sqlplus -s / as sysdba <<EOF SET PAGESIZE 0 FEEDBACK OFF HEADING OFF SELECT name FROM v\$datafile WHERE file# = $datafile_id;EOF}
REF=$(get_reference 5)echo "Datafile 5 reference: $REF"Related Errors
Section titled “Related Errors”- ORA-01511: Error in renaming log/data files
- ORA-01516: Nonexistent log file, data file, or temp file
- ORA-15012: ASM file does not exist
- ORA-15032: Not all alterations performed
- ORA-15124: ASM file name contains invalid alias name
Troubleshooting Checklist
Section titled “Troubleshooting Checklist”- Query
v$datafile,v$tempfile,v$logfilefor exact reference forms - Use
asmcmd ls -lto confirm file paths - Use reference form (not alias) for RENAME and DROP
- Validate path includes diskgroup, dbname, type, and file_number/incarnation
- Create aliases for documentation, but use reference for operations