Como recrear todos indices en Oracle en un nuevo tablespace cuando el actual esta corrupto. How to recreate all indexes on a new tablespace when the actual tablespace is corrupted.

Pues eso amig@s,

Cuando se nos corrompe un tablespace y necesitamos recrear los indices en otro tablespace, existe una manera, esto puede suceder en todas las versiones de oracle.

Primero que nada debemos poner el tablespace corrupto offline, para ello, paramos la bbdd y la iniciamos solo en modo mount.

Luego ejecutamos el siguiente comando:

alter database datafile 'rutacompletaconnombreincluidodeltablespacecorrupto' offline;

Luego hacemos un startup y comenzamos con los siguientes pasos.

1-Creamos un nuevo tablespace con un tamaño inicial de un 1GB.
2-Con la siguiente query obtenemos una lista de los objetos de ese tablespace, en este caso solo los indices:

select index_name, tablespace_name from user_indexes where tablespace_name=NOMBRETABLESPACECORRUPTO'

Una vez que comprobamos todos los objetos y contamos el total continuamos con el siguiente paso.

3-Con la siguiente query lo que hacemos es crear un spool para luego aplicar de golpe todos los alter index rebuild...

select 'alter index ' || index_name || ' rebuild tablespace NOMBREDELNUEVOTABLESPACE online;' from user_indexes where tablespace_name=NOMBRETABLESPACECORRUPTO';

Con este script lo que hacemos es generar el spool con todos los indices que se encuentran en el tablespace corrupto y con el comando rebuild online lo que le estamos diciendo es que no lea el origen corrupto, en este caso el tablespace, sino que utilice los datos del diccionario o de la tabla.

Luego copiamos la salida y ejecutamos todos los alter, por ejemplo con el toad.

y Voila!!!!

Tenemos todos los objetos en el nuevo tablespace asi que ya podemos borrar el antiguo :).

Espero que les resulte util.

Salu2.

Share on Google Plus
    Blogger Comment

0 comentarios: