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