Como hacer hot backup con Oracle RMAN o lo que es lo mismo copias de seguridad en caliente con ORACLE RMAN.

La aplicación rman permite realizar copias de seguridad tanto en caliente como en frío, (hot backup & cold backup).

Hot backup: Este tipo de copias de seguridad se realizan con la base de datos sin parar o desmontar, se copian los archivos dbf, control files y archive logs, siempre que se parametrize de esa manera.

Cold backup: Este tipo de copias de seguridad se realizan parando la base de datos, realizando la copia y volviendo a levantar la base de datos.

Hot Backup

A continuación un ejemplo de un script para copias de seguridad en caliente con RMAN. Primero ante todo debemos crear un archivo llamado backup.txt y copiamos este contenido:

run {
allocate channel dup1 device type disk;
allocate channel dup2 device type disk;
backup format 'r:\backup\data%U' database;
backup format 'r:\backup\arch_%U' archivelog all;
backup format 'r:\backup\ctl_%U' current controlfile;
host 'copy R:\admin\orcl\pfile\init.ora r:\backup';
release channel dup1;
release channel dup2;
}

El texto en rojo señala la ubicación destino de donde queremos que RMAN almacene los archivos dbf, archivelogs y control files, asi mismo mas abajo en la línea de host, podemos decirle a RMAN que copie el archivo de configuración de la base de datos.

Para llamar al archivo backup.txt, crearemos un nuevo archivo de procesos por lotes llamado rmanv10.cmd con el siguiente contenido:

SCRIPT PARA LANZAR EL BACKUP.TXT:

REM ************************************************************************************
REM * Script de copia de archivos en caliente con RMAN - Autor: (el pibe)
REM ************************************************************************************

@echo off
cls
echo.
echo Lanzando RMAN para iniciar la copia de archivos en caliente...
@rman target sys/sys @backup.txt
exit

RECUPERACION DE DATOS CON RMAN

Hay varias maneras de recuperar los archivos con RMAN, a continuación indicamos paso a paso como restaurar los dbf, los online redologs y los control files.

Recuperar los datafiles borrados o corruptos

Si al abrir el SQLPLUS nos aparece el siguiente error:

C:\>sqlplus /nolog

SQL*Plus: Release 9.2.0.4.0 - Production on Tue Jan 25 14:52:41 2005

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.

Total System Global Area 131555128 bytes
Fixed Size 454456 bytes
Variable Size 88080384 bytes
Database Buffers 41943040 bytes
Redo Buffers 1077248 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: 'D:\ORACLE_DATA\DATAFILES\ORCL\USERS01.DBF'

Eso significa que nuestro datafile del users01.dbf esta o bien corrupto o ha sido eliminado por error, para restaurarlo utilizamos los siguientes comandos:

Desde un CMD lanzamos el RMAN:

C:\>rman target /

Recovery Manager: Release 9.2.0.4.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

connected to target database: ORCL (DBID=1507972899)

--Vamos a restaurar el archivo faltante que antes nos decia en el SQLPLUS ( el archive 4 que esta marcado en rojo)…

RMAN> restore datafile 4;

Starting restore at 26/JAN/05

using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=14 devtype=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: sid=15 devtype=DISK
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00004 to D:\ORACLE_DATA\DATAFILES\ORCL\USERS01.DBF
channel ORA_DISK_1: restored backup piece 1
piece handle=D:\BACKUP\0QGB0UEC_1_1.BAK tag=TAG20050124T152708 params=NULL
channel ORA_DISK_1: restore complete
Finished restore at 26/JAN/05

--Ahora vamos a decirle a Oracle que recupere el archivo anterior. (primero restauramos el archivo y luego lo recuperamos).

RMAN> recover datafile 4;

Starting recover at 26/JAN/05 using channel ORA_DISK_1
using channel ORA_DISK_2

starting media recovery

archive log thread 1 sequence 4 is already on disk as file E:\ORACLE_ARCHIVE\ORCL\1_4.ARC
archive log thread 1 sequence 5 is already on disk as file C:\ORACLE_ARCHIVE\ORCL\1_5.ARC
archive log thread 1 sequence 6 is already on disk as file E:\ORACLE_ARCHIVE\ORCL\1_6.ARC
archive log thread 1 sequence 7 is already on disk as file E:\ORACLE_ARCHIVE\ORCL\1_7.ARC
archive log filename=E:\ORACLE_ARCHIVE\ORCL\1_4.ARC thread=1 sequence=4
archive log filename=C:\ORACLE_ARCHIVE\ORCL\1_5.ARC thread=1 sequence=5
media recovery complete
Finished recover at 26/JAN/05

--Ahora volvemos a intentar abrir la base de datos desde el RMAN.

RMAN> alter database open;

database opened

RMAN>

--Listo ya hemos recuperado el archivo.

Recuperar los Redo Logs corruptos o borrados

Si al abrir el SQLPLUS nos aparece el siguiente error:

SQL> startup
ORACLE instance started.

Total System Global Area 131555128 bytes
Fixed Size 454456 bytes
Variable Size 88080384 bytes
Database Buffers 41943040 bytes
Redo Buffers 1077248 bytes
Database mounted.
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: 'D:\ORACLE_DATA\LOGS\ORCL\REDO03A.LOG'

SQL>

Este error nos esta diciendo que el grupo de miembros del log 3 esta corrupto y no puede leerse.

Si no tenemos copia de este archive, sabemos que debemos hacer una recuperacion parcial. El primer paso es determinar cuantos archivos o grupos pueden ser recuperados. Para ello lanzamos una query a la vista V$LOG para encontrar el nº de cambio del sistema SCN que podemos recuperar:
--La base de datos debe estar montada para ver la vista v$log.

SQL> select first_change# from v$log where group#=3 ;

FIRST_CHANGE#
-------------
370255

SQL>

El FIRST_CHANGE# es el primer SCN estampado en el log que falta o esta corrupto. Esto implica que el ultimo SCN estampado en el log previo es 370254 (FIRST_CHANGE#-1). Este es el SCN mas alto que podemos recuperar de ese log. En orden a poder recuperar el log debemos primero restaurar todos los datafiles en este SCN. Debemos abrir los resetlogs de la base de datos para hacer una recuperacion parcial.
Ejemplo de RMAN recuperando un redologs

C:\>rman target /

Recovery Manager: Release 9.2.0.4.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

connected to target database: ORCL (DBID=1507972899)

--Restauramos toda la base de datos para determiner el SCN

RMAN> restore database until scn 370254;

Starting restore at 26/JAN/05

using channel ORA_DISK_1
using channel ORA_DISK_2
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to D:\ORACLE_DATA\DATAFILES\ORCL\SYSTEM01.DBF
restoring datafile 00004 to D:\ORACLE_DATA\DATAFILES\ORCL\USERS01.DBF
channel ORA_DISK_2: starting datafile backupset restore
channel ORA_DISK_2: specifying datafile(s) to restore from backup set
restoring datafile 00002 to D:\ORACLE_DATA\DATAFILES\ORCL\UNDOTBS01.DBF
restoring datafile 00003 to D:\ORACLE_DATA\DATAFILES\ORCL\TOOLS01.DBF
channel ORA_DISK_2: restored backup piece 1
piece handle=E:\BACKUP\13GB14IB_1_1.BAK tag=TAG20050124T171139 params=NUL
channel ORA_DISK_2: restore complete
channel ORA_DISK_1: restored backup piece 1
piece handle=E:\BACKUP\14GB14IB_1_1.BAK tag=TAG20050124T171139 params=NUL
channel ORA_DISK_1: restore complete
Finished restore at 26/JAN/05

--Recuperamos la base de datos

RMAN> recover database until scn 370254;

Starting recover at 26/JAN/05
using channel ORA_DISK_1
using channel ORA_DISK_2

starting media recovery

archive log thread 1 sequence 9 is already on disk as file E:\ORACLE_ARCHIVE\ORCL\1_9.ARC
archive log thread 1 sequence 10 is already on disk as file E:\ORACLE_ARCHIVE\ORCL\1_10.ARC
archive log thread 1 sequence 11 is already on disk as file E:\ORACLE_ARCHIVE\ORCL\1_11.ARC
archive log thread 1 sequence 12 is already on disk as file E:\ORACLE_ARCHIVE\ORCL\1_12.ARC
archive log filename=E:\ORACLE_ARCHIVE\ORCL\1_9.ARC thread=1 sequence=9
archive log filename=E:\ORACLE_ARCHIVE\ORCL\1_10.ARC thread=1 sequence=10
media recovery complete
Finished recover at 26/JAN/05

--Abrimos la base de datos con los RESETLOGS.

RMAN> alter database open resetlogs;

database opened

RMAN>

Nota: Todos los cambios despues de cuando se estropeo el redologs se pierden. Abrir la base de datos con los RESETLOGS solo se utiliza en caso de recuperacion parcial de los archivos.

Recuperando un control file borrado o corrupto

Cuando Oracle inicia como ya sabemos utiliza los control file para saber donde estan ubicados los datafiles y los online logs. Oracle siempre espera encontrar los control file en la ubicación definida en el INIT.ora o el spfile llamado CONTROL_FILE.

Si al abrir el SQLPLUS nos aparece el siguiente error:

SQL> startup

ORACLE instance started.

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-00205: error in identifying controlfile, check alert log for more info

SQL>

ORA-00202: controlfile: 'e:\oracle_dup_dest\controlfile\ORCL\control02.ctl'
ORA-27046: file size is not a multiple of logical block size
OSD-04012: file size mismatch (OS 5447783)

La solucion es simple, paramos la base de datos y copiamos de una ubicación de copia de seguridad el control file que esta corrupto. (ese es el caso mas facil).

En caso de que perdieramos todos los control files y no tuvieramos copia de seguridad (que suele pasar), RMAN puede recuperar los control files siempre y cuando tengamos bien todos los online logs. La base de datos se recuperara esta el punto de donde el control file faltante se haya perdido.

Un ejemplo de recuperacion:

-- Conectamos a RMAN
C:\>rman target /

Recovery Manager: Release 9.2.0.4.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

connected to target database: ORCL (not mounted)

-- Configuramos el DBID – obtenemos este nombre por ejemplo del backup del control file.
-- Por ejemplo, si el nombre del backup es
-- CTL_SP_BAK_C-1507972899-20050124-00 el DBID es
-- 1507972899. Este paso no es requerido si la instancia se inicia desde RMAN

RMAN> set dbid 1507972899

executing command: SET DBID

--Restaurar el controlfile desde el autobackup. Si el backup no esta en la ubicación original se debe especificar la ubicacion

RMAN> restore controlfile from 'e:\backup\CTL_SP_BAK_C-1507972899-20050124-00';

Starting restore at 26/JAN/05

using channel ORA_DISK_1
channel ORA_DISK_1: restoring controlfile
channel ORA_DISK_1: restore complete
replicating controlfile
input filename=D:\ORACLE_DATA\CONTROLFILE\ORCL\CONTROL01.CTL
output filename=E:\ORACLE_DUP_DEST\CONTROLFILE\ORCL\CONTROL02.CTL
output filename=C:\ORACLE_DUP_DEST\CONTROLFILE\ORCL\CONTROL03.CTL
Finished restore at 26/JAN/05

-- Ahora ese control file erroneo ha sido restaurado, ya podemos montar nuevamente la base de datos..

RMAN> mount database;

database mounted

-- All datafiles must be restored, since the controlfile is older than the current
-- datafiles. Datafile restore must be followed by recovery up to the current log.

RMAN> restore database;

Starting restore at 26/JAN/05

using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to D:\ORACLE_DATA\DATAFILES\ORCL\SYSTEM01.DBF
restoring datafile 00004 to D:\ORACLE_DATA\DATAFILES\ORCL\USERS01.DBF
channel ORA_DISK_1: restored backup piece 1
piece handle=E:\BACKUP\0DGB0I79_1_1.BAK tag=TAG20050124T115832 params=NULL
channel ORA_DISK_1: restore complete
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00002 to D:\ORACLE_DATA\DATAFILES\ORCL\UNDOTBS01.DBF
restoring datafile 00003 to D:\ORACLE_DATA\DATAFILES\ORCL\TOOLS01.DBF
channel ORA_DISK_1: restored backup piece 1
piece handle=E:\BACKUP\0CGB0I78_1_1.BAK tag=TAG20050124T115832 params=NULL
channel ORA_DISK_1: restore complete
Finished restore at 26/JAN/05

--La base de datos hay que recuperarla ya que todos los datafiles han sido restaurados desde la copia de seguridad.

RMAN> recover database;

Starting recover at 26/JAN/05
using channel ORA_DISK_1

starting media recovery

archive log thread 1 sequence 2 is already on disk as file E:\ORACLE_ARCHIVE\ORCL\1_2.ARC
archive log thread 1 sequence 4 is already on disk as file D:\ORACLE_DATA\LOGS\ORCL\REDO02A.LOG
archive log thread 1 sequence 5 is already on disk as file D:\ORACLE_DATA\LOGS\ORCL\REDO01A.LOG
archive log thread 1 sequence 6 is already on disk as file D:\ORACLE_DATA\LOGS\ORCL\REDO03A.LOG
archive log filename=E:\ORACLE_ARCHIVE\ORCL\1_2.ARC thread=1 sequence=2
archive log filename=E:\ORACLE_ARCHIVE\ORCL\1_3.ARC thread=1 sequence=3
archive log filename=E:\ORACLE_DATA\LOGS\ORCL\REDO02A.LOG thread=1 sequence=4
archive log filename=E:\ORACLE_DATA\LOGS\ORCL\REDO01A.LOG thread=1 sequence=5
archive log filename=E:\ORACLE_DATA\LOGS\ORCL\REDO03A.LOG thread=1 sequence=6
media recovery complete
Finished recover at 26/JAN/05

--La recuperacion ha terminado. Ahora debemos abrir la base de datos con la opcion RESETLOGS.
--Sino "alter database open resetlogs".

RMAN> open resetlogs database;

database opened

Fin del tuto.
Share on Google Plus
    Blogger Comment

0 comentarios: