sábado, 15 de junio de 2013

Oracle startup fails with ORA-00600: internal error code, arguments: [4137]


ORA-00600: internal error code, arguments: [4137], [], [], [], [], [], [], []

How To Repair UNDO log corruption
ROLLBACK SEGMENT CORRUPTION
Rollback Segment Needs Recovery (undo)

El error ORA-00600 [4137] se presenta cuando un segmento del RollBack está corrupto.  
El problema está en el TableSpace APPS_UNDOTS1 ahí es donde está el segmento corructo.
Metalik te recomienda lo siguiente según la nota ORA-600 [4137] "XID in Undo and Redo Does Not Match" [ID 43914.1]:

If in archivelog mode, restore the file & roll forward.
If in Noarchivelog mode, restore from a cold backup taken before the error was reported.


A continuación otra forma solucionar el error sería crear un nuevo TBS UNDO y remplazar al actual:

1.- Buscamos el segmento que tiene problemas:

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

2.- Creamos un nuevo Tablespace UNDO con el nombre undotbs2.
create undo tablespace undotbs2 datafile                       
'/u01/oracle/PROD/db/apps_st/data/undotbs2.dbf' size 1024m;

3.- Asignamos el nuevo tablespace undo a la base datos en la variable undo_tablespace, el cambio se lo puede hacer sin reiniciar la BD.
alter system set undo_tablespace=undotbs2

4.- Ponemos fuera de linea al tablespace que tiene problemas.
alter tablespace APPS_UNDOTS1 offline;

5.- En el archivo de configuración init.ora debemos adicionar la variable _OFFLINE_ROLLBACK_SEGMENTS con el valor recuperado de la consulta del paso 1 y asignar el nuevo tablespace a la BD.
ANTES:
undo_tablespace= APPS_UNDOTS1
AHORA:
undo_tablespace=undotbs2
_OFFLINE_ROLLBACK_SEGMENTS=(_SYSSMU5$)

6.- Para que aplique los cambios debemos reiniciar la base de datos.
       SQL>shutdown immediate;
       SQL>startup;
7.- Ahora debemos eliminar el segmento con problemas y el tablespace.
SQL> drop rollback segment "_SYSSMU5$";
SQL> drop tablespace APPS_UNDOTS1;

Hasta este punto ya tenemos solucionado el problema del segmento con error, los siguientes pasos será para cambiar el nombre del TBS UNDO como estaba antes:
8.- Cambiamos el nombre del nuevo tablespace al nombre del anterior:
SQL> alter tablespace undotbs2 rename to APPS_UNDOTS1;

9.- Verificamos que cambio correctamente.
SQL> show parameters undo
10.- Configuramos el archivo init.ora volviendo a su estado anterior.
undo_tablespace= APPS_UNDOTS1

Quitamos o comentamos la línea de abajo.
#_OFFLINE_ROLLBACK_SEGMENTS=(_SYSSMU5$)

Páginas de referencia:

No hay comentarios:

Publicar un comentario