Beruflich Dokumente
Kultur Dokumente
http://www.orasite.com/backup-de-base-de-datos/guia-rapida-para-rman
1. Objetivos
Manual con ejemplos bsicos de uso de RMAN.
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.
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;
Nota: Si la versin del cliente rman es anterior a Oracle Database 11g se debe ejecutar la siguiente sentencia:
$ 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
Backup de un tablespace
Backup de un usuario
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
SQL> connect /as sysdba SQL> shutdown abort; SQL> startup nomount;
Recuperar la BBDD
*********************************************
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.
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):
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
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'
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
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