You are on page 1of 7

c  c


 c  c  
CASO 1: MODO NOARCHIVELOG Y RECUPERACIÓN
CASO 2: BORRADO DE DATAFILES SIN DATOS EN NOARCHIVELOG
CASO 3: PÉRDIDA DE UN DATAFILE DE SYSTEM EN ARCHIVELOG
CASO 4: PÉRDIDA DE UN DATAFILE QUE NO ES DEL SYSTEM Y SIN
SEGMENTOS DE ROLLBACK, EN ARCHIVELOG
CASO 5: PÉRDIDA DE UN DATAFILE QUE NO ES DEL SYSTEM PERO
CONTIENE SEGMENTOS DE ROLLBACK ACTIVOS EN ARCHIVELOG CASO 6:
PÉRDIDA DE UN ARCHIVO DE LOG ONLINE NO ARCHIVADO
CASO 7: FALLO DE LA BD DURANTE BACKUPS EN CALIENTE
CASO 8: RECUPERACIÓN CON UN CONTROLFILE DE UN BACKUP

 c 
Se puede crear directamente la BD en modo Archivelog. Si se ha creado en
NoArchivelog la forma de activar este modo con archivado automático es cambiar los
siguientes parámetros del init.ora (también se puede hacer con alter system):

`  
 
`  

  
   
`     
     
Esto activa el archivado automático y fija el directorio y formato de los nombres de los
ficheros archived logs. Se puede usar el comando: archive log list para comprobarlo.
Aún falta activar el modo Archivelog, para ello usar el comando: Alter database
archivelog; (teniendo la BD en modo mount). Volver a comprobarlo con archive log
list. Para forzar el archivado de todos los redo logs online que aún no hayan sido
archivados hasta el momento de la activación, usar el comando: Archive log all

c  c 
 c  c 
Sólo se recupera al momento del backup.

Backup:
Hacer backup de todos los datafiles, redo logs online, init.ora y controlfiles.

Recuperación:

1. Hacer backup de la bd actual por si el backup que vamos a aplicar está mal.
2. Borrar todos los datafiles, controlfiles, redo logs online e init.ora actuales.
3. Restablecer todos los ficheros del backup.
4. Arrancar la BD.

Nota 1: Si el datafile no contiene ningún dato, por ejemplo es del tablespace temporary,
se puede arrancar la BD poniendo offline el datafile y reconstruyendo posteriormente el
tablespace: alter database datafile µ....¶ offline drop; (es el siguiente caso de estudio).
c        c 
En este caso se puede salvar el problema sin pérdida de datos.
Ejemplo: Se pierde un datafile del tablespace temporal.

Solución: Borrar el datafile con:

   
     
después de abrir de nuevo la BD el tablespace y el resto de sus ficheros están online por
lo que pueden seguir siendo utilizados, pero el datafile eliminado está offline y Oracle
recomienda volver a crear el tablespace.

Prueba desde el svrmgrl:

!    
"    
#   
  

$    
#   
   
#   
 
# 
%

&     '  
# 
%

&   
"  &    
(
  )         

 
"     #   
    *     
  
#   
   )   
  * 
$    
#   
   )     
#   
 
+  
     

!  
  
Nota: Si sucede esto con un tablespace de datos, recrearlo con todos sus objetos. Con
uno de índices: volver a crear los índices.

Nota 2: Oracle recomienda no hacer backup de los redo logs online ni en backups en
frío ni en caliente, ya que siempre se puede arrancar la BD con la opción resetlogs para
crearlos nuevos aunque se pierdan las modificaciones que estaban en los redo logs
online.

c        


 c 
Es posible poner un datafile offline y luego arrancar la BD, salvo en el caso de un
datafile del system. Hace falta recuperar el/los ficheros dañados de un backup online
anterior y realizar la recuperación sobre ellos. Antes de que se pueda abrir la BD, es
necesario que esté montada y después se tiene que ejecutar el comando recover
database.
c        

 
  c c 
Existen 3 opciones:

1.- recover database: con la BD montada pero no abierta, por tanto es una recuperación
offline.
2.- recover datafile: con la BD montada o abierta y el datafile offline, por tanto es una
recuperación online.
3.- recover tablespace: con la BD abierta y el tablespace offline, por tanto es una
recuperación online.

Prueba desde el svrmgrl:

!    
!   
, )   
 


-
  
, 
) -
  
, 
. ! 
# 
%

&   
"  &  
(
 
)        
    

,
(
 /'/
)            ' 
  
"     0 1     2          ' %

     3

Métodos de Recuperación:

1.- Con Recover database:

         

  
   



   
 

  4   
,     ) % .

2.- Con Recover datafile:

       
    
   
  
)   
   
   
      
)  

  4   
,     2   
$  *

 
   
  
)   

  4   
,    ) % .

3.- Con Recover tablespace:

   
   
    
   
  
)       

 
2  
   
   
  
 


    
 


  4   
,   0 
 %  
 
  
 


  4   
,    ) % .
c        
  
c   c c  c 
Ejemplo:
Fallan todos los datafiles que contienen los segmentos de rollback de la BD. Se pretende
hacer una recuperación online: después de poner offline todos los datafiles y abrir la
BD, se lanza una consulta de una tabla sobre la que existía una transacción activa antes
del fallo, y da el siguiente error: el fichero n no puede ser leido en este momento (n es el
número de datafile donde estaba el segmento de rollback asignado a dicha transacción).

Esto es porque mientras se realiza la recuperación de los datafiles no se puede acceder a


ninguna fila implicada en transacciones activas que apunten a segmentos de rollback.

Hasta que se recuperen los datafiles, hay que crear unos cuantos segmentos de rollback
adicionales que permitan el procesamiento de las nuevas transacciones.

Prueba desde el svrmgrl:


!    
!   
5 )   
 


" 
   
 '
  )
-
  
5 
5
"  &  
(
 
)   6  
 
  '
(
 '
7)         
 
 
'     

Ahora comentar (#) el parámetro rollback_segments del init.ora, si no durante la


apertura de la BD intentará poner online los segmentos de rollback privados indicados
en este parámetro y fallará ya que no están accesibles.

"    
#   
  
)   
#   
 
"   4   
5   0    
$  % 

 
    3
"  
   *
 
   '

 
   %

Crear segmentos de rollback para ser usados temporalmente hasta finalizar la


recuperación (después los borraremos):
!   '
   ) 

%

!   '
   . 

%

#   '
   ) 
#   '
   . 
"   4   
5 
   
  
8    
 

"   4   
5   0   
$  
#  
 

"   4   
5  *  
3
 
  % 
   

"  
   *
 
   '

 
   %

Poner esos segmentos online de nuevo y los temporales que hemos creado ponerlos
offline y borrarlos.
c      c   c  
Ejemplo:
Se tiene una BD en Archivelog con 3 grupos de redo log no multiplexados (1 miembro
cada uno). Se hacen backups online 2 veces por semana y una export completa de la BD
1 vez a la semana.
Debido a un corte de luz se pierden todos los redo logs online, los datafiles y
controlfiles están intactos.

Solución:
Aunque los datafiles están bien después del fallo, no se pueden usar porque no se puede
hacer recuperación automática de instancia ya que se han perdido los redo logs online.

Si se intenta forzar la apertura de la BD puede haber inconsistencias, hay que hacer una
recuperación de dispositivo. Para ello se restablecerán todos los datafiles de un backup
completo online u offline y se aplicarán los cambios almacenados en los archived redo
logs hasta el último redo log archivado disponible. Al tratarse de una recuperación
incompleta, no se puede hacer recuperación por datafiles o tablespaces, se debe usar
recover database.

Prueba con el svrmgrl:


"  &   9   :+
(
 4     6     
 
(
 4 
  '   

"    
8     
        ;    
#   
  
 

 
 

 <
*
 
<
 
 

Nota: Se podrían haber usado recover database until time ó until change si se hubiera
querido rehacer hasta un punto en el tiempo o hasta un SCN determinado.

c      c c  


Ejemplo:

Se estropea la máquina mientras se está haciendo un backup online. Cuando se intenta


arrancar de nuevo la BD pide una recuperación de dispositivo sugiriendo el número de
secuencia 2300 y el redo log online actual tiene secuencia 2335, lo que supone aplicar
unos 35 ficheros archivados antes de que se pueda abrir la BD.

Hasta la versión 7.2 de Oracle había que hacer este tipo de recuperación, pero a partir de
esa versión se puede finalizar el backup de los datafiles que están en modo backup
online mediante el comando    
    ' .

Prueba desde el svrmgrl:


!    
"  
#   
 
5=* < %   55
#  
     '
(
  7)   ' '    
 
!   
>)   
  
-
  
> 
>
! 
# 
%

&   
"  &      :+

Ahora se van a hacer 2 pruebas, la 1ª trata de abrir la BD con el datafile actual, la 2ª


trata de reemplazarlo por su backup intentando engañar a Oracle para que crea que es el
fichero actual:

Prueba 1: utilización del datafile actual:


"    
#   
 
#   
   7)    '
#   
 
"   4   
> ?@ >

Prueba 2: utilización del backup del datafile:


(
  7)  
(
 ' 7)    7)  
"    
#   
  1  2   
  '
   2
 
   3
#   
   7)    ' 1   
2
  '      
?@      
   
 
"   4    
> ?@ >

Nota: Se puede consultar la v$backup para saber qué datafiles están en modo backup:

"    A*
 
  B'

los que estén active están en modo backup.

c ! c  c cc   c


Hacer una recuperación con un backup de un fichero de control puede ser difícil,
siempre que sea posible intentar la recuperación con el controlfile actual, si no se puede
crear un nuevo controlfile, la utilización del backup del controlfile debe ser la última
opción a utilizar ya que es necesario abrir la BD con resetlogs.

Ejemplo:
Se tiene una BD de la que se hacen backups en frío copiando datafiles, redo logs online
y controlfiles. Se borra accidentamente el controlfile y se restaura su copia, al intentar
arrancar de nuevo la BD Oracle indica que se trata de un fichero antiguo.

Solución:
Hay 2 opciones: la 1ª es crear un controlfile con create controlfile (ya que los datafiles y
redo logs están bien), realizar la recuperación si fuera necesario y arrancar la BD.

La 2ª es utilizar el backup del controlfile, con lo que se deberá realizar una recuperación
de dispositivo, además Oracle forzará a usar la opción using backup controlfile, una vez
realizada la recuperación se debe arrancar la BD con la opción resetlogs y hacer un
backup completo (mejor la 1ª solución).
Prueba con el svrmgrl:
!    
"    
"    *
 
*     B 
!   
C )   
 

 
-
  
C 
C
! 
# 
%

&   
# 
%

&   
# 
%

&   
"  &  
(
 '   4            '
"    
#   
   
  2     
 
8     
?@
 <
   
8     

 '    

1º poner offline los datafiles de los tablespaces de solo lectura:


#   
   
8     

 '    
#   
    ?@
 

#   
   
 
  ?@
 

#   
  
 

#   

"    *
 
*     B 

Poner el tablespace de sólo lectura online con sus datafiles:


#  


"   4   
C ?@C

You might also like