Erro ao remover diskgroup ASM – ORA-15027
May 29, 2012

O erro acontece quando você tenta desmontar ou remover um diskgroup em que existe um (ou mais) arquivo sendo utilizado atualmente pelo ASM.

SQL> alter diskgroup dgroup1 dismount;
alter diskgroup dgroup1 dismount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15027: active use of diskgroup "DGROUP1" precludes its dismount

SQL> drop diskgroup DGROUP1 including contents;
drop diskgroup DGROUP1 including contents
*
ERROR at line 1:
ORA-15039: diskgroup not dropped
ORA-15027: active use of diskgroup "DGROUP1" precludes its dismount

O ASM por si só, é muito inteligente e sabe que se o diskgroup for desmontado ou removido, poderá ocorrer qualquer perca de dados. Você pode por exemplo incluir a opção force no comando para desmontar o diskgroup de maneira “forçada” sem nenhuma checagem de perca de dados, que isso pode trazer grande dores de cabeça … já que pode haver perca de dados …

SQL> alter diskgroup dgroup1 dismount;
alter diskgroup dgroup1 dismount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15027: active use of diskgroup "DGROUP1" precludes its dismount

SQL> alter diskgroup dgroup1 dismount force;

Diskgroup altered.

Como então desmontar/remover o diskgroup sem qualquer perca de dados? No meu caso o problema estava com o spfile do ASM, ele estava justamente no diskgroup que gostaria de remover (+DGROUP1). Como eu descobri isso? Simples … através da view v$asm_file:

SQL> select f.group_number, d.name, f.file_number, f.bytes, f.type
2       from v$asm_file f, v$asm_diskgroup d
3       where f.group_number = d.group_number;

GROUP_NUMBER NAME	      FILE_NUMBER      BYTES        TYPE
------------ ------------------------------   -----------                  ----------         ----------------------------------------------------------------
	   1 DGROUP1		       253                       1536             ASMPARAMETERFILE

Ok, mais qual solução? Mover o spfile do ASM para um outro diskgroup disponível:

SQL> select name, state from v$asm_diskgroup;

GROUP_NUMBER NAME			    STATE
------------ ------------------------------ -----------
	   1 DGROUP1			    MOUNTED
	   2 DGROUP2			    MOUNTED

SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Automatic Storage Management option

[oracle@oracle11g ~]$ asmcmd
ASMCMD> spget
+DGROUP1/asm/asmparameterfile/registry.253.784483237

Veja acima que tenho dois diskgroup, quero passar então o meu parameter file para o DISKGROUP2:

SQL> create pfile='/u01/app/oracle/init+ASM.ora' from spfile;

File created.

SQL> shut immediate;
ASM diskgroups dismounted
ASM instance shutdown

SQL> startup pfile='/u01/app/oracle/init+ASM.ora';
ASM instance started

Total System Global Area  284565504 bytes
Fixed Size		    1344456 bytes
Variable Size		  258055224 bytes
ASM Cache		   25165824 bytes
ASM diskgroups mounted

SQL> show parameter spfile

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
spfile				     string

Veja que agora como subi o ASM através do pfile, nenhum spfile está configurado para ele. Agora iremos criar um spfile para a o diskgroup DGROUP2 através do pfile que acabamos de criar.

SQL> create spfile='+DGROUP2/init.ora' from pfile='/u01/app/oracle/init+ASM.ora';
File created.

SQL> shut immediate;
ASM diskgroups dismounted
ASM instance shutdown

SQL> startup
ASM instance started
Total System Global Area 284565504 bytes
Fixed Size 1344456 bytes
Variable Size 258055224 bytes
ASM Cache 25165824 bytes
ASM diskgroups mounted

SQL> show parameter spfile

NAME                                   TYPE          VALUE
------------------------------------ ----------- ------------------------------
spfile                                 string        +DGROUP2/init.ora
SQL>
SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Automatic Storage Management option

[oracle@oracle11g oracle]$ asmcmd
ASMCMD> spget
+DGROUP2/init.ora
ASMCMD> exit

Agora que temos o spfile do ASM apontando para o DGROUP2 e não mais para o DGROUP1, podemos sem problema nenhum desmontar/remover o diskgroup desejado.

SQL> alter diskgroup dgroup1 dismount;
Diskgroup altered.

SQL> alter diskgroup dgroup1 mount;
Diskgroup altered.

SQL>  drop diskgroup dgroup1 including contents;
Diskgroup dropped.

SQL> select group_number, name, state from v$asm_diskgroup;
GROUP_NUMBER     NAME			         STATE
------------    ------------------------------ -----------
	   2    DGROUP2		                 MOUNTED
Certificado “Oracle GoldenGate Specialist”
May 7, 2012

Olá Pessoal!

Venho útimamente estudando muito Oracle GoldenGate, através de livros, documentos oficiais e não oficiais, tenho aprendido muita coisa com essa ferramente, apesar de pouco documento e livros bons tenho conseguido ir bem, realmente GoldenGate é fantastico, junto com a SUN a empresa GoldenGate foi uma das melhores aquisições feitas pela Oracle nos últimos anos.

Com toda essa dedicação ao GoldenGate, prestei na última sexta a prova Iz0-539 e assim obtive o certificado: “Oracle GoldenGate 10g Certified Specialist”. A prova não foi muito fácil, tanto que o meu score não foi lá aquelas coisas mais foi o suficiente para passar :)

Apesar de ser uma ferramente incrível, existem poucos especialistas pelo mundo que compartilham informação sobre ele, temos poucos materiais/post/tutoriais pela internet e hoje muito pouco livros existem por aí no mercado. Com isso, pretendo compartilhar muito sobre GoldenGate aqui no blog mostrando diversos assuntos como: implementação, tuning, proccess, director, veridata, migração, replicação heterogenia e etc …

Estou muito feliz com mais essa conquista e de poder compartilhar com vocês.

Abraços