Está en la página 1de 8

Use RMAN Use Oracle Secure Backup Use Oracle's Flashback

Gua rpida para RMAN

http://www.orasite.com/backup-de-base-de-datos/guia-rapida-para-rman

1. Objetivos
Manual con ejemplos bsicos de uso de RMAN.

1. Conectarse al catalogo de RMAN de una BBDD determinada


[ora11g@prueba ~]$ rman target / catalog rman@rman Recovery Manager: Release 11.2.0.1.0 - Production on Tue Feb 1 10:00:45 2011 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. connected to target database: DBA11G (DBID=337560195) recovery catalog database Password: ***** connected to recovery catalog database

2. Crear y Configurar un catlogo de recuperacin. 2.1. Configurar el catlogo de recuperacin de la Base de datos
Conectarse a la BBDD para crear un tablespace nuevo

$ sqlplus /nolog SQL> connect /as sysdba Conectado. Crear un tablespace SQL> create tablespace nuevo datafile '/database/dba11g/nuevo.dbf' size 2M autoextend on; Tablespace creado.

2.2. Crear el propietario del catlogo de recuperacin.


SQL> create user rman 2 identified by rman 3 default tablespace nuevo 4 quota unlimited on nuevo;

SQL> grant connect to rman SQL> grant recovery_catalog_owner to rman;

2.3. Crear el catlogo de recuperacin


$ rman target / catalog rman@rman rman> create catalog;

3. Sincronizar el catlogo de recuperacin 3.1. Registrar una BBDD


$ rman target / catalog rman@rman RMAN> register database;

3.2. Desregistrar una BBDD


$ Rman target / catalog rman@rman RMAN> unregister database;

4. Borrar catalog de recuperacin


RMAN> connect catalog rman/rman@rman RMAN> drop catalog; RMAN> drop catalog;

5. Actualizacin de versin del catlogo de recuperacin.


RMAN> upgrade catalog;

6. Crear y usar un catlogo virtual privado 6.1. Crear el propietario del catlogo virtual privado.
$ sqlplus /nolog SQL> connect /as sysdba SQL> create user user_virtual 2 3 4 identified by uservirtual default tablespace users quota unlimited on users;

6.2. Otorgar permisos al propietario del catlogo virtual privado.


SQL> grant recovery_catalog_owner to user_virtual; SQL> grant catalog for database dba11g to user_virtual; SQL> grant register database to user_virtual;

6.3 Crear un catlogo virtual privado.


$ rman target / catalog user_virtual/uservirtual@rman RMAN> create virtual catalog;

Nota: Si la versin del cliente rman es anterior a Oracle Database 11g se debe ejecutar la siguiente sentencia:

RMAN> exe rman.dbms_rcvcat.create_virtual_catalog;

6.4 Usar el catlogo virtual privado.


Registramos una base de datos para este catlogo

$ rman target / catalog user_virtual/uservirtual@rman RMAN> register database;

VIsualizamos las bases de datos registradas

$ sqlplus user_virtual/user_virtual@rman SQL> Select distict db_name from dbinc;

7. Backups ( ejemplo con base de datos dba11g )


Nos conectamos a la base de datos contra el catlogo

$ export ORACLE_SID=dba11g$ rman target / catalog rman/rman@rman Recovery Manager: Release 11.2.0.1.0 - Production on Fri Feb 4 09:55:30 2011 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. connected to target database: DBA11G (DBID=337560195) connected to recovery catalog database

7.1 Backup completo de la BBDD (Whole Database Backup)


RMAN> backup as copy database spfile plus archivelog;

7.2 Full Backups


RMAN> backup database spfile plus archivelog;

7.3. Incremental Backups


Level 0 Incremental Backups

RMAN> backup incremental level 0 tablespace users;

Differential Incremental Backups

RMAN> backup incremental level 1 tablespace users;

7.4 Cumulative Incremental Backups


RMAN> backup incremental level 1 cumulative tablespace users;

7.5 Comprimir backups


RMAN> backup as compressed backupset format /ubicacion/ rman_%d_s%_t%_%p.bkupset tablespace users;

RMAN> backup as compressed backupset users;

7.6 Borrar todos los backups


RMAN> delete backup

7.7 Eliminar los backups obsoletos


RMAN> delete obsolete; RMAN retention policy will be applied to the command RMAN retention policy is set to recovery window of 1 days using channel ORA_DISK_1 Deleting the following obsolete backups and copies: ----Deleted 17 objects

7.8 Ms tipos de backup con RMAN


Backup de toda la base de datos

RMAN> backup database;

Backup de un tablespace

RMAN> backup tablespace tbs_name;

Backup de un usuario

RMAN> backup user username;

8. Recover/ Recuperacin con RMAN 8.1 Recuperacin total de una base de datos
Partimos de un Whole Database Backup y se ha borrado toda la base de datos

RMAN> backup as copy database spfile plus archivelog;

La recuperacin se realiza de la siguiente forma:

La base de datos tiene que estar en modo nomount$sqlplus /nolog

SQL> connect /as sysdba SQL> shutdown abort; SQL> startup nomount;

Recuperar la BBDD

RMAN> restore database; RMAN> recover database;

Montar la BBDD y abrir la base de datos con un resetlogs

SQL> alter database mount; SQL> alter database open resetlogs;

8.2 Recuperacin de los controlfile


$ export ORACLE_SID=dba11g $ rman target/ catalog rman/rman@rman RMAN> restore controlfile;

8.3 Comandos generales para recuperar la BBDD


RMAN> restore database; RMAN> recover database;

8.4 Comandos para la recuperacin a tener en cuenta


recover database until cancel recover database until time '2004-03-21:22:59:04' recover database until change 123456 recover datafile 'filename' until cancel recover datafile 'filename' until time '2004-03-21:22:59:04' recover datafile 'filename' until change 123456 recover tablespace ts_name until cancel recover tablespace ts_name until time '2004-03-21:22:59:04' recover tablespace ts_name until change 123456 recover database using backup controlfile

9. Listar los backups


RMAN> list backup;

*********************************************
Uso de RMAN para Respaldos
Recuerdo a mi primer Jefe cuando empec a desempear mi trabajo como DBA, lo que ms me recalc fue mi responsabilidad no slo de poder realizar backups, sino de poder restaurar la informacin de mis backups. Esta responsabilidad es la que me gusta transmitir a todos los DBAs con los cules he interactuado. De nada sirve tener un backup si no vas a poder recuperar la informacin. A menudo me preguntan sobre las formas de respaldos de bases de datos oracle, y siempre respondo que lo mejor es el uso de RMAN. Qu tan complejo puede ser RMAN?, la realidad es que ya configurado es muy sencillo, o en su forma ms simple, sacar un respaldo es cuestin de un comando en 2 palabras:

C:\Documents and Settings\Hugo\Escritorio>rman target / Recovery Manager : Release 10.2.0.3.0 - Production on Mi Jul 23 13:21:30 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved.

conectado a la base de datos destino: ORCL (DBID=524232147) RMAN> backup database;


Y el restore?

C:\Documents and Settings\Hugo\Escritorio>rman target / Recovery Manager : Release 10.2.0.3.0 - Production on Mi Jul 23 13:22:35 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved.

conectado a la base de datos destino: ORCL (DBID=524232147) RMAN> shutdown abort; RMAN> startup mount; RMAN> restore database; RMAN> recover database; RMAN> alter database open;
Claro es sencillo porque la base de datos est en modo archive, a pesar que no estoy usando un catlogo de RMAN (que sera lo ms recomendable), el restore es muy sencillo. La realidad es que no siempre tenemos este esquema "utpico" a nivel base de datos. En alguna ocasin me toc clonar la base de datos de un cliente con RMAN, tenan la base de datos en modo Archive, hicieron un hotbackup y al final del da, la informacin que se restaur sobre la instancia de desarrollo estaba corrupta. Lo que sucedi fue lo siguiente: El cliente estaba realizando algunas cargas de informacin sobre sus tablas. El "DBA" para realizar las cargas ms rpidas, decidi usar el mtodo de "Direct Load" (que me pareci muy buena opcin), sobre la tabla alterada con nologging (que me pareci una psima opcin). A la hora de realizar el respaldo, e incluso los archives, no se tena rastro de los insert sobre la tabla; se tenan rastros de los incrementos de extents y del movimiento del HWM. Para ejemplificar lo sucedido podemos hacer lo siguiente con dos sesiones: Primera sesin en SQL*Plus:

SQL> alter table prueba nologging; Tabla modificada. SQL> begin 2 for a in 1..100 3 loop 4 insert /*+APPEND*/ into prueba (select substr(object_name,1,3),CREATED,substr(owner,1,3)from dba_objects); 5 commit; 6 dbms_lock.sleep(2); 7 end loop; 8 end; 9 /
y en una sesin de RMAN

C:\Documents and Settings\Hugo\Escritorio>rman target / Recovery Manager : Release 10.2.0.3.0 - Production on Mi Jul 23 15:58:03 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved.

conectado a la base de datos destino: HECG (DBID=524232147) RMAN> backup database plus archivelog;
Con el comando plus archivelog, nos aseguramos de que todos los archives necesarios para restaurar este backup se incluyan, e incluso realiza un switch log al finalizar y respalda los archives nuevamente. La sesin de SQL*Plus termina, el backup termina y empezamos con el restore: Ahora, pensando en que tuviramos una falla en ese momento y queremos recuperar, podemos empezar un restore a cierta fecha (que es cuando el respaldo termin):

RMAN> shutdown abort; RMAN> startup mount

instancia Oracle iniciada Total del rea Global del Sistema Fixed Size Variable Size Database Buffers Redo Buffers base de datos montada RMAN> run { 2> set until time "to_date('23-07-2008 16:01:12','dd-mm-yyyy hh24:mi:ss')"; 3> restore database; 4> recover database; 5> } ejecutando el comando: SET until clause Iniciando restore en 21-JUL-08 canal asignado: ORA_DISK_1 canal ORA_DISK_1: sid=156 devtype=DISK canal ORA_DISK_1: iniciando restauraci+n del juego de copias de seguridad de archivos de datos canal ORA_DISK_1: especificando archivo(s) de datos para restaurar del juego de copias de seguridad restaurando el archivo de datos 00001 en C:\ORACLE\PRODUCT\ORADATA\ORCL\SYSTEM01.DBF restaurando el archivo de datos 00002 en C:\ORACLE\PRODUCT\ORADATA\ORCL\UNDOTBS01.DBF restaurando el archivo de datos 00003 en C:\ORACLE\PRODUCT\ORADATA\ORCL\SYSAUX01.DBF restaurando el archivo de datos 00004 en C:\ORACLE\PRODUCT\ORADATA\ORCL\USERS01.DBF restaurando el archivo de datos 00005 en C:\ORACLE\PRODUCT\ORADATA\ORCL\EXAMPLE01.DBF restaurando el archivo de datos 00006 en C:\CRYPTO\ORCL\DATAFILE\O1_MF_ORCL_42K6N37T_.DBF restaurando el archivo de datos 00007 en C:\PRUEBA01.DBF canal ORA_DISK_1: leyendo desde la parte de copia de seguridad C:\ORACLE\PRODUCT\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2008_07_21\O1_MF_ NNNDF_TAG20080721T093726_4897S8PY_.BKP RMAN> alter database open resetlogs;
Se debe de utilizar un resetlogs ya se us una recuperacin incompleta. Ahora entramos a SQL*Plus y ejecutamos un sql contra la tabla prueba

289406976 bytes bytes bytes bytes bytes

1290184 272629816 8388608 7098368

SQL> select count(1) from prueba; select count(1) from prueba * ERROR en lnea 1: ORA-01578: bloque de datos ORACLE corrupto (archivo nmero 4, bloque nmero 10251) ORA-01110: archivo de datos 4: 'C:\ORACLE\PRODUCT\ORADATA\ORCL\USERS01.DBF'

ORA-26040: Se ha cargado el bloque de datos utilizando la opcin NOLOGGING


La tabla queda en un estado inconsistente porque el diccionario de datos (que s genera redo) registr el crecimiento de bloques en la tabla, pero el objeto como tal no. Hay algunas formas de recuperar algo de informacin si es que los ndices estaban en modo logging, pero creanme... estamos en el peor caso de recuperacin. Dado todo lo anterior, creo que slo se me ocurre una posibilidad para evitar esto durante un backup. Y es uno de los comandos que se suelen usar en dataguard

RMAN> run { 2> sql "alter database force logging"; 3> backup database include current controlfile plus archivelog; 4> sql "alter database no force logging"; 5> } Iniciando backup en 23-JUL-08 log actual archivado usando el canal ORA_DISK_1 canal ORA_DISK_1: iniciando juego de copias de seguridad de archive log canal ORA_DISK_1: especificando archive log(s) en el juego de copias de seguridad thread de archive log de entrada=1 secuencia=1 recid=122 marca=660762972 thread de archive log de entrada=1 secuencia=2 recid=123 marca=660763141 thread de archive log de entrada=1 secuencia=3 recid=124 marca=660763187 canal ORA_DISK_1: iniciando parte 1 en 22-JUL-08 ... canal ORA_DISK_1: especificando archivo(s) de datos en el juego de copias de seguridad incluyendo el archivo de control actual en el juego de copias de seguridad manejador de parte=C:\ORACLE\PRODUCT\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2008_07_23\ O1_MF_NCNNF_TAG20080723T172009_48DQF74D_.BKP etiqueta=TAG20080723T172009 comentario=NONE canal ORA_DISK_1: juego de copias de seguridad terminado, tiempo transcurrido: 00:00:06 backup terminado en 23-JUL-08 thread de archive log de entrada=1 secuencia=4 recid=125 marca=660763348 thread de archive log de entrada=1 secuencia=5 recid=126 marca=660763352 backup terminado en 23-JUL-08
En este caso estoy incluyendo el controlfile para hacer una especie de recuperacin de desastre (que fue lo que hice realmente como clonado). Al mismo tiempo lanc el insert sobre la tabla prueba a travs del ciclo y con la tabla en nologging. Ya que es una recuperacin de desastre, simularemos la prdida del controlfile, y para poder recuperarlo, necesitamos el DBID de nuestra base de datos (se puede obtener conectndonos a rman o desde v$database). Hay que tener en cuenta el nombre del archivo que guarda el controlfile para poder extraerlo, as como las secuencias de archives que se tienen registradas en el bacjup para restaurar y recuperar.

RMAN> shutdown abort; instancia Oracle cerrada RMAN> startup nomount; conectado a la base de datos destino (no iniciada) instancia Oracle iniciada

Total del rea Global del Sistema Fixed Size Variable Size Database Buffers Redo Buffers RMAN> SET DBID 524232147; ejecutando el comando: SET DBID 1290184 226492472 54525952 7098368

289406976 bytes bytes bytes bytes bytes

RMAN> RUN 2> { 3> RESTORE CONTROLFILE FROM 'C:\ORACLE\PRODUCT\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2008_07_23\O1_MF _NCNNF_TAG20080723T172009_48DQF74D_.BKP 4> } Iniciando restore en 22-JUL-08 canal asignado: ORA_DISK_1 canal ORA_DISK_1: sid=156 devtype=DISK canal ORA_DISK_1: restaurando archivo de control canal ORA_DISK_1: restauracin terminada, tiempo transcurrido: 00:00:04 archivo de salida=C:\ORACLE\PRODUCT\ORADATA\ORCL\CONTROL01.CTL archivo de salida=C:\ORACLE\PRODUCT\ORADATA\ORCL\CONTROL02.CTL archivo de salida=C:\ORACLE\PRODUCT\ORADATA\ORCL\CONTROL03.CTL restore terminado en 22-JUL-08 RMAN> alter database mount; base de datos montada canal liberado: ORA_DISK_1 RMAN> RESTORE DATABASE UNTIL SEQUENCE 5; RMAN> RECOVER DATABASE UNTIL SEQUENCE 5; RMAN> ALTER DATABASE OPEN RESETLOGS;
Y ahora podemos conectarnos a SQL*Plus

SQL> select count(1) from prueba; COUNT(1) ---------9813490


Este ejemplo es muy raro que se encuentre en un ambiente productivo, y ms que poder lanzar los comandos sql de "alter database force logging", como DBAs debemos de analizar que nuestros objetos tengan activado el logging. Habr quien diga que los ndices pueden ir en nologging, pero les preguntara... Cunto tiempo tardaran en recrear los ndices que no tuvieran activado el logging? En algn otro Post pondr los scripts que se pueden usar para extraer datos de ndices correspondientes a una tabla perdida.
Publicado por Hugo E. Contreras Gamio en 13:17 Etiquetas: corrupcion, rman