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.
0 comentários:
Postar um comentário