Cómo recuperar un fichero que haya sido eliminado por error, o se haya corrompido correspondiente a un tablespace de una base de datos Oracle. Para poder restaurar este fichero dañado será necesario que se disponga de copia de seguridad mediante RMAN. Se utilizará el comando «restore datafile nº fichero».

Para poder restaurar este fichero dañado será necesario que se disponga de copia de seguridad mediante RMAN. Podéis consultar este manual para realizar una copia de seguridad mediante RMAN.

En primer lugar mostraremos los tablespaces y el estado de los mismos, para ello nos conectaremos a Oracle mediante SQL Plus, desde «Inicio» – «Ejecutar», escribiremos «cmd» y pulsaremos INTRO, nos aparecerá una ventana de consola de MS-DOS donde escribiremos:

sqlplus /nolog

Nos conectaremos a Oracle utilizando el usuario del sistema operativo (suponemos que nos hemos validado con un usuario con privilegios de administrador):

connect /as sysdba

Si queremos conectarnos con un usuario concreto a una base de datos concreta ejecutaremos el comando:

connect usuario/contraseña@base_datos as sysdba

Para mostrar los tablespaces y el estado de los mismos ejecutaremos la sentencia SQL:

select tablespace_name, status from dba_tablespaces;

Un ejemplo de resultado:

TABLESPACE_NAME STATUS
SYSTEM ONLINE
UNDO ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE

Para mostrar los ficheros de los tablespaces, la ubicación y el estado de los mismos ejecutaremos la sentencia SQL:

select file#, status, enabled, name from v$datafile;

Un ejemplo de resultado:

FILE# STATUS ENABLED
NAME
1 SYSTEM READ WRITE
C:/ORACLEXE/ORADATA/XE/SYSTEM.DBF
2 ONLINE READ WRITE
C:/ORACLEXE/ORADATA/XE/UNDO.DBF
3 ONLINE READ WRITE
C:/ORACLEXE/ORADATA/XE/SYSAUX.DBF
FILE# STATUS ENABLED
NAME
4 ONLINE READ WRITE
C:/ORACLEXE/ORADATA/XE/USERS.DBF

Para poder simular la pérdida de un fichero de datos de Oracle detendremos la base de datos para poder eliminarlo:

shutdown immediate;

Eliminaremos de forma intencionada (para simular la eliminación accidental) el fichero «USERS.DBF» correspondiente al tablespace «USERS»:

Cómo recuperar un fichero dañado ó eliminado de un tablespace de Oracle con RMAN

Si intentamos iniciar la base de datos ahora con el comando:

startup;

Nos aparecerá el siguiente mensaje de error:

ORA-01157: no se puede identificar/bloquear el archivo de datos 4 – consulte el
archivo de rastreo del DBWR
ORA-01110: archivo de datos 4: ‘C:/ORACLEXE/ORADATA/XE/USERS.DBF’

Indicando que falta un fichero de datos y que la base de datos no se ha podido abrir. Para comprobar el estado de la base de datos ejecutaremos:

select status from v$instance;

Nos devolverá:

STATUS
MOUNTED

La base de datos no ha podido abrirse pues falta un fichero de datos. Ahora procederemos a recuperarlo mediante RMAN. Para ello abriremos una ventana de MS-DOS, desde «Inicio» – «Ejecutar» introduciremos «cmd» y pulsaremos INTRO, a continuación ejecutaremos la aplicación RMAN:

RMAN

Nos conectaremos a la base de datos de la que hayamos perdido el fichero:

connect target /@XE

(en nuestro caso la base de datos se llama «XE»)

Para comprobar que estamos conectados a la base de datos correcta y cuáles son los tablespaces ejecutaremos el comando:

report schema;

Con el resultado:

Report of database schema
File K-bytes Tablespace RB segs Datafile Name
1 700160 SYSTEM *** C:/ORACLEXE/ORADATA/XE/SYSTEM.DBF
2 235520 UNDO *** C:/ORACLEXE/ORADATA/XE/UNDO.DBF
3 5120 SYSAUX *** C:/ORACLEXE/ORADATA/XE/SYSAUX.DBF
22 27648000 USERS *** C:/ORACLEXE/ORADATA/XE/USERS.DBF

Para mostrar los juegos de copia de seguridad actuales ejecutamos el comando:

list backup;

Para verificar la copia de seguridad realizada, también los mostrará el número de fichero que queremos restaurar. El resultado de este comando es:

se utiliza el archivo de control de la base de datos destino en lugar del catálogo de recuperación
Lista de Juegos de Copias de Seguridad
Clave BS Tamaño Tipo de Dispositivo Tiempo Transcurrido Hora de Finalización
1 44.48M DISK 00:00:04 23/07/06
Clave BP: 1 Estado: AVAILABLE Comprimido: NO Etiqueta: TAG20060723T2
03641
Nombre de Parte: C:/TEMP/CSBD_XE_01HOU5EV_596579807.BAK
Lista de Archive Logs en el juego de copias de seguridad 1
Thrd Sec. SCN Inf. Hora Inferior SCN Sgte Hora Sgte
1 22 1134115 23/07/06 1145424 23/07/06
Clave BS Tipo LV Tamaño Tipo de Dispositivo Tiempo Transcurrido Hora de Finalización
2 Full 535.44M DISK 00:00:50 23/07/06
Clave BP: 2 Estado: AVAILABLE Comprimido: NO Etiqueta: TAG20060723T2
03657
Nombre de Parte: C:/TEMP/CSBD_XE_02HOU5FA_596579818.BAK
Lista de Archivos de Datos en el juego de copias de seguridad 2
Tipo de Archivo LV SCN Pto. Ctrl. Hora de Punto de Control Nombre
1 Full 1145435 23/07/06 C:/ORACLEXE/ORADATA/XE/SYSTEM.DBF
2 Full 1145435 23/07/06 C:/ORACLEXE/ORADATA/XE/UNDO.DBF
3 Full 1145435 23/07/06 C:/ORACLEXE/ORADATA/XE/SYSAUX.DBF
4 Full 1145435 23/07/06 C:/ORACLEXE/ORADATA/XE/USERS.DBF
Clave BS Tipo LV Tamaño Tipo de Dispositivo Tiempo Transcurrido Hora de Finalización
3 Full 6.80M DISK 00:00:03 23/07/06
Clave BP: 3 Estado: AVAILABLE Comprimido: NO Etiqueta: TAG20060723T2
03657
Nombre de Parte: C:/TEMP/CSBD_XE_03HOU5H1_596579873.BAK
Archivo de Control Incluido: SCN de Punto de Control: 1145453 Hora de Punto de Control: 23/07/06
SPFILE Incluido: Hora de Modificación: 23/07/06
Clave BS Tamaño Tipo de Dispositivo Tiempo Transcurrido Hora de Finalización
4 2.50K DISK 00:00:01 23/07/06
Clave BP: 4 Estado: AVAILABLE Comprimido: NO Etiqueta: TAG20060723T2
03758
Nombre de Parte: C:/TEMP/CSBD_XE_04HOU5H6_596579878.BAK
Lista de Archive Logs en el juego de copias de seguridad 4
Thrd Sec. SCN Inf. Hora Inferior SCN Sgte Hora Sgte
1 23 1145424 23/07/06 1145457 23/07/06

Podemos observar que el número de pieza del fichero «USERS.DBF» es el 4, con lo cual ejecutaremos el comando:

restore datafile 4;

El resultado de este comando es:

Iniciando restore en 23/07/06
canal asignado: ORA_DISK_1
canal ORA_DISK_1: sid=36 devtype=DISK

canal ORA_DISK_1: iniciando restauración del juego de copias de seguridad de archivos de datos
canal ORA_DISK_1: especificando archivo(s) de datos para restaurar del juego de
copias de seguridad
restaurando el archivo de datos 00004 en C:/ORACLEXE/ORADATA/XE/USERS.DBF
canal ORA_DISK_1: leyendo desde la parte de copia de seguridad C:/TEMP/CSBD_XE_02HOU5FA_596579818.BAK
canal ORA_DISK_1: parte 1 de la copia de seguridad restaurada
manejador de parte=C:/TEMP/CSBD_XE_02HOU5FA_596579818.BAK etiqueta=TAG20060723T2
03657
canal ORA_DISK_1: restauración terminada, tiempo transcurrido: 00:00:16
restore terminado en 23/07/06

Por último ejecutaremos el siguiente comando para sincronizar el archivo restaurado utilizando los redo log del archivado automático:

recover datafile 4;

El resultado de este comando será:

Iniciando recover en 23/07/06
usando el canal ORA_DISK_1

iniciando la recuperación del medio físico
recuperación del medio físico terminada, tiempo transcurrido: 00:00:01
recover terminado en 23/07/06

Por último abriremos la base de datos con el comando:

alter database open;

Para comprobar que el fichero se ha recuperado correctamente nos conectaremos a la base de datos Oracle mediante SQL Plus:

sqlplus /nolog

Nos conectaremos a la base de datos:

connect /as sysdba

Ejecutaremos la siguiente sentencia SQL para comprobar que la base de datos se está abierta correctamente:

select status from v$instance;

que mostrará el siguiente resultado:

STATUS
OPEN

Cómo recuperar un fichero dañado ó eliminado de un tablespace de Oracle con RMAN