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:

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

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

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

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:

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:

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

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

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:

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:

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

(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:

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:

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:

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:

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:

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

Nos conectaremos a la base de datos:

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

que mostrará el siguiente resultado:

STATUS
OPEN