Recuperar un datafile almacenado sobre un volumen raw

En una bbdd de pruebas tenemos sus datafiles almacenados en volúmenes RAW.

Este tipo de almacenamiento se emplea por motivos históricos por que cuando los discos eran otros, mejoraba ligeramente rendimiento al eliminar capas de software. Sin embargo la tendencia es ir avandonándolo, ya que exige un esfuerzo extra de administración que prácticamente ya no compensa con las nuevas cabinas de almacenamiento. De hecho Oracle lo desaconseja en sus Papers recientes e incluso no garantiza que se soporte en futuras versiones.

Supongamos que en una versión 10g accidentalmente desaparece uno de los volúmenes que contiene/es un datafile de tablespace USERS.


SQL> startup
ORACLE instance started.


Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 92276304 bytes
Database Buffers 188743680 bytes
Redo Buffers 2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/dev/raw/raw9'

Lástima, no encuentra el fichero 5, afortunadamente tenemos una copia de seguridad reciente y todos los archivelog generados desde entones. Inicio RMAN y muevo el datafile a otra ubicación.


RMAN> run
2> {
3> set newname for datafile 5 to '/u02/oradata/test/user02.dbf';
4> restore datafile 5;
5> }

Y el resultado de este bloque RUN es:

executing command: SET NEWNAME

Starting restore at 27-APR-09
using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00005 to /u02/oradata/test/user02.dbf
channel ORA_DISK_1: reading from backup piece /u02/oradata/flash_recovery_area/TEST/backupset/2009_04_27/o1_mf_nnndf_TAG20090427T171253_4zclvocj_.bkp
channel ORA_DISK_1: restored backup piece 1
piece handle=/u02/oradata/flash_recovery_area/TEST/backupset/2009_04_27/o1_mf_nnndf_TAG20090427T171253_4zclvocj_.bkp tag=TAG20090427T171253
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 27-APR-09

He recuperado el media en la nueva dirección pero el fichero de control de la bbdd todavia apunta a la direccion vieja.


SQL> alter database rename file '/dev/raw/raw9' to '/u02/oradata/test/user02.dbf';

RMAN> recover database;

RMAN> alter database open;

Se recupera la bbdd, y se abre para los usuarios. Ya está la bbdd dando servicio.

De momento el datafile está montado en un filesystem, pero se puede volver a la situación de partida en RAW. Se repasa el volumen o se provisiona otro y fácilmente, con una operativa similar, se puede pasar a un almacenamiento como están el resto de los datafiles.

Muy sencillo.