viernes, 6 de septiembre de 2013

Como mover el controlfile desde un filesystem hacia ASM

1. Identificar la ubicación el actual del controlfile

SQL> select name from v$controfile;

NAME
--------------------------------------------------------------------------------
/oradata/BASE/control01.ctl'


2. Parar la instancia y levantarla en nomount

SQL> shutdown normal
SQL> startup nomount

3. Usamos RMAN  para mover el controlfile hacia ASM

$ rman nocatalog
RMAN>connect target
RMAN>restore controlfile to '' from '';

Ej:

RMAN> restore controlfile to '+DGDATOS' from '/oradata/BASE/control01.ctl';

Starting restore at 06-SEP-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK

channel ORA_DISK_1: copied control file copy
Finished restore at 06-SEP-13



Nosotros solamente especificamos el nombre del diskgroup, oracle creará un OMF(Oracle Managed File). 
Usamos ASMCMD o sqlpus para identificar el nombre asignado al controlfile


4. En la instancia de ASM, identificamos el nombre del controlfile:

Usando ASMCMD:

$ asmcmd
ASMCMD> cd
ASMCMD> find -t controlfile . *

+DGDATOS/BASE/CONTROLFILE/current.308.577785757

ASMCMD>

5. Ahora del lado de la base de datos:

* Modificar el init.ora or spfile, reemplazando con el nuevo path para el init parámetro control_files.
* Si usamos init.ora, entonces modificamos el parámetro control_files y reiniciamos la instancia.
* Si usamos spfile, entonces

1) startup nomount the database instance
2) alter system set control_files='+DGDATOS/BASE/CONTROLFILE/current.308.577785757' scope=spfile;
3) shutdown immediate

6.
start the instance.

Verificar que el nuevo controlfile ah sido reconocido. 

NOTA : Los pasos 3 a 5 deberian ser repetidos para multiplexar el contolfile para en varios disgroup diskgroup .