viernes, 14 de octubre de 2016

Recuperar y restaurar Backup full Rman + ArchiveLogs + RedoLogs en un nuevo servidor


Este ejercicio es una buena práctica para saber qué hacer si nuestra base de datos sufre una pérdida completa, por ejemplo si se rompe el disco. O simplemente para verificar que nuestros backups funcionen correctamente.
Para este ejemplo necesitamos instalar una base de datos 11g en un entorno que tenga las estructuras físicas iguales al entorno origen (producción)
Tener en cuenta las ubicaciones donde se guardan los archivos generados por rman, donde se guardan los archivelogs y donde se encuentran los redologs.
En mi caso, son las siguientes ubicaciones
/mnt/orabackup/rman
/mnt/orabackup/archivelog
 /u01/app/oracle/oradata/oradb

Recomiendo que tanto los redologs  como los archivelogs los tengan multiplexados en dos ubicaciones en discos físicamente separados (en producción).
Asumimos  que nuestro script de rman que genera nuestros backups tenga  la opción CONTROLFILE AUTOBACKUP en ON (CONTROLFILE AUTOBACKUP ON)
1.    Bajamos la base
sqlplus / as sysdba
shutdown abort;
exit

2.       Copiar los backups, archivelog  y redologs desde producción al nuevo servidor.
·         Posicionarse en la carpeta donde se guardan los backps y ejecutar el comando
rsync -aHAXxv -e "ssh -T -c arcfour -o Compression=no -x" * 
oracle@172.16.xxx.xxx:/mnt/orabackup/rman 

·         Posicionarse en la carpeta donde se guardan los archivelog y ejecutar el comando
rsync -aHAXxv -e "ssh -T -c arcfour -o Compression=no -x" * 
oracle@172.16.xxx.xxx:/mnt/orabackup/archivelog 

·         Posicionarse en la carpeta donde se encuentran los redologs
rsync -aHAXxv -e "ssh -T -c arcfour -o Compression=no -x" redo* 
oracle@172.16.xxx.xxx:/u01/app/oracle/oradata/oradb 
Este comando realiza un sincronizado de la carpeta origen con la destino. Asegurarse de que el usuario con el cual nos conectamos al servidor destino sea Oracle.

3.    Borramos los datafiles ya que vamos a recuperar todo desde cero
rm /u01/app/oracle/oradata/oradb/*
4.    Restauramos el spfile en un pfile
rman target=/ nocatalog
set dbid=2616181252;
startup nomount;
run
{
restore spfile to pfile '/mnt/orabackup/initORADB.ora' 
from '/mnt/orabackup/rman/c-2616181252-20161013-00';
shutdown abort;
}
Exit
El número de dbid lo podemos obtener del backup que se genera cuando configuramos CONTROLFILE AUTOBACKUP ON. Por ejemplo mi achivo se llama c-2616181252-20161013-00, en donde el dbid son los 10 primeros números.
También lo podemos obtener con la siguiente consulta (en el servidor origen)
SELECT DBID FROM V$DATABASE;
5.    Levantamos la base con el pfile creado y restauramos el controfile del backup
rman target=/ nocatalog
set dbid=2616181252;
run {
startup force nomount pfile = '/mnt/orabackup/initORADB.ora';
allocate channel disk1 type disk FORMAT '/mnt/orabackup/rman/U%';
restore controlfile from '/mnt/orabackup/rman/c-2616181251-20161013-00';
alter database mount;
}
exit
6.    Realizamos la restauración y recuperación
rman nocatalog target=/ log=/mnt/orabackup/restaura.rman.log 
set dbid=2616181252;
run {
allocate channel disk1 type disk FORMAT '/mnt/orabackup/rman/U%';
restore database;
recover database;
}
Exit
7.    Abrimos la base en noarchivelog y resetlog
sqlplus / as sysdba 
alter database open resetlogs;

8.      Enjoy