domingo, 19 de fevereiro de 2012

Movendo o SPFILE em RAC

Alguns meses atrás fui envolvido em uma atividade onde era necessário remover alguns diskgroups do ASM, isto porque um disco do storage iria ser substituído por outro com capacidade de armazenamento superior, pois bem, além dos datafiles possuíamos também o SPFILE abaixo do diskgroup. E agora, como podemos movimentá-lo e garantir que a instance suba corretamente utilizando o SPFILE localizado em outro diskgroup? 

Não se trata de uma atividade complicada, pelo contrário, muito simples, porém muitos desconhecem como fazer! 

Primeiramente vamos verificar a localização do SPFILE que as instances do RAC foram iniciadas:

SQL> set lines 200
SQL> col PARAMETRO for a30
SQL> col LOCALIZACAO for a70
SQL> select i.INSTANCE_NAME "INSTANCE", NAME "PARAMETRO", VALUE "LOCALIZACAO" from gv$instance i, gv$parameter p where i.inst_id=p.inst_id and upper(p.name)='SPFILE';
 
INSTANCE         PARAMETRO                      LOCALIZACAO
---------------- ------------------------------ ----------------------------------------------------------------------
orcl1            spfile                         +DGDICT/orcl/spfileorcl.ora
orcl2            spfile                         +DGDICT/orcl/spfileorcl.ora

Agora iremos verificar o spfile registrado no OCR, para isto utilizaremos o comando “srvctl config database -d DATABASE_NAME -a”, que terá como saída:

[oracle@rac1 ~]$ $ORA_CRS_HOME/bin/srvctl config database -d orcl -a
rac1 orcl1 /u01/app/oracle/product/10.2.0/db_1
rac2 orcl2 /u01/app/oracle/product/10.2.0/db_1
DB_NAME: orcl
ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1
SPFILE: +DGDICT/orcl/spfileorcl.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY:  AUTOMATIC
ENABLE FLAG: DB ENABLED

Podemos ver que o SPFILE que será utilizado em um restart se mantem o mesmo já utilizado pelas instances no startup, vamos então copiar este SPFILE para outro diskgroup ASM e ajustar a localização do SPFILE registrado no OCR: 

Note que para efetuar a copia, primeiramente foi gerado um pfile para disco e posteriormente um spfile a partir do pfile para o ASM, isto porque: 

* O ASM não suporta arquivos de sistema operacional e o PFILE por ser arquivo texto acaba por não ser suportado. 
* Não é possível criar um spfile from spfile, porém se o ambiente for 11g pode ser utilizada a new feature “create spfile=’localizacao/spfile.ora’ from memory” (entenda mais sobre a feature se for utiliza-la!)

SQL> select instance_name from v$instance;
 
INSTANCE_NAME
----------------
orcl1
 
SQL> create pfile='/usr/tmp/pfile.ora' from spfile='+DGDICT/orcl/spfileorcl.ora';
 
File created.
 
SQL> create spfile='+DGB/orcl/spfileorcl.ora' from pfile='/usr/tmp/pfile.ora';
 
File created.
 
SQL> exit

– Modificando a localização do SPFILE registrado no OCR

[oracle@rac1 ~]$ $ORA_CRS_HOME/bin/srvctl modify database -d orcl -p +DGB/orcl/spfileorcl.ora

Efetuado estes dois passos, vamos realizar uma nova verificação no OCR para certificar que está sendo apontado para o novo SPFILE.

[oracle@rac1 ~]$ $ORA_CRS_HOME/bin/srvctl config database -d orcl -a
rac1 orcl1 /u01/app/oracle/product/10.2.0/db_1
rac2 orcl2 /u01/app/oracle/product/10.2.0/db_1
DB_NAME: orcl
ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1
SPFILE: +DGB/orcl/spfileorcl.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY:  AUTOMATIC
ENABLE FLAG: DB ENABLED

Iremos ajustar o init*.ora ($ORACLE_HOME/dbs/) com a localização do novo SPFILE e replicamos para os demais nodes.

[oracle@rac1 ~]$ echo "SPFILE='+DGB/orcl/spfileorcl.ora'" > $ORACLE_HOME/dbs/initorcl1.ora
[oracle@rac1 ~]$ ssh rac2 "echo \"SPFILE='+DGB/orcl/spfileorcl.ora'\" > $ORACLE_HOME/dbs/initorcl2.ora"

Agora vamos restartar o database para que inicie com o novo spfile:

[oracle@rac1 ~]$ $ORA_CRS_HOME/bin/srvctl stop database -d orcl
[oracle@rac1 ~]$ $ORA_CRS_HOME/bin/srvctl start database -d orcl
SQL> set lines 200
SQL> col PARAMETRO for a30
SQL> col LOCALIZACAO for a70
SQL> select i.INSTANCE_NAME "INSTANCE", NAME "PARAMETRO", VALUE "LOCALIZACAO" from gv$instance i, gv$parameter p where i.inst_id=p.inst_id and upper(p.name)='SPFILE';
 
INSTANCE         PARAMETRO                      LOCALIZACAO
---------------- ------------------------------ ----------------------------------------------------------------------
orcl1            spfile                         +DGB/orcl/spfileorcl.ora
orcl2            spfile                         +DGB/orcl/spfileorcl.ora

Pronto, SPFILE também foi movimentado! Já podemos remover o antigo diskgroup.
Postagem mais recente Postagem mais antiga Página inicial

0 comentários:

Postar um comentário

Translate

# Suporte

# ACE Program

#Oracle

#Oracle
Disclaimer: The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.

#Blog reconhecido

#ARTICULISTA

Marcadores

Postagens populares