Sidebar

En este ejemplo, vamos a eliminar el archivo de datos de SYSTEM y recuperar la base de datos.

 

En la vida real, si llegara a presentarse la perdida del datafile, la base de datos se caería y si por alguna razón sigue arriba, es posible que cuando se lleve a cabo el checkpoint la base de datos se caiga. Revisemos primero la ruta de nuestros archivos de datos, para poder eliminar el archivo correspondiente a SYSTEM y simular una falla en la base de datos.

 
sys@ORCL> select file_name from dba_data_files; 

FILE_NAME 
---------------------------------------------------------------------------------------------------- 
/u01/app/oracle/oradata/orcl/users01.dbf 
/u01/app/oracle/oradata/orcl/undotbs01.dbf 
/u01/app/oracle/oradata/orcl/sysaux01.dbf 
/u01/app/oracle/oradata/orcl/system01.dbf 
/u01/app/oracle/oradata/orcl/example01.dbf 
/u01/app/oracle/oradata/orcl/dba.dbf 

6 rows selected. 

Una ves localizado, podemos proceder a eliminarlos.

 
sys@ORCL> host mv /u01/app/oracle/oradata/orcl/system01.dbf /u01/app/oracle/oradata/orcl/system01.dbf2 

Ahora los pasos para llevar a cabo la recuperación es la siguiente: 1. Si la base de datos se encuentra todavía arriba, intentemos forzar un checkpoint y posteriormente dar de baja la base de datos. Recordemos que es posible que al realizar el checkpoint la base de datos se caiga.

 
sys@ORCL> alter system checkpoint; 

System altered. 

sys@ORCL> shutdown immediate; 
Database closed. 
Database dismounted. 
ORACLE instance shut down. 

2. Montar la base de datos. En este ejemplo, como demostración, quiero mostrar el error que nos arrojaría al tratar de levantar la base de datos. Ya no voy a montarla posteriormente, ya que en este caso se quedaría montada al no poder abrirla. Para montarla, se ejecuta el comando startup mount.

 
sys@ORCL> startup 
ORACLE instance started. 

Total System Global Area  627732480 bytes 
Fixed Size		    1338336 bytes 
Variable Size		  469763104 bytes 
Database Buffers	  150994944 bytes 
Redo Buffers		    5636096 bytes 
Database mounted. 
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file 
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf' 

3. Es momento de usar RMAN, si perdimos solo un datafile podemos ejecutar restore datafile, pero si perdimos mas de uno, podemos ejecutar restore tablespace. Aunque en mi caso solo fue un datafile, ejecute restore tablespace ya que mi tablespace solo esta formado por un datafile.

 
[oracle@atom ~]$ rman target / 

Recovery Manager: Release 11.2.0.1.0 - Production on Mon May 16 11:15:17 2011 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved. 

connected to target database: ORCL (DBID=1276134796, not open) 

RMAN> restore tablespace system; 

Starting restore at 16-MAY-11 
using target database control file instead of recovery catalog 
allocated channel: ORA_DISK_1 
channel ORA_DISK_1: SID=63 device type=DISK 

channel ORA_DISK_1: restoring datafile 00001 
input datafile copy RECID=2 STAMP=750940890 file 
name=/u01/app/oracle/flash_recovery_area/ORCL/datafile/o1_mf_system_6wqzwxmn_.dbf 
destination for restore of datafile 00001: /u01/app/oracle/oradata/orcl/system01.dbf 
channel ORA_DISK_1: copied datafile copy of datafile 00001 
output file name=/u01/app/oracle/oradata/orcl/system01.dbf RECID=0 STAMP=0 
Finished restore at 16-MAY-11 

4. Ahora necesitamos recuperar la base de datos. Esto, aplicara respaldos incrementales y los archive redo logs necesarios para recuperar SYSTEM. Si utilizamos restore datafile, entonces debemos ejecutar recover datafile.

 
RMAN> recover tablespace system; 

Starting recover at 16-MAY-11 
using channel ORA_DISK_1 

starting media recovery 

archived log for thread 1 with sequence 34 is already on disk as file 
/u01/app/oracle/arch/ORCL_0001_034_0748962428.arc 
archived log for thread 1 with sequence 35 is already on disk as file 
/u01/app/oracle/arch/ORCL_0001_035_0748962428.arc 
archived log for thread 1 with sequence 36 is already on disk as file 
/u01/app/oracle/arch/ORCL_0001_036_0748962428.arc 
archived log for thread 1 with sequence 37 is already on disk as file 
/u01/app/oracle/arch/ORCL_0001_037_0748962428.arc 
archived log for thread 1 with sequence 38 is already on disk as file 
/u01/app/oracle/arch/ORCL_0001_038_0748962428.arc 
archived log for thread 1 with sequence 39 is already on disk as file 
/u01/app/oracle/arch/ORCL_0001_039_0748962428.arc 
archived log for thread 1 with sequence 40 is already on disk as file 
/u01/app/oracle/arch/ORCL_0001_040_0748962428.arc 
archived log for thread 1 with sequence 41 is already on disk as file 
/u01/app/oracle/arch/ORCL_0001_041_0748962428.arc 
archived log for thread 1 with sequence 42 is already on disk as file 
/u01/app/oracle/arch/ORCL_0001_042_0748962428.arc 
archived log for thread 1 with sequence 43 is already on disk as file 
/u01/app/oracle/arch/ORCL_0001_043_0748962428.arc 
archived log file name=/u01/app/oracle/arch/ORCL_0001_0000000034_0748962428.arc thread=1 sequence=34 
archived log file name=/u01/app/oracle/arch/ORCL_0001_0000000035_0748962428.arc thread=1 sequence=35 
archived log file name=/u01/app/oracle/arch/ORCL_0001_0000000036_0748962428.arc thread=1 sequence=36 
archived log file name=/u01/app/oracle/arch/ORCL_0001_0000000037_0748962428.arc thread=1 sequence=37 
archived log file name=/u01/app/oracle/arch/ORCL_0001_0000000038_0748962428.arc thread=1 sequence=38 
archived log file name=/u01/app/oracle/arch/ORCL_0001_0000000039_0748962428.arc thread=1 sequence=39 
archived log file name=/u01/app/oracle/arch/ORCL_0001_0000000040_0748962428.arc thread=1 sequence=40 
archived log file name=/u01/app/oracle/arch/ORCL_0001_0000000041_0748962428.arc thread=1 sequence=41 
media recovery complete, elapsed time: 00:01:09 
Finished recover at 16-MAY-11 

5. Para concluir, abramos la base de datos, si restauramos también el controlfile, sera necesario abrir la base de datos con resetlogs, pero en este ejemplo no es el caso.

 
RMAN> alter database open; 

database opened 

Si revisamos de nuevo el directorio donde se encuentra SYSTEM, podemos observar que el archivo de restauro nuevamente. RMAN>

 
[oracle@atom ~]$ ls -l /u01/app/oracle/oradata/orcl/system01.db* 
-rw-r----- 1 oracle oinstall 723525632 May 16 11:26 /u01/app/oracle/oradata/orcl/system01.dbf 
-rw-r----- 1 oracle oinstall 723525632 May 16 11:14 /u01/app/oracle/oradata/orcl/system01.dbf2 

Por ultimo, quisiera comentar que también hubiera sido posible recuperarnos restaurando toda la base de datos, pero nos llevaría demasiado tiempo. Restaurando solamente SYSTEM, es mucho mas rápido, y seguramente nuestros usuarios no están dispuestos a esperar tanto tiempo.

TIP: Se puede usar el comando report schema para ver los datafiles de nuestra base de datos cuando solo es posible montarla.

RMAN> report schema;

Report of database schema for database with db_unique_name ORCL

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    690      SYSTEM               ***     /u01/app/oracle/oradata/orcl/system01.dbf
2    620      SYSAUX               ***     /u01/app/oracle/oradata/orcl/sysaux01.dbf
3    275      UNDOTBS1             ***     /u01/app/oracle/oradata/orcl/undotbs01.dbf
4    5        USERS                ***     /u01/app/oracle/oradata/orcl/users01.dbf
5    100      EXAMPLE              ***     /u01/app/oracle/oradata/orcl/example01.dbf
6    580      DBA                  ***     /u01/app/oracle/oradata/orcl/dba.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    96       TEMP                 32767       /u01/app/oracle/oradata/orcl/temp01.dbf
 

 


Tips BD