miércoles, 4 de diciembre de 2019

Cómo restaurar backup de RMAN en otro servidor windows con diferentes rutas

Cómo restaurar backup de RMAN en otro servidor windows con diferentes rutas


Hola.

En este post voy a explicar cómo restaurar un backup RMAN de Oracle 11g en otro servidor windows con diferentes rutas. Hace tiempo escribí otro artículo similar para Restaurar backup RMAN con las mismas rutas pero este artículo es usando Recovery Manager y con ambas bases de datos usando diferentes rutas.

En este caso la base de datos origen y la base de datos destino se encuentran en la siguientes rutas:

Base de datos origen se encuentra en D:\app\<ORACLE_BASE>\
Base de datos destino se encuentra en F:\app\<ORACLE_BASE>\

Archivos necesarios.


Primero debemos obtener los archivos necesarios de la base de datos origen para la restauración en el nuevo servidor. Son los mismos archivos para el caso de la restauración con mismas rutas.

1.- Backup de la base de datos origen
2.- Password file
3.- Pfile de la base de datos origen

Para obtener estos archivos, sigan los siguientes pasos:

1.- Backup de la base de datos origen con RMAN

RMAN> BACKUP DATABASE;
.
piece handle=D:\app\<ORACLE_BASE>\flash_recovery_area\DATABASE\BACKUPSET\2019_10_06\O1_MF_
NNNDF_TAG20191006T150022_GSNGG8C7_.BKP tag=TAG20191006T150022 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:16
Finished backup at 06-OCT-19
Starting Control File and SPFILE Autobackup at 06-OCT-19
piece handle=D:\app\<ORACLE_BASE>\flash_recovery_area\DATABASE\AUTOBACKUP\2019_10_06\O1_MF
_S_1020956559_GSNGLJXS_.BKP comment=NONE
Finished Control File and SPFILE Autobackup at 06-OCT-19
RMAN>

De los archivos generados, necesitamos copiar los archivos generados en las carpetas AUTOBACKUP y BACKUPSET del Flash recovery area.

-El backup del control file se encuentra en la carpeta AUTOBACKUP
-El backup de los datos se encuentra en la carpeta BACKUPSET

2.- El password file se encuentra en D:\app\<ORACLE_BASE>\product\11.2.0\dbhome_1\database

3.- Create PFILE from SPFILE en la base de datos origen y copiarlo al nuevo servidor

RMAN> SQL "CREATE PFILE FROM SPFILE";

El archivo se crea en D:\app\<ORACLE_BASE>\product\11.2.0\dbhome_1\database

Copiar el PFILE generado (INITdatabase.ORA) al servidor destino y editar las rutas del nuevo servidor, en este caso a unidad F. No deben cambiar el nombre de la base de datos, tiene que ser el mismo nombre.

Ejemplo de las lineas a editar:

database.__oracle_base='F:\app\<ORACLE_BASE>'#ORACLE_BASE set from environment
*.audit_file_dest='F:\app\<ORACLE_BASE>\admin\database\adump'
*.control_files='F:\app\<ORACLE_BASE>\oradata\database\control01.ctl','F:\app\<ORACLE_BASE>\flash_recovery_area\database\control02.ctl'
*.db_recovery_file_dest='F:\app\<ORACLE_BASE>\flash_recovery_area'

Y así con todas las lineas que tengan ruta del servidor origen deben cambiarlas por la ruta del servidor destino.

4.- Crear una base de datos en la máquina destino con el mismo nombre de la base de datos que estamos restaurando. Click aquí para crear la base de datos.

Todos los archivos generados hasta aquí los he guardado en la siguiente ubicación pero puede ser la que ustedes elijan: E:\backup\

Comandos para la restauración con RMAN


De aquí en adelante comienza la restauración de la base de datos en el nuevo servidor.

1.- Reemplazar el password file en el nuevo servidor en la misma ubicación, diferente unidad.

F:\app\<ORACLE_BASE>\product\11.2.0\dbhome_1\database

2.- Abrir un command prompt como administrador y ejecutar los siguientes comandos. Es muy importante que sea como administrador y el orden de las instrucciones.

-Asignar la variable ORACLE_SID con el nombre de la base de datos y entrar a RMAN

SET ORACLE_SID=<db_name>
RMAN TARGET /

-Apagar la base de datos y asignar el DBID de la base de datos origen. Click aqui para obtener el DBID.

RMAN>SHUTDOWN IMMEDIATE;
RMAN>SET DBID 4042975402;

-Iniciar en nomount con el PFILE generado anteriormente y editado con las nuevas rutas.

RMAN>STARTUP NOMOUNT PFILE=E:\backup\INITdatabase.ORA;

-Crear SPFILE from PFILE y forzamos nuevamente a nomount. Con esto estamos reescribiendo los parámetros de inicio de la base de datos origen a la destino.

RMAN>SQL "CREATE SPFILE FROM PFILE=''E:\backup\INITdatabase.ORA''";
RMAN>STARTUP FORCE NOMOUNT;

-Restaurar el control file del backup. Esto reescribe los archivos de control en el nuevo servidor.

RMAN> RESTORE CONTROLFILE FROM 'E:\backup\O1_MF_S_1020956559_GSNGLJXS_.BKP';

-Montar la base de datos

RMAN> ALTER DATABASE MOUNT;

-Renombrar los tres Redolog files con su nueva ruta.

RMAN>SQL "ALTER DATABASE RENAME FILE ''D:\app\<ORACLE_BASE>\oradata\DATABASE\REDO01.LOG'' TO ''F:\app\<ORACLE_BASE>\oradata\DATABASE\REDO01.LOG''";

RMAN>SQL "ALTER DATABASE RENAME FILE ''D:\app\<ORACLE_BASE>\oradata\DATABASE\REDO02.LOG'' TO ''F:\app\<ORACLE_BASE>\oradata\DATABASE\REDO02.LOG''";

RMAN>SQL "ALTER DATABASE RENAME FILE ''D:\app\<ORACLE_BASE>\oradata\DATABASE\REDO03.LOG'' TO ''F:\app\<ORACLE_BASE>\oradata\DATABASE\REDO03.LOG''";

-Borrar físicamente los tres redolog files del server destino porque me pasa que el recover falla al desconocerlos. Estos se crean nuevamente el abrir la base de datos así que no hay problema.

F:\app\<ORACLE_BASE>\ORADATA\DATABASE\REDO01.LOG
F:\app\<ORACLE_BASE>\ORADATA\DATABASE\REDO02.LOG
F:\app\<ORACLE_BASE>\ORADATA\DATABASE\REDO03.LOG

-Catalog start with desde RMAN. Con esto indicamos la ubicación de nuestros dos archivos de backup. Click en YES cuando pida confirmar catalogar los archivos. La siguiente línea puede fallar si no ejecutaron el SET DBID.

RMAN> CATALOG START WITH 'E:\backup\';

-Ejecutar las instrucciones set newname para renombre los database files a las nuevas rutas del servidor. Cambien el ORACLE_BASE path de las siguientes instrucciones.
El recover puede mostrar un error al finalizar si tienen su base de datos en modo archive log. Esto es normal ya que no estamos aplicando secuencia de archivelogs.

RMAN> RUN { 
SET NEWNAME FOR DATAFILE 'D:\APP\<ORACLE_BASE>\ORADATA\DATABASE\SYSTEM01.DBF' TO 'F:\app\<ORACLE_BASE>\oradata\DATABASE\SYSTEM01.DBF'; 
SET NEWNAME FOR DATAFILE 'D:\APP\<ORACLE_BASE>\ORADATA\DATABASE\SYSAUX01.DBF' TO 'F:\app\<ORACLE_BASE>\oradata\DATABASE\SYSAUX01.DBF'; 
SET NEWNAME FOR DATAFILE 'D:\APP\<ORACLE_BASE>\ORADATA\DATABASE\UNDOTBS01.DBF' TO 'F:\app\<ORACLE_BASE>\oradata\DATABASE\UNDOTBS01.DBF'; 
SET NEWNAME FOR DATAFILE 'D:\APP\<ORACLE_BASE>\ORADATA\DATABASE\USERS01.DBF' TO 'F:\app\<ORACLE_BASE>\oradata\DATABASE\USERS01.DBF'; 
SET NEWNAME FOR DATAFILE 'D:\APP\<ORACLE_BASE>\ORADATA\DATABASE\DATABASE_IDX01.DBF' TO 'F:\app\<ORACLE_BASE>\oradata\DATABASE\DATABASE_IDX01.DBF'; 
SET NEWNAME FOR DATAFILE 'D:\APP\<ORACLE_BASE>\ORADATA\DATABASE\DATABASE_IDX02.DBF' TO 'F:\app\<ORACLE_BASE>\oradata\DATABASE\DATABASE_IDX02.DBF'; 
SET NEWNAME FOR DATAFILE 'D:\APP\<ORACLE_BASE>\ORADATA\DATABASE\DATABASE_DAT01.DBF' TO 'F:\app\<ORACLE_BASE>\oradata\DATABASE\DATABASE_DAT01.DBF'; 
SET NEWNAME FOR DATAFILE 'D:\APP\<ORACLE_BASE>\ORADATA\DATABASE\DATABASE_DAT02.DBF' TO 'F:\app\<ORACLE_BASE>\oradata\DATABASE\DATABASE_DAT02.DBF'; 
SET NEWNAME FOR TEMPFILE 'D:\APP\<ORACLE_BASE>\ORADATA\DATABASE\TEMP01.DBF' TO 'F:\app\<ORACLE_BASE>\oradata\DATABASE\TEMP01.DBF'; 
SWITCH TEMPFILE ALL; 
RESTORE DATABASE; 
SWITCH DATAFILE ALL;
RECOVER DATABASE; 
}

-Finalmente abrimos la base de datos con la opción resetlogs. Este paso va a regenerar los REDO logs que borramos anteriormente. Ojo porque al abrir con resetlogs ya no se pueden aplicar los archivelogs después.

RMAN>ALTER DATABASE OPEN RESETLOGS;

database opened

-Es importante recrear el tablespace temporal ya que este no es restaurado por RMAN y pertenece a la base de datos destino. Les dejo aquí el link de cómo recrear el tablespace temporal.

*Aguas con las comillas y apóstrofes si están copiando los comandos.

Espero les sirva.