This post is also available in:
When trying to create an SPFILE directly inside an ASM diskgroup, the instance returned:
ORA-15221: ASM operation requires compatible.asm of 11.2.0.0.0 or higherThe message is clear: the requested operation requires a minimum value for the compatible.asm attribute on the diskgroup, and the current value is too low.
Why this happens
ASM tracks two compatibility attributes per diskgroup:
compatible.asm— defines the minimum ASM software version allowed to access the diskgroup.compatible.rdbms— defines the minimumCOMPATIBLEinitialization parameter value for any database instance using the diskgroup.
These attributes are written into the diskgroup metadata at creation time. Diskgroups originally created on 10g environments default to 10.1.0.0.0 for both attributes. When Grid Infrastructure is upgraded to 11.2 or later, certain operations — such as storing the ASM SPFILE inside a diskgroup — start requiring compatible.asm >= 11.2.0.0.0. The storage metadata simply did not follow the software upgrade automatically.
💡 ORA-15221 can also surface in other contexts: rebalance operations using newer features, ACFS volume creation, or during a Grid Infrastructure upgrade process.
⚠️ Before running any command
This change is irreversible.
Oracle’s documentation is explicit: once compatible.asm is advanced, there is no supported way to roll it back. To revert to a lower value, you would need to drop and recreate the diskgroup from scratch, then restore all data. Only advance to the version you actually need — and ideally, align it with your Grid Infrastructure release.
⚠️ Never alter
compatible.asmwhile any disk in the diskgroup is offline. The command will fail with ORA-15232 and may leave the diskgroup in an inconsistent state.
Diagnosis
Check the current compatibility values for all diskgroups:
SELECT name,
compatibility AS compatible_asm,
database_compatibility AS compatible_rdbms
FROM v$asm_diskgroup
ORDER BY name;Typical output on an environment with legacy diskgroups:
NAME COMPATIBLE_ASM COMPATIBLE_RDBMS
--------- --------------- ----------------
ARCHIVE 10.1.0.0.0 10.1.0.0.0
DATA 10.1.0.0.0 10.1.0.0.0
REDO01 10.1.0.0.0 10.1.0.0.0Check your ASM version before deciding on a target value:
SELECT version FROM v$instance;💡 Oracle recommends setting
compatible.asmto match your Grid Infrastructure release. On a 19c environment, the recommended value is19.0.0.0.0. Note thatcompatible.asmmust always be greater than or equal tocompatible.rdbms.
Fix
Alter a single diskgroup
ALTER DISKGROUP DATA SET ATTRIBUTE 'compatible.asm' = '11.2.0.0.0';Generate the command for all diskgroups at once
SELECT 'ALTER DISKGROUP ' || name ||
' SET ATTRIBUTE ''compatible.asm''=''11.2.0.0.0'';'
FROM v$asm_diskgroup;Run each generated statement on the +ASM instance:
ALTER DISKGROUP ARCHIVE SET ATTRIBUTE 'compatible.asm'='11.2.0.0.0';
ALTER DISKGROUP DATA SET ATTRIBUTE 'compatible.asm'='11.2.0.0.0';
ALTER DISKGROUP REDO01 SET ATTRIBUTE 'compatible.asm'='11.2.0.0.0';
ALTER DISKGROUP REDO02 SET ATTRIBUTE 'compatible.asm'='11.2.0.0.0';
ALTER DISKGROUP REDO03 SET ATTRIBUTE 'compatible.asm'='11.2.0.0.0';
ALTER DISKGROUP REDO04 SET ATTRIBUTE 'compatible.asm'='11.2.0.0.0';Post-change validation
Confirm the new values are in place:
SELECT g.name,
a.name AS attribute,
a.value
FROM v$asm_diskgroup g
JOIN v$asm_attribute a ON g.group_number = a.group_number
WHERE a.name LIKE '%compat%'
ORDER BY g.name, a.name;Expected output:
NAME ATTRIBUTE VALUE
------- ----------------- -----------
DATA compatible.asm 11.2.0.0.0
DATA compatible.rdbms 10.1.0.0.0
...With the attribute updated, the SPFILE creation will succeed:
CREATE SPFILE='+DATA/ASM/spfileASM.ora' FROM PFILE;Quick reference
-- 1. Check current values
SELECT name, compatibility, database_compatibility FROM v$asm_diskgroup;
-- 2. Check ASM version
SELECT version FROM v$instance;
-- 3. Confirm all disks are online
SELECT dg.name, d.name, d.state
FROM v$asm_diskgroup dg JOIN v$asm_disk d ON dg.group_number = d.group_number
WHERE d.state != 'NORMAL';
-- 4. Alter (IRREVERSIBLE)
ALTER DISKGROUP <name> SET ATTRIBUTE 'compatible.asm'='<version>';
-- 5. Validate
SELECT g.name, a.name, a.value
FROM v$asm_diskgroup g JOIN v$asm_attribute a ON g.group_number = a.group_number
WHERE a.name LIKE '%compat%';