Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

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


Este manual explica 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".

Cómo recuperar un fichero corrupto/dañado/eliminado de un tablespace de Oracle

Este manual explica 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. 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":

Si intentamos inciar 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



Nota: Revisado por AjpdSoft el 08-08-2006.
Anuncios


Enviado el Domingo, 23 julio a las 16:37:33 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A