Reparar una base de datos oracle por el error UNDOTBS01.

Este procedimiento es para recuperar la base de datos que tengamos montada si nos aparece el error UNDOTBS01, sigue los pasos atentamente y no te saltes ninguna linea:

1) Asegúrate que la base de datos se detenga:

sqlplus /nolog
SQL>connect sys/password as sysdba
SQL> shutdown immediate

2) Montar la BD en modo RESTRICT con pfile:

SQL> STARTUP RESTRICT MOUNT pfile=D:\oracle\oraHome\initORCL.ora

3) Si intentas eliminar un datafile del UNDTBS probablemente aparezcan errores:

SQL> ALTER DATABASE DATAFILE 'D:\ORADATA\ORCL\UNDOTBS01.DBF' OFFLINE DROP;
*
ERROR at line 1:
ORA-01548: active rollback segment ‘_SYSSMU11$’ found, terminate dropping
tablespace
o esta sentencia
DROP TABLESPACE undotbs INCLUDING CONTENTS AND DATAFILES ;
*
ERROR at line 1:
ORA-01548: active rollback segment ‘_SYSSMU11$’ found, terminate dropping
tablespace

4) Puedes usar este query para determinar que "Rollback Segments" estan corruptos:

SQL>select segment_name,status,tablespace_name from dba_rollback_segs where status='NEEDS RECOVERY';

SEGMENT_NAME STATUS TABLESPACE_NAME
—————————— —————- —————–
_SYSSMU11$ NEEDS RECOVERY UNDOTBS
_SYSSMU12$ NEEDS RECOVERY UNDOTBS
_SYSSMU13$ NEEDS RECOVERY UNDOTBS
_SYSSMU14$ NEEDS RECOVERY UNDOTBS
_SYSSMU15$ NEEDS RECOVERY UNDOTBS
_SYSSMU16$ NEEDS RECOVERY UNDOTBS
_SYSSMU17$ NEEDS RECOVERY UNDOTBS
_SYSSMU18$ NEEDS RECOVERY UNDOTBS
_SYSSMU19$ NEEDS RECOVERY UNDOTBS
_SYSSMU20$ NEEDS RECOVERY UNDOTBS

5) Agrega la siguiente linea en el pfile con el nombre los rollback segments que aparecen en el punto 4:

_corrupted_rollback_segments =('_SYSSMU11$','_SYSSMU12$','_SYSSMU13$','_SYSSMU14$','_SYSSMU15$','_SYSSMU16$','_SYSSMU17$','_SYSSMU18$','_SYSSMU19$','_SYSSMU20$')
Asegurate de comentar el parametros undo_management o poner el valo en MANUAL y agrega un nuevo nombre de UNDO TABLESPACE
#undo_management=AUTO
undo_tablespace=UNDOTBS1

6) Inicia nuevamente la base de datos con pfile:

SQL> STARTUP RESTRICT MOUNT pfile=D:\oracle\oraHome\initORCL.ora

7) Elimina los Rollback Segments corrupts del punto 4:

SQL> drop rollback segment "_SYSSMU11$";
Rollback segment dropped.

SQL> drop rollback segment "_SYSSMU20$";
Rollback segment dropped.

8) Verifica nuevamente:

SQL> select segment_name,status,tablespace_name from dba_rollback_segs;
SEGMENT_NAME STATUS TABLESPACE_NAME
—————————— —————- —————
SYSTEM ONLINE SYSTEM
_SYSSMU2$ ONLINE UNDOTBS1
_SYSSMU3$ ONLINE UNDOTBS1
_SYSSMU4$ ONLINE UNDOTBS1
_SYSSMU5$ ONLINE UNDOTBS1
_SYSSMU6$ ONLINE UNDOTBS1
_SYSSMU7$ ONLINE UNDOTBS1
_SYSSMU8$ ONLINE UNDOTBS1
_SYSSMU9$ ONLINE UNDOTBS1
_SYSSMU10$ ONLINE UNDOTBS1
_SYSSMU21$ ONLINE UNDOTBS1

9) Ahora si elimina el UNDO TABLESPACE malogrado, en nuestro ejemplo UNDOTBS:

SQL> drop TABLESPACE UNDOTBS;

10) Recrea el nuevo tablespace UNDOTBS1:

SQL>CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE 'D:\oradata\ORCL\UNDOTBS01.DBF' SIZE 2000M reuse AUTOEXTEND ON;

11) Altera la configuracion para usar el nuevo UNDO tablespace:

ALTER SYSTEM SET undo_tablespace = UNDOTBS1;

12) Remueve y edita las siguientes lineas del pfile:

_corrupted_rollback_segments =('_SYSSMU11$','_SYSSMU12$','_SYSSMU13$','_SYSSMU14$','_SYSSMU15$','_SYSSMU16 $','_SYSSMU17$','_SYSSMU18$','_SYSSMU19$','_SYSSMU20$')
y habilita la utilizacion de undo_mangement=AUTO
undo_management=AUTO
undo_retention=10800
undo_tablespace=UNDOTBS1

13) Detener el servicio de base de datos:

SQL>shutdown immediate;

14) Reinicia la base de datos:

sqlplus /nolog
SQL>connect sys/password as sysdba
SQL> STARTUP RESTRICT MOUNT pfile=D:\oracle\oraHome\initORCL.ora
ORACLE instance started.
Total System Global Area 1620126452 bytes
Fixed Size 457460 bytes
Variable Size 545259520 bytes
Database Buffers 1073741824 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.

15) En este punto podrias sincronizar los cambios de pfile con spfile:

SQL>create spfile from pfile=D:\oracle\oraHome\initORCL.ora;

16) Reiniciar la base de datos de forma normal usando SPFILE:

SQL>shutdown immediate
SQL>startup

Y listo, si te funciona ya has devuelto a la vida tu base de datos.
Share on Google Plus
    Blogger Comment

1 comentarios:

Miguel Eduardo Arana dijo...

Hola, excelente el paso a paso un solo punto a tomar en cuenta, en el caso de que tenga corrupción en un segmento de rollback o en el undo puede ocurrir, como en mi caso, que no te deje abrir la base de datos, entonces no puedes aplicar prácticamente nada de lo que mencionas, que me sugieres hacer? saludos y gracias!