This post is also available in:
Ao tentar criar um SPFILE diretamente em um diskgroup ASM, o banco retornou:
ORA-15221: ASM operation requires compatible.asm of 11.2.0.0.0 or higherO erro é direto: a operação solicitada exige uma versão mínima do atributo compatible.asm no diskgroup, e o valor atual está abaixo disso.
Por que isso acontece
O ASM usa dois atributos de compatibilidade por diskgroup:
compatible.asm— define a versão mínima do software ASM que pode acessar o diskgroup.compatible.rdbms— define a versão mínima do parâmetroCOMPATIBLEdo banco que pode usar o diskgroup.
Esses atributos são gravados nos metadados do diskgroup no momento da criação. Diskgroups criados em ambientes 10g têm, por padrão, ambos os atributos em 10.1.0.0.0. Quando o Grid Infrastructure é atualizado para 11.2 ou superior, certas operações — como armazenar o SPFILE do ASM dentro de um diskgroup — passam a exigir compatible.asm >= 11.2.0.0.0. O ambiente de storage não acompanhou automaticamente o upgrade do software.
💡 O ORA-15221 também pode aparecer em outros contextos: rebalance com novas features, criação de volumes ACFS, ou durante o processo de upgrade do Grid Infrastructure.
⚠️ Antes de executar qualquer comando
Esta alteração é irreversível.
A documentação Oracle deixa isso explícito: uma vez que o valor de compatible.asm é avançado, não é possível revertê-lo. Para voltar a um valor anterior, seria necessário recriar o diskgroup do zero e restaurar todos os dados. Avance apenas para a versão que você realmente precisa — e de preferência, alinha com a versão do seu Grid Infrastructure.
⚠️ Nunca altere
compatible.asmcom discos offline no diskgroup. O comando falhará com ORA-15232 e pode deixar o diskgroup em estado inconsistente.
Diagnóstico
Verifique os valores atuais de compatibilidade de todos os diskgroups:
SELECT name,
compatibility AS compatible_asm,
database_compatibility AS compatible_rdbms
FROM v$asm_diskgroup
ORDER BY name;Saída típica em um ambiente com diskgroups legados:
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.0Para confirmar a versão do seu ASM antes de definir o valor-alvo:
SELECT version FROM v$instance;💡 A Oracle recomenda que o valor de
compatible.asmseja igual à versão do software Grid Infrastructure em uso. Por exemplo, em um ambiente 19c, o recomendado é19.0.0.0.0. O valorcompatible.asmdeve sempre ser maior ou igual aocompatible.rdbms.
Solução
Alterar um diskgroup específico
ALTER DISKGROUP DATA SET ATTRIBUTE 'compatible.asm' = '11.2.0.0.0';Gerar o comando para todos os diskgroups de uma vez
SELECT 'ALTER DISKGROUP ' || name ||
' SET ATTRIBUTE ''compatible.asm''=''11.2.0.0.0'';'
FROM v$asm_diskgroup;Execute cada linha gerada na instância +ASM:
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';Validação pós-alteração
Confirme que os novos valores foram aplicados:
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;Saída esperada:
NAME ATTRIBUTE VALUE
------- ----------------- -----------
DATA compatible.asm 11.2.0.0.0
DATA compatible.rdbms 10.1.0.0.0
...Após a validação, o SPFILE pode ser criado normalmente:
CREATE SPFILE='+DATA/ASM/spfileASM.ora' FROM PFILE;Checklist rápido
-- 1. Verificar valores atuais
SELECT name, compatibility, database_compatibility FROM v$asm_diskgroup;
-- 2. Verificar versão do ASM
SELECT version FROM v$instance;
-- 3. Confirmar que todos os discos estão 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. Alterar (IRREVERSÍVEL)
ALTER DISKGROUP <nome> SET ATTRIBUTE 'compatible.asm'='<versão>';
-- 5. Validar
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%';