Sie sind auf Seite 1von 3

1.

Objetivo
Mostrar cmo reconstruir un ndice existente en base de datos Oracle 10g y ver que ndices
deberan de ser reconstruidos mediante un script automtico.

2. Introduccin
Es importante peridicamente examinar y determinar qu ndices son susceptibles de ser
reconstruidos. Cuando un ndice est descompensado puede ser porque algunas partes de ste
han sido accedidas con mayor frecuencia que otras. Como resultado de este suceso podemos
obtener problemas de contencin de disco o cuellos de botella en el sistema. Normalmente
reconstruimos un ndice con el comando ALTER INDEX.

3. Cundo sera conveniente reconstruir un ndice?


Es importante tener actualizadas las estadsticas de la base de datos. Para saber si las
estadsticas se estn lanzando correctamente podemos hacer una consulta sobre la tabla
dba_indexes y ver el campo last_analyzed para observar cuando se ejecutaron sobre ese ndice
las estadsticas.
SELECT index_name, last_analyzed
FROM dba_indexed
WHERE table_owner=nb_usuario
Nota: Siendo nb_usuario el nombre del esquema del usuario para el que queramos validar las
estadsticas. (lanzar con usuario SYS)
Para actualizar las estadsticas utilizamos el paquete DBM_STATS. Podemos actualizar las
estadsticas de todos los objetos de un esquema de la siguiente forma:
Execute DBMS_STATS.gather_schema_stats(Esquema);
Nota: Sustituimos esquema por el nombre de nuestro esquema a actualizar (lanzar con usuario
SYS)
Una vez actualizadas las estadsticas de los ndices de la base de datos lanzamos la siguiente
consulta:
SELECT index_name, blevel,
DECODE(blevel,0,'OK BLEVEL',1,'OK BLEVEL',2,

'OK BLEVEL',3,'OK BLEVEL',4,'OK BLEVEL','BLEVEL HIGH') OK


FROM dba_indexes where table_owner='Propietario';
Nota: Sustituimos Propietario por el esquema o propietario que queramos verificar (lanzar con
usuario SYS)
Con esta sentencia obtendremos el nombre nombre del ndice, el blevel y si es correcto.

INDEX_NAME
INX_CUENTA
INX_TRABAJO
INX_DINERO

BLEVEL
1
0

OK
OK BLEVEL
OK BLEVEL
BLEVEL HIGH

Los ndices que deberamos de reconstruir son los que en la columna ok aparecen como BLEVEL
HIGH.
Blevel (branch level) es parte del formato del B-tree del ndice e indica el nmero de veces que
ORACLE ha tenido que reducir la bsqueda en ese ndice. Si este valor est por encima de 4 el
ndice debera de ser reconstruido.

4. Comando ALTER INDEX


Como hemos comentado esta sentencia se utiliza para cambiar o reconstruir un ndice existente
en la base de datos.
Para poder ejecutar este comando el ndice debe de estar en el propio esquema donde intentes
ejecutarlo o deberas de tener el privilegio alter any index. Tambin tenemos que tener en
cuenta que para realizar la reconstruccin de un ndice deberamos de tener cuota suficiente
sobre el tablespace que lo lanzamos.
Para reconstruir un ndice bastara con lazar la siguiente sentencia
ALTER INDEX <index_name> REBUILD;

Para reconstruir una particin de un ndice podramos hacer lo siguiente


ALTER INDEX <index_name> REBUILD PARTITION <nb_partition> NOLOGGING;
Nota: En algunos casos cuando alguno de los ndices tiene algn tipo de corrupcin no es
posible reconstruirlo. La solucin en este caso es borrar el ndice y recrearlo.

Das könnte Ihnen auch gefallen