Home » Oracle BBDD » Oracle RMAN

0

Crear y Configurar un Catálogo RMAN

Como primer paso, hay que crear un usuario en la base de datos de repositorio (que, muy resumidamente, se encarga de llevar una bitácora de las copias). Para ello se puede usar un script como el siguiente:

CREATE USER rman_user

IDENTIFIED BY contraseña

DEFAULT TABLESPACE rman_ts

QUOTA UNLIMITED ON rman_ts;

GRANT RECOVERY_CATALOG_OWNER TO rman_user;

GRANT CONNECT, RESOURCE TO rman_user;

Una vez creado el usuario, desde el host anfitrión de la base de datos que se quiere configurar, nos conectamos al catálogo RMAN usando el usuario creado, rman_user, y se crea el catálogo de recuperación:

$ rman

RMAN> CONNECT CATALOG rman_user@cadena_conexión;

RMAN> CREATE CATALOG TABLESPACE rman_ts;

RMAN> exit;

Creado el catálogo, hay que registrar la base de datos en el mismo:

$ rman target=/ catalog rman_user@cadena_conexión

RMAN> REGISTER DATABASE;

RMAN> exit;

Ahora habría que configurar el canal de copias al dispositivo de cinta. Para ello, y como he dicho al principio, voy a suponer que el operador de copias ya ha actuado y ha configurado, por ejemplo, el TDP Oracle (para copias a un dispositivo tipo TSM).

$ rman target=/ catalog rman_user@cadena_conexión

RMAN> CONFIGURE CHANNEL DEVICE TYPE ‘SBT_TAPE’ PARMS ‘ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin/tdpo_bd.opt)’;

RMAN> exit;

Si se quiere, se puede indicar que se haga autobackup (con cada copia) del control file y del spfile:

$ rman target=/ catalog rman_user@cadena_conexión

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

Finalmente, se lanza una copia total de la base de datos:

$ rman target=/ catalog rman_user@cadena_conexión

RMAN> BACKUP DEVICE TYPE SBT_TAPE DATABASE;

Como curiosidad, si se quiere comprobar el estado de la copia se puede ejecutar lo siguiente:

RMAN> RESTORE VALIDATE DATABASE;

Borrar catálogo RMAN

No es algo habitual, pero puede ser un procedimiento que se deba aplicar en algún momento en alguna de nuestras bases de datos: después de una migración, después de realizar pruebas de recuperación, cuando se va a eliminar la base de datos definitivamente.

Es bastante más simple que crear el catálogo. En primer lugar, nos conectamos al catálogo de recuperación:

$ rman target=/ catalog rman_user@cadena_conexión

Hay que borrar todas las copias antes de eliminar el catálogo de recuperación. Para ello se hace un crosscheck de los backups, seguido de un delete obsolete y un delete expired, con la intención de compactar el repositorio de copias y que no se quede nada en el tintero (la intención es liberar todo el espacio posible):

RMAN> crosscheck backup;

RMAN> delete obsolete;

RMAN> delete expired;

Se borran los backups restantes:

RMAN> delete backup;

Para comprobar que los deletes han hecho efecto, se puede ejecutar:

RMAN> list backup;

Esta consulta no debería devolver ningún fichero.

Finalmente, se borra el catálogo:

RMAN> drop catalog;

El sistema nos avisará entonces de que estamos intentando borrar el catálogo de recuperación, y nos pedirá que insertemos otra vez la orden para confirmarlo.

 

Recuperar Base de Datos usando RMAN

Voy a explicar en esta entrada, de forma sencilla y resumida, los pasos a seguir para recuperar una base de datos Oracle haciendo uso de la herramienta RMAN.

Supongamos que se produce cualquier error accidental del tipo de borrar algún datafile. La forma inmediata de recuperar la base de datos es haciendo uso de RMAN. Para ello, este es el procedimiento:

  • Parar la base de datos.

SQL> SHUTDOWN IMMEDIATE;

$ rman target=/ catalog rman_user@cadena_conexión

RMAN> STARTUP MOUNT;

RMAN> RESTORE DATABASE;

RMAN> RECOVER DATABASE;

RMAN> ALTER DATABASE OPEN RESETLOGS;

RMAN> EXIT;

  • Bajar la base de datos, desde SQLPLUS.

SQL> SHUTDOWN IMMEDIATE;

  • Levantar la base de datos.

SQL> CONN / AS SYSDBA

SQL> STARTUP;

Recuperar datafile con RMAN

La situación es la siguiente. Mi base de datos está operativa y en correcto funcionamiento pero, por algún motivo que en este momento no viene al caso, una o varias aplicaciones que acceden a esta base de datos dan un error tipo ORA-00376 e indican que no pueden acceder a un datafile. Si se realiza una consulta desde SQLPLUS para comprobar el estado del datafile, el resultado será algo como lo que sigue:

SQL> select file_name,status, online_status from dba_data_files where file_name  
like '%nombre%'; 

 

FILE_NAME                                                    STATUS    ONLINE_ 
------------------------------------------------------------ --------- ------- 
+DG/sid/datafile/nombre.366.650544699                     AVAILABLE RECOVER 

 

Como se puede observar, el datafile se encuentra en estado RECOVER (el fichero tiene algún tipo de corrupción). Lo inmediato en este momento sería lanzar un comando recover desde la propia consola de SQLPLUS. Si la corrupción es reciente, es posible que esto funcione, pero si la corrupción del fichero data de algunas horas, lo más probable es que el intento dé algún tipo de error, como el que se puede ver a continuación: 

 

SQL> recover datafile ‘+DGANCD/ancri/datafile/know.366.650544699;

ORA-00279: el cambio 7306246681017 generado en 05/24/2009 02:45:57 es necesario para el thread 1

ORA-00289: sugerencia: +DGANCF/ancri/1_15322_619033057.dbf

ORA-00280: el cambio 7306246681017 para el thread 1 está en la secuencia número 15322

Especificar log: {<RET>=sugerido | nombre_archivo | AUTO | CANCEL}

ORA-00308: no se puede abrir el archive log ‘+DGANCF/ancri/1_15322_619033057.dbf’

ORA-17503: ksfdopn:2 Fallo al abrir el archivo +DGANCF/ancri/1_15322_619033057.dbf

ORA-15173: entry ’1_15322_619033057.dbf’ does not exist in directory ‘ancri’

SQL> recover datafile '+DG/sid/datafile/nombre.366.650544699'; 

 

ORA-00279: el cambio 7306246681017 generado en 05/24/2009 02:45:57 es necesario para el thread 1 

 

ORA-00289: sugerencia: +DG/sid/1_15322_619033057.dbf 

 

ORA-00280: el cambio 7306246681017 para el thread 1 está en la secuencia número 15322 

 

Especificar log: {<RET>=sugerido | nombre_archivo | AUTO | CANCEL} 

 

ORA-00308: no se puede abrir el archive log '+DG/sid/1_15322_619033057.dbf' 

 

ORA-17503: ksfdopn:2 Fallo al abrir el archivo +DG/sid/1_15322_619033057.dbf 

 

ORA-15173: entry '1_15322_619033057.dbf' does not exist in directory 'sid' 

En este momento entra en juego RMAN.

Hay que acceder a RMAN ya que para la recuperación del datafile en cuestión va a ser necesario uno o varios ficheros de archivelog, que es posible hayan sido copiados a algún dispositivo externo. Se entra por tanto a RMAN y se lanza el comando correspondiente:

RMAN> recover datafile '+DG/sid/datafile/nombre.366.650544699'; 

 

Iniciando recover en 25/05/09 

 

canal asignado: ORA_DISK_1 

 

canal ORA_DISK_1: sid=619 instancia=SID devtype=DISK 

 

canal asignado: ORA_SBT_TAPE_1 

 

canal ORA_SBT_TAPE_1: sid=628 instancia=SID devtype=SBT_TAPE 

 

canal ORA_SBT_TAPE_1: Data Protection for Oracle: version 5.4.1.0 

 

iniciando la recuperación del medio físico 

 

... 

 

recover terminado en 25/05/09 

Al terminar la recuperación de RMAN se lanza la misma consulta de chequeo del estado del datafile desde SQLPLUS. En este caso, el resultado será similar a lo siguiente:

SQL> select file_name,status,online_status from dba_data_files where file_name 
 like '%nombre%'; 

 

FILE_NAME STATUS ONLINE_ 
------------------------------------------------------------ --------- ------- 
+DG/sid/datafile/nombre.366.650544699 AVAILABLE OFFLINE 

 

El datafile ha sido recuperado, pero se encuentra en estado OFFLINE. Para finalizar el proceso de recuperación, se pone ONLINE.

 

SQL> alter database datafile '+DG/sid/datafile/nombre.366.650544699' online;                                      

 

Base de datos modificada. 

 

SQL>  select file_name,status,online_status from dba_data_files where file_name 
 like '%nombre%'; 

 

FILE_NAME                                                    STATUS    ONLINE_ 

 

------------------------------------------------------------ --------- ------- 

 

Ejemplos de uso de RMAN

Revisando las estadísticas del blog he comprobado que hay personas que llegan aquí mediante una búsqueda similar al título de este post. Por tanto he decidido crear una entrada especificando una serie de comandos comunes a la hora de usar RMAN.

De este modo, ahí va la lista. Si alguno de los visitantes echa en falta algo más, solo tiene que dejar un comentario.

  • Abrir una sesión anónima (sin autenticación):
oracle@srv:> rman target=/ 
  • Abrir una sesión con autenticación contra un catálogo de recuperación:
oracle@srv:> rman target=/ catalog nombre_catalogo@sid 
  • Ver los parámetros de configuración:
RMAN> show all; 
  • Listar las copias realizadas:
RMAN> list backup; 
  • Realizar una copia completa de la base de datos al disco flash:
RMAN> backup database include current controlfile plus archivelog; 
  • Realizar una copia completa de la base de datos a un dispositivo de cinta:
RMAN> backup device type sbt_tape database include current  
controlfile plus archivelog; 
  • Lanzar una copia de archivelog con borrado del no necesario:
RMAN> backup archivelog all not backed up delete all input; 
  • Mantenimiento y limpieza de copias obsoletas:
RMAN> crosscheck backup; 
RMAN> delete obsolete; 
  • Recuperación de un datafile borrado:
RMAN> restore datafile 'ruta_al_datafile'; 
RMAN> recover datafile 'nombre_datafile'; 
  • Recuperación de un datafile dañado:
RMAN> recover datafile 'nombre_datafile'; 
Share
Etiquetas: , ,

Leave a Reply

You must be Logged in to post comment.

office automation book