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