Recovery Manager

 En este documento vamos a exponer diferentes aspectos, a la vez que 
 varios ejemplos del uso de Rman para hacer los Backups de ORACLE

Arrancar Rman

rman target <USER>/<PWD>@SID

Opciones

RMAN> LIST BACKUP OF DATABASE;

Lista los backups de la BBDD disponibles

RMAN> LIST COPY OF DATAFILE 1, 2, 3;

Lista las copias disponibles de los datafiles 1, 2 y 3

RMAN> LIST BACKUP OF ARCHIVELOG FROM SEQUENCE <n>

Lista las copias de los archivelogs...

RMAN> LIST CONTROLFILECOPY "/tmp/cf.cpy";

RMAN> LIST BACKUPSET OF DATAFILE 1;

RMAN> DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE 133 THREAD 1;

Borrar los archivelogs de nuestra BBDD hasta la secuencia 133 ¡OJO! el THREAD 1 es si tenemos
un RAC, nos borrara los del NODO 1 del RAC.

RMAN> DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 7 DAYS;
 
RMAN> CHANGE ARCHIVELOG ALL CROSSCHECK; 

Hace un chequeo de la disponibilidad de los archivelogs registrados en la BBDD (Por si los hemos borrado)

RMAN> DELETE FORCE OBSOLETE DEVICE TYPE DISK:

Borra todos los backups 'Obsoletos' en disco. Los obsoletos los marca la opcion 'RETENCION POLICY'.

Configure

  Rman nos permite tener una gran parte de las opciones de nuestros backups
  almacenados en 'el entorno' de rman:
CONFIGURE RETENTION POLICY TO REDUNDANCY 7;
CONFIGURE BACKUP OPTIMIZATION OFF;
CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '<PATH>/SID_%F.ctl.bck';
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE 'SBT_TAPE' TO '%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 2;
CONFIGURE DEVICE TYPE 'SBT_TAPE' PARALLELISM 2;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE DISK RATE 10 M;
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT  "<USER>/<PWD>@SID";
CONFIGURE CHANNEL 2 DEVICE TYPE DISK CONNECT  "<USER>/<PWD>@SID";
CONFIGURE CHANNEL 1 DEVICE TYPE 'SBT_TAPE' CONNECT  "<USER>/<PWD>@SID";
CONFIGURE CHANNEL 2 DEVICE TYPE 'SBT_TAPE' CONNECT  "<USER>/<PWD>@SID";

Rman con la BBDD en NOARCHIVELOG

 En el siguiente ejemplo exponemos como usar rman para hacer un <b style="color:black;background-color:#ffff66">backup</b> en frio.
 Cuando no tenemos la BBDD en ARCHIVELOG no tenemos mas remedio que hacer los
 backups en frio.
run { 
shutdown immediate; 
startup mount; 
allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=MDB,OB2BARLIST=New1)'; 
<b style="color:black;background-color:#ffff66">backup</b> <b style="color:black;background-color:#a0ffff">incremental</b> <b style="color:black;background-color:#99ff99">level</b> <incr_level> 
format 'New1<MDB_%s:%t:%p>.dbf' 
tablespace TS; 
} 

Ejemplos de Scripts de RMAN

Un <b style="color:black;background-color:#ffff66">Backup</b> simple

RMAN> run
2> { 
3> ALLOCATE CHANNEL NODE1 DEVICE TYPE DISK
4> FORMAT '/oracle2/rman/<SID>_%s_%t.bck';
<b style="color:black;background-color:#ffff66">BACKUP</b> <b style="color:black;background-color:#a0ffff">INCREMENTAL</b> <b style="color:black;background-color:#99ff99">LEVEL</b> <b style="color:black;background-color:#ff9999">0</b> <b style="color:black;background-color:#ff66ff">CUMULATIVE</b> DATABASE CHANNEL NODE1 ;
5> 6> <b style="color:black;background-color:#ffff66">BACKUP</b> FILESPERSET 20
7> (ARCHIVELOG ALL
8> DELETE ALL INPUT
9> CHANNEL NODE1);
10> }

<b style="color:black;background-color:#ffff66">Backup</b> de un RAC

Este es un ejemplo muy simple de un <b style=“color:black;background-color:#ffff66”>backup</b> de un RAC de 2 nodos

  • Abrimos conexion a los dos nodos
  • La copia de los datafiles nos basta lanzarla contra el nodo1
  • Necesitaremos copiar los archivelogs de los dos nodos.
  • En este ejemplo haremos una copia completa.
  • En el caso de querer hacer una <b style=“color:black;background-color:#a0ffff”>incremental</b>, solo tendremos que cambiar el '<b style=“color:black;background-color:#99ff99”>LEVEL</b> <b style=“color:black;background-color:#ff9999”>0</b>' por un '<b style=“color:black;background-color:#99ff99”>LEVEL</b> 1'
rman target sys/change_on_install@ORAC
	
RUN
{
ALLOCATE CHANNEL NODE1 DEVICE TYPE DISK
CONNECT '<User>/<PWD>@<SID NODO1>'
FORMAT '/oracle/product/9.2.0.4/backups/rman/<SID NODO1>_%d_%s_%t.bck';

ALLOCATE CHANNEL NODE2 DEVICE TYPE DISK
CONNECT '<User>/<PWD>@<SID NODO2>'
FORMAT '/oracle/product/9.2.0.4/backups/rman/<SID NODO2>_%d_%s_%t.bck';

<b style="color:black;background-color:#ffff66">BACKUP</b> <b style="color:black;background-color:#a0ffff">INCREMENTAL</b> <b style="color:black;background-color:#99ff99">LEVEL</b> <b style="color:black;background-color:#ff9999">0</b> <b style="color:black;background-color:#ff66ff">CUMULATIVE</b> DATABASE CHANNEL NODE1 ;

<b style="color:black;background-color:#ffff66">BACKUP</b> FILESPERSET 20
(ARCHIVELOG ALL
DELETE ALL INPUT
CHANNEL NODE1);

<b style="color:black;background-color:#ffff66">BACKUP</b> FILESPERSET 20
(ARCHIVELOG ALL
DELETE ALL INPUT
CHANNEL NODE2);
}

Restaurar unos Archivelogs

run
{
set archivelog destination to '/oracle/product/9.2.0.4/backups/rman';
restore archivelog from logseq 13032 until logseq 13033 thread 2;
}

…Restaura los archivelogs desde la secuencia 13032 hasta la 12033 del nodo 2 del RAC…

Ejemplos de SQLs para ver el estado de nuestros Bcks desde SQLPLUS

rem -----------------------------------------------------------------------
rem rman_run.sql
rem Monitoriza el estado del <b style="color:black;background-color:#ffff66">Backup</b> mientras esté en marcha
rem -----------------------------------------------------------------------
prompt Estado del <b style="color:black;background-color:#ffff66">Backup</b> de RMAN:
 
SELECT TO_CHAR (start_time, 'DD-MON-YY HH24:MI') "<b style="color:black;background-color:#ffff66">BACKUP</b> STARTED", sofar,
	totalwork, elapsed_seconds / 60 "ELAPSE (Min)",
	ROUND (sofar / totalwork * 100, 2) "Complete%"
FROM SYS.v_$session_longops
WHERE compnam = 'dbms_backup_restore'
/
rem -----------------------------------------------------------------------
rem Filename: rmanstat24.sql
rem Backups de datafiles y archivelogs de las últimas 24H.
rem -----------------------------------------------------------------------
prompt "RMAN Status for past 24-hours"
 
SELECT dbfiles || ' from ' || numfiles "Datafiles backed up",
	cfiles "Control Files backed up", spfiles "SPFiles backed up"
FROM (SELECT COUNT (*) numfiles
	FROM SYS.v_$datafile),
	(SELECT COUNT (*) dbfiles
		FROM SYS.v_$backup_datafile a, SYS.v_$datafile b
		WHERE a.file# = b.file# AND a.completion_time > SYSDATE - 1),
	(SELECT COUNT (*) cfiles
		FROM SYS.v_$backup_datafile
		WHERE file# = <b style="color:black;background-color:#ff9999">0</b> AND completion_time > SYSDATE - 1),
	(SELECT COUNT (*) spfiles
		FROM SYS.v_$backup_spfile
		WHERE completion_time > SYSDATE - 1)
 
/
 
-- Archlog Files de las últimas 24H
 
SELECT backedup || ' from ' || archived "Archlog files backed up",
	ondisk "Archlog files still on disk"
FROM (SELECT COUNT (*) archived
	FROM SYS.v_$archived_log
	WHERE completion_time > SYSDATE - 1),
	(SELECT COUNT (*) backedup
		FROM SYS.v_$archived_log
		WHERE backup_count > <b style="color:black;background-color:#ff9999">0</b> AND completion_time > SYSDATE - 1),
	(SELECT COUNT (*) ondisk
		FROM SYS.v_$archived_log
		WHERE archived = 'YES' AND deleted = 'NO')
 
/
 
-- RMAN en marcha:
SELECT to_char(start_time,'DD-MON-YY HH24:MI') "<b style="color:black;background-color:#ffff66">BACKUP</b> STARTED",
sofar, totalwork,
elapsed_seconds/60 "ELAPSE (Min)",
round(sofar/totalwork*100,2) "Complete%"
FROM sys.v_$session_longops
WHERE compnam = 'dbms_backup_restore'
/
rem -----------------------------------------------------------------------
rem Filename: rmanlist24.sql
rem Backups completados de las últimas 24H
rem -----------------------------------------------------------------------
tti "RMAN Backups for last 24-hours"
col type format a4
col handle format a35 trunc
col file# format 9999
col duration format a9
 
SELECT   DECODE (backup_type,
	'L', 'ARCH',
	'D', 'DB',
	'I', 'INC',
	'Unknown type=' || backup_type
	) TYPE,
	TO_CHAR (a.start_time, 'DDMON HH24:MI') start_time,
	TO_CHAR (a.elapsed_seconds / 60, '99.9') || ' Min' DURATION,
	SUBSTR (handle, -35) handle, NVL (d.file#, l.sequence#) file#,
	NVL (d.blocks, l.blocks) blocks
	FROM SYS.v_$backup_set a,
		SYS.v_$backup_piece b,
		SYS.v_$backup_datafile d,
		SYS.v_$backup_redolog l
WHERE a.start_time BETWEEN SYSDATE - 100 AND SYSDATE
	AND a.set_stamp = b.set_stamp
	AND a.set_stamp = d.set_stamp(+)
	AND a.set_stamp = l.set_stamp(+)
ORDER BY start_time, file#

Discusión

, España, %2009/%10/%15 %18:%Oct:

(Aclaración: Utilizo una BD con todos los ficheros fundamentales en discos de una EVA compartidos, por lo que el que tengan mas de un nodo no es importante. Datafiles, Controlfiles, GruposRedo y ArchiveLogs)

DOS DUDAS:


CONTROL FILE

Segun he leido, RMAN utiliza el CONTROL FILE para restaurar la copia de seguridad. Por esto no entiendo para que me sirve incluir el CONTROL FILE dentro de la copia Backup hecha por RMAN. Ejemplo: run { backup database include current controlfile plus archivelog }

Entiendo que junto con una copia de la BD hecha con RMAN deberiamos guardar por nuestra cuenta el CONTROL FILE, ¿¿ NO ?? (parto del punto de que no utilizo otra base de datos de apoyo para Rman, si no que nos basamos en el Fichero de Control)


BORRADO DE ARCHIVE LOGS

Por otro lado, el borrado de los Archive Logs. NO SE COMO ES LA MEJOR FORMA DE HACERLO Y LA MAS RECOMENDADA. POR EL MOMENTO CREO QUE SE 4 FORMAS (CORRIGEME SI ME EQUIVOCO PLIS):

1. Tras el propio backup satisfactorio usando en el script de RMAN: run { allocate channel C1 device type DISK format 'C:\oracle\CopSegur\CSMIBD_%d_%u_%t.bak'; backup database include current controlfile plus archivelog delete all input; } 2. Lo mismo de esta otra forma, lo cual me permite especificar mas detalles: run { allocate channel C1 device type DISK format 'C:\oracle\CopSegur\CSMIBD_%d_%u_%t.bak'; backup database include current controlfile plus archivelog; delete archivelog all backed up 2 times to sbt completed before 'SYSDATE-7'; } (aqui le decimos que borre solo los que lleven al menos 2 copias y sean de antes de 7 días) 3. En la propia configuración del RMAN RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; Este mandato no tengo muy claro lo que significa. Creo que indica que borre los ArchiveLogs segun se vayan salvando.

4. De forma independiente a las copias de seguridad, ejecutando periódicamente lo siguiente voy haciendo limpieza: RMAN> delete archivelog all completed before 'sysdate-7'; Borra los ArchiveLogs anteriores a 7 días, hayan sido salvados en backup o no.

No se si estoy equivocado en alguna de estas 4 formas y tampoco se cual es la mas conveniente al desconocer las ventajas e inconvenientes.

, España, %2009/%10/%15 %18:%Oct:

(Pongo de nuevo lo del Borrado de los Archive Logs ya que en el post anterior (no se porque) no aparecen separados los parrafos y es complicado leerlo asi)


BORRADO DE ARCHIVE LOGS

Por otro lado, el borrado de los Archive Logs. NO SE COMO ES LA MEJOR FORMA DE HACERLO Y LA MAS RECOMENDADA. POR EL MOMENTO CREO QUE SE 4 FORMAS (CORRIGEME SI ME EQUIVOCO PLIS):

1. Tras el propio backup satisfactorio usando en el script de RMAN:

run {

allocate channel C1 device type DISK format 'C:\oracle\CopSegur\CSMIBD_%d_%u_%t.bak';

backup database include current controlfile plus archivelog delete all input;

}

2. Lo mismo de esta otra forma, lo cual me permite especificar mas detalles:

run {

allocate channel C1 device type DISK format 'C:\oracle\CopSegur\CSMIBD_%d_%u_%t.bak';

backup database include current controlfile plus archivelog;

delete archivelog all backed up 2 times to sbt completed before 'SYSDATE-7';

}

(aqui le decimos que borre solo los que lleven al menos 2 copias y sean de antes de 7 días)

3. En la propia configuración del RMAN

RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;

Este mandato no tengo muy claro lo que significa. Creo que indica que borre los ArchiveLogs segun se vayan salvando.

4. De forma independiente a las copias de seguridad, ejecutando periódicamente lo siguiente voy haciendo limpieza:

RMAN> delete archivelog all completed before 'sysdate-7';

Borra los ArchiveLogs anteriores a 7 días, hayan sido salvados en backup o no.

No se si estoy equivocado en alguna de estas 4 formas y tampoco se cual es la mas conveniente al desconocer las ventajas e inconvenientes.

, %2010/%05/%18 %13:%May:

Con respecto a la primera duda: ya que el Rman guarda los metadatos de sus actividades en el sector reutilizable del controlfile, adjuntar un backup del mismo es muy recomendado.

, %2010/%05/%18 %13:%May:

Con respecto a la primera duda: ya que el Rman guarda los metadatos de sus actividades en el sector reutilizable del controlfile, adjuntar un backup del mismo es muy recomendado.

Enter your comment (wiki syntax is allowed):

Herramientas personales