Tabla de Contenidos
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
(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.
(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.
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.
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.