Skip to content

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 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.

ASM supports several name forms with different valid uses:

FormExampleUse
Fully qualified+DATA/PROD/DATAFILE/users.265.1234567890Reference existing files
Numeric+DATA.265.1234567890Internal reference
Alias+DATA/PROD/users.dbfUser-friendly name
Alias with template+DATA(DATAFILE)/users.dbfApply template at create time
Incomplete+DATACreate new file (system names it)
Incomplete with template+DATA(template_name)Create with specific template
  • Using alias when reference form required
  • Passing incomplete name (+DATA) where existing file expected
  • RMAN expecting reference form for SET NEWNAME operations
  • Missing + prefix on diskgroup
  • Wrong file_number/incarnation pair
  • Mixing alias path with file_number suffix
  • ALTER DATABASE RENAME FILE requiring reference form for both old and new
  • Controlfile recreation needing exact paths
  • RMAN restore with explicit file naming
Terminal window
# Use asmcmd to get reference name
asmcmd
ASMCMD> cd +DATA/PROD/DATAFILE
ASMCMD> ls -l
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE JAN 15 10:00:00 Y users.265.1234567890
# Or query ASM directly
sqlplus / as sysasm
SQL> 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';
-- From RDBMS
SELECT 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 files
SELECT name FROM v$datafile WHERE name LIKE '+%';
-- Connect to ASM
SELECT a.name AS alias_name,
a.system_created,
a.alias_directory,
'+' || dg.name || '/' || a.system_name AS reference_form
FROM v$asm_alias a, v$asm_diskgroup dg
WHERE a.group_number = dg.group_number
AND a.alias_directory = 'N'
ORDER BY a.name;
-- WRONG: alias used where reference required
ALTER DATABASE RENAME FILE '+DATA/users.dbf' TO '+DATA_NEW/users.dbf';
-- CORRECT: reference form
ALTER DATABASE RENAME FILE
'+DATA/PROD/DATAFILE/users.265.1234567890'
TO '+DATA_NEW/PROD/DATAFILE/users.dbf';
-- Get current name from controlfile
RUN {
SQL 'ALTER SESSION SET NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"';
REPORT SCHEMA;
}
-- Use reference form in SET NEWNAME
RUN {
SET NEWNAME FOR DATAFILE 5 TO '+DATA_NEW';
RESTORE DATAFILE 5;
SWITCH DATAFILE 5;
RECOVER DATAFILE 5;
}
-- Connect as SYSASM
ALTER 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 ops
-- From RDBMS
ALTER 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'
-- Get exact reference forms first
SELECT name FROM v$datafile;
SELECT member FROM v$logfile;
-- Then in CREATE CONTROLFILE
CREATE CONTROLFILE REUSE DATABASE "PROD" RESETLOGS
LOGFILE
GROUP 1 ('+DATA/PROD/ONLINELOG/group_1.261.1234567890') SIZE 100M,
GROUP 2 ('+DATA/PROD/ONLINELOG/group_2.262.1234567890') SIZE 100M
DATAFILE
'+DATA/PROD/DATAFILE/system.256.1234567890',
'+DATA/PROD/DATAFILE/sysaux.257.1234567890',
'+DATA/PROD/DATAFILE/users.265.1234567890'
CHARACTER SET AL32UTF8;
SQL> ALTER DATABASE RENAME FILE '+DATA/users.dbf' TO '+DATA/users_new.dbf';
ORA-01511: error in renaming log/data files
ORA-15045: ASM file name '+DATA/users.dbf' is not in reference form

Fix: Get full reference name from v$datafile.name.

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 form

Fix: Use alias creation post-duplicate, not in DB_FILE_NAME_CONVERT.

ORA-15045: ASM file name '+DATA' is not in reference form

Fix: Provide complete reference path including /dbname/type/name.file#.incarnation.

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 files
ORA-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 rename
SQL> ALTER DATABASE RENAME FILE
2 '+DATA/PROD/DATAFILE/users.265.1234567890'
3 TO '+DATA_NEW/PROD/DATAFILE/users.dbf';
Database altered.
-- Before any rename or move, capture exact name
SPOOL /tmp/file_names.lst
SELECT 'DATAFILE: ' || name FROM v$datafile;
SELECT 'TEMPFILE: ' || name FROM v$tempfile;
SELECT 'LOGFILE: ' || member FROM v$logfile;
SELECT 'CONTROLFILE: ' || name FROM v$controlfile;
SPOOL OFF
-- Create human-readable aliases for all important files
ALTER DISKGROUP data ADD ALIAS '+DATA/PROD/users.dbf'
FOR '+DATA/PROD/DATAFILE/users.265.1234567890';
#!/bin/bash
# Helper to get reference form
get_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"
  • 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
  • Query v$datafile, v$tempfile, v$logfile for exact reference forms
  • Use asmcmd ls -l to 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