martes, 29 de marzo de 2016

Cambiar una BBDD de disco +ASM


Este procedimiento lo utilicé en su día para cambiar el Diskgroup de una BBDD. A veces que es necesario hacerlo para redistribuir los datos en nuevos discos. Cambiar el tamaño 'general' de los discos, o crear una estructura de discos homogénea para que todos los discos ocupen lo mismo en el Diskgroup.

Los pasos para realizar esta operativa son los siguientes :

1.- Creamos el Diskgroup 
 
CREATE DISKGROUP DATA1 EXTERNAL REDUNDANCY
DISK
'/dev/ORACLE_sdd'  NAME DATA1_001,
'/dev/ORACLE_sde'  NAME DATA1_002,
'/dev/ORACLE_sdf'  NAME DATA1_003,
'/dev/ORACLE_sdg'  NAME DATA1_004,
'/dev/ORACLE_sdh'  NAME DATA1_005  ;
 


 Y realizamos las comprobaciones 

SELECT  GROUP_NUMBER, name, STATE, path, REDUNDANCY from v$asm_disk;

GROUP_NUMBER NAME          STATE    PATH                   REDUNDA
------------ ------------- -------- ---------------------- ------- 
           1 DATA_0000     NORMAL   /dev/ORACLE_sdb        UNKNOWN
           2 DATA1_005     NORMAL   /dev/ORACLE_sdh        UNKNOWN
           2 DATA1_004     NORMAL   /dev/ORACLE_sdg        UNKNOWN
           2 DATA1_003     NORMAL   /dev/ORACLE_sdf        UNKNOWN
           2 DATA1_002     NORMAL   /dev/ORACLE_sde        UNKNOWN
           2 DATA1_001     NORMAL   /dev/ORACLE_sdd        UNKNOWN
 
select GROUP_NUMBER, NAME, TOTAL_MB, FREE_MB from v$asm_diskgroup;

GROUP_NUMBER NAME              TOTAL_MB    FREE_MB
------------ --------------- ---------- ----------
          1 DATA               1669120      237160
          2 DATA1              2048000     2047927
 

2.- Pasamos los ficheros 'pequeños': 

 
Esto se contempla dado que en el +ASM únicamente tenemos un Diskgroup (DATA1) que contiene TODOS los datos de la BBDD. Que vienen a ser - además de los Datafiles - el init y los Controlfiles

a) INIT (+ASM) del DATA al DATA1 :

SQL > create pfile='/ora11/sndr/init+ASM.ora' from spfile;

File created.

SQL > alter diskgroup DATA1 set attribute 'compatible.asm'='11.2.0.0.0';

Diskgroup altered.

SQL > create spfile='+DATA1' FROM PFILE='/ora11/sndr/init+ASM.ora';

File created. 
 
     Comprobamos 
ora11@Maquina:> srvctl config asm
ASM home: /ora11/app/oracle/product/grid
ASM listener: LISTENER
Spfile: +DATA1/asm/asmparameterfile/registry.253.842198787
ASM diskgroup discovery string: /dev/ORA*

b) Control Files 

SQL > select name from v$controlfile;

NAME
------------------------------------------------------------------
+DATA/mydb/controlfile/current.265.768518747

1.- Cambiamos la ruta de los controls:

alter system set control_files='+DATA/mydb/controlfile/current.265.768518747','+DATA1' scope=spfile sid='*';
 
2.- Reiniciamos la instancia en modo nomontado 

SQL > shutdown immediate;
Base de datos cerrada.
Base de datos desmontada.
Instancia ORACLE cerrada.
SQL > startup nomount;

Instancia ORACLE iniciada.

Total System Global Area 1603411968 bytes
Fixed Size                  2226912 bytes
Variable Size             754976032 bytes
Database Buffers          838860800 bytes
Redo Buffers                7348224 bytes
 

3.- Copiamos el controlfile utilizando RMAN

$ rman nocatalog

RMAN > connect target
RMAN > restore controlfile from '+DATA/mydb/controlfile/current.265.768518747' ;

El output debería ser algo como 

Starting restore at 08-NOV-07
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=147 instance=V1021 devtype=DISK

channel ORA_DISK_1: copied control file copy

output filename=+DATA1/v102/controlfile/current.261.637923577
output filename=+DATA1/v102/controlfile/current.269.638120375

Finished restore at 08-NOV-07

4.- Modificamos la ruta del controlfile con el nuevo fichero creado :

alter system set control_files='+DATA/mydb/controlfile/current.265.768518747','+DATA1/dtm_sde/controlfile/current.269.638120375' scope=spfile sid='*';

5.- Paramos y arrancamos de nuevo la BBDD

RMAN > sql 'alter database mount';
RMAN > sql 'alter database open';

6.- Validamos que existen los dos

select name from v$controlfile; 

7.- Podemos ya eliminar 1.

SQL > alter system set control_files='+DATA1/mydb/controlfile/current.256.842199449' scope=spfile sid='*';

3.- Cambio de los Datafiles

Esto se hace con RMAN con la BBDD en MOUNT o NOMOUNT. La forma de proceder es conectarnos al RMAN sobre los ficheros de control y ejecutamos lo siguiente:

rman target / nocatalog

run {
backup as copy database format '+DATA1';
}

Una vez que ha ejecutado el backup sobre el otro DISKGROUP, hacemos un switch database para que te pille el nuevo nombre de los ficheros el controlfile

ora11@maquina:~/ruta >  rman target / nocatalog

Recovery Manager: Release 11.2.0.2.0 - Production on Mon Mar 17 08:59:36 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
connected to target database: MYDB (DBID=90116375, not open)
using target database control file instead of recovery catalog

RMAN > switch database to copy;

datafile 1 switched to datafile copy "+DATA1/mydb/datafile/system.312.842215435"
[...]
datafile 66 switched to datafile copy "+DATA1/mydb/datafile/ts_visinte_dad.307.842215149"

RMAN >

4.- Recreamos los REDO.

Procedimiento Standard para recrear grupos de REDO en una BBDD. Pendiente 'actualizar' el blog con esta info. 

5.- Recreamos el Temporal. 

Procedimiento Standard para recrear el temporal en una BBDD. Pendiente 'actualizar' el blog con esta info.

6.- Configuración DB:

Cambiamos - finalmente - la  configuración de la BBDD para que figure únicamente 1 Diskgroup:

ora11@MAQUINA:>  srvctl config database -d mydb
Database unique name: MYDB
Database name: MYDB 
Oracle home: /ora11/app/oracle/product/11.2.0
Oracle user: ora11
Spfile: +DATA/MYDB/spfileMYDB.ora
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DATA,DATA1
Services:   

srvctl modify database -d mydb -p '+DATA1/MYDB/spfileMYDB.ora'
srvctl modify database -d mydb -a 'DATA1'

ora11@MAQUINA:> srvctl config database -d mydb
Database unique name: MYDB
Database name: MYDB 
Oracle home: /ora11/app/oracle/product/11.2.0
Oracle user: ora11
Spfile: +DATA/MYDB/spfileMYDB.ora
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DATA1
Services:   
 

 
Fuentes 

Dismount a diskgroup (siempre con SYSASM) 


    

No hay comentarios: